WP Mail Bank: WordPress SMTP Plugin & Email Logs - Version 3.0.9

Version Description

  • FIX: Already Sent Headers Bug Fixed
  • TWEAK: Code Optimized
Download this release

Release Info

Developer contact-banker
Plugin Icon 128x128 WP Mail Bank: WordPress SMTP Plugin & Email Logs
Version 3.0.9
Comparing to
See all releases

Code changes from version 3.0.8 to 3.0.9

Files changed (50) hide show
  1. assets/admin/layout/css/font/tech-banker.svg +59 -59
  2. assets/admin/layout/css/layout-rtl.css +2 -2
  3. assets/global/plugins/custom/js/custom.js +243 -243
  4. assets/global/plugins/datatables/media/js/jquery.datatables.js +1 -1
  5. assets/global/plugins/icons/fonts/icons.svg +166 -166
  6. assets/global/plugins/icons/icons-lte-ie7.js +5 -5
  7. assets/global/plugins/toastr/toastr.css +4 -4
  8. assets/global/plugins/toastr/toastr.js +338 -338
  9. assets/global/plugins/validation/jquery.validate.js +1221 -1221
  10. includes/authentication-manager-mail-bank.php +22 -31
  11. includes/footer.php +1050 -1050
  12. includes/google-authentication-mail-bank.php +42 -49
  13. includes/header.php +5 -5
  14. includes/mail-bank-configuration-provider.php +11 -15
  15. includes/mail-bank-configure-transport.php +41 -46
  16. includes/mail-bank-email-log.php +84 -95
  17. includes/mail-bank-manage-email-address.php +40 -52
  18. includes/mail-bank-manage-email.php +220 -264
  19. includes/mail-bank-manage-token.php +31 -48
  20. includes/mail-bank-register-transport.php +1 -7
  21. includes/mail-bank-send-mail.php +100 -111
  22. includes/mail-bank-smtp-transport.php +3 -10
  23. includes/mail-bank-zend-engine.php +143 -151
  24. includes/mail-bank-zend-mail-helper.php +33 -42
  25. includes/mailer.php +186 -208
  26. includes/microsoft-authentication-mail-bank.php +40 -47
  27. includes/queries.php +89 -93
  28. includes/sidebar.php +122 -123
  29. includes/token-manager-mail-bank.php +52 -62
  30. includes/translations.php +410 -410
  31. includes/yahoo-authentication-mail-bank.php +50 -58
  32. languages/{wp-mail-bank-vi.mo → wp-mail-bank-vi_VN.mo} +0 -0
  33. languages/{wp-mail-bank-vi.po → wp-mail-bank-vi_VN.po} +2 -2
  34. lib/action-library.php +265 -266
  35. lib/admin-bar-menu.php +98 -99
  36. lib/callback.php +0 -1
  37. lib/helper.php +163 -185
  38. lib/install-script.php +313 -323
  39. lib/sidebar-menu.php +261 -282
  40. lib/zend/exception.php +10 -18
  41. lib/zend/loader.php +83 -95
  42. lib/zend/loader/autoloader.php +105 -143
  43. lib/zend/mail.php +177 -263
  44. lib/zend/mail/exception.php +1 -3
  45. lib/zend/mail/message.php +18 -26
  46. lib/zend/mail/message/file.php +3 -11
  47. lib/zend/mail/message/interface.php +1 -6
  48. lib/zend/mail/part/file.php +65 -73
  49. lib/zend/mail/part/interface.php +1 -13
  50. lib/zend/mail/protocol/abstract.php +6 -24
assets/admin/layout/css/font/tech-banker.svg CHANGED
@@ -4,65 +4,65 @@
4
  <metadata>Generated by IcoMoon</metadata>
5
  <defs>
6
  <font id="foobox" horiz-adv-x="1024">
7
- <font-face units-per-em="1024" ascent="960" descent="-64" />
8
- <missing-glyph horiz-adv-x="1024" />
9
- <glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10
- <glyph unicode="&#x2f;" d="M0 249.344v185.344h229.376v-183.296q0-28.672 20.48-49.664t50.176-20.992 50.688 20.48 20.992 50.176v433.152q0 119.808 88.576 204.288t210.432 84.48 210.432-84.992 88.576-205.824v-94.208l-137.216-40.96-91.136 43.008v81.92q0 29.696-20.48 50.176t-50.176 20.48-50.688-20.48-20.992-50.176v-427.008q0-122.88-88.064-209.408t-210.944-86.528q-123.904 0-211.968 87.552t-88.064 212.48zM741.376 246.272v187.392l91.136-43.008 137.216 40.96v-188.416q0-29.696 20.48-50.688t50.176-20.992 50.176 20.992 20.48 50.688v191.488h229.376v-185.344q0-123.904-87.552-211.968t-211.456-88.064-211.968 87.040-88.064 209.92z" horiz-adv-x="1340" />
11
- <glyph unicode="&#x3b;" d="M-1.024 189.952v380.928q0 13.312 13.312 13.312h180.224v132.096q0 14.336 13.312 14.336h100.352v-526.336q0-14.336-12.288-14.336h-294.912zM110.592 274.944h68.608q13.312 0 13.312 14.336v210.944h-68.608q-13.312 0-13.312-14.336v-210.944zM340.992 189.952v380.928q0 13.312 13.312 13.312h100.352v-379.904q0-14.336-12.288-14.336h-101.376zM340.992 645.632v70.656q0 14.336 12.288 14.336h101.376v-70.656q0-14.336-12.288-14.336h-101.376zM493.568 189.952v380.928q0 13.312 13.312 13.312h294.912v-516.096q0-13.312-13.312-13.312h-294.912l1.024 70.656q0 14.336 12.288 14.336h180.224v50.176h-193.536zM606.208 274.944h68.608q12.288 0 12.288 14.336v210.944h-68.608q-12.288 0-12.288-14.336v-210.944zM840.704 125.44q0 14.336 13.312 14.336h180.224v50.176h-193.536v380.928q0 13.312 13.312 13.312h293.888v-516.096q0-13.312-12.288-13.312h-294.912v70.656zM952.32 274.944h68.608q13.312 0 13.312 14.336v210.944h-68.608q-13.312 0-13.312-14.336v-210.944z" horiz-adv-x="1148" />
12
- <glyph unicode="&#x3e;" d="M0 467.456q0 63.488 50.688 108.544t115.2 45.056q63.488 0 107.52-36.864h5.12q137.216 83.968 343.040 83.968l5.12 4.096 71.68 273.408 247.808-36.864q0-1.024 2.048-1.024 1.024 0 0 1.024 2.048 1.024 11.776 15.872t14.848 18.944q34.816 32.768 83.968 32.768 50.176 0 84.48-33.28t34.304-83.456-34.304-86.016-84.48-35.84q-58.368 0-89.088 39.424t-30.72 98.816q-2.048-1.024-99.84 13.312t-112.128 17.408h-3.072q-2.048-2.048-16.896-54.784t-30.72-111.616-17.92-65.024v-3.072l5.12-4.096q73.728 0 151.040-20.992t133.632-58.88l3.072-2.048q1.024 1.024 2.048 1.024t2.048 1.024q25.6 18.432 36.352 25.6t30.208 13.312 44.032 6.144q69.632 0 118.784-49.152t49.152-119.808q0-48.128-27.136-88.064t-71.168-61.44q0-199.68-266.24-310.272-41.984-18.432-57.344-23.552-32.768-10.24-93.184-19.456t-95.232-9.216q-122.88 0-236.544 35.84-2.048 2.048-73.728 38.912-97.28 52.224-156.16 118.784t-58.88 159.744h-5.12q-33.792 17.408-60.416 51.2l-9.216 12.288q-15.36 27.648-19.456 46.592t-4.096 51.712zM34.816 455.168q0-67.584 58.368-114.688 5.12 60.416 49.152 118.784t103.424 103.424q-37.888 26.624-83.968 26.624-50.176 0-88.576-41.472t-38.4-92.672zM139.264 305.664q0-55.296 31.744-106.496t81.408-87.552 104.96-60.928 107.52-34.816q76.8-14.336 149.504-14.336 125.952 0 238.592 40.448t189.44 125.44h-3.072q30.72 38.912 44.032 70.144t13.312 74.24q0 55.296-27.136 105.472t-71.168 86.016-94.208 61.952-102.4 39.424q-87.040 23.552-185.344 23.552-75.776 0-155.136-18.432t-153.6-55.296-121.344-101.888-47.104-146.944zM329.728 380.416q0 37.888 23.040 60.928t60.928 23.040 63.488-23.040 25.6-60.928q0-36.864-26.112-61.44t-62.976-24.576-60.416 24.576-23.552 61.44zM366.592 212.48h45.056q25.6-46.080 81.408-70.144t114.176-24.064q59.392 0 112.64 24.064t86.016 70.144h41.984q-25.6-63.488-95.232-98.304t-145.408-34.816q-73.728 0-144.896 35.328t-95.744 97.792zM710.656 380.416q0 38.912 23.552 61.44t62.464 22.528q34.816 0 59.392-24.576t24.576-59.392-24.576-60.416-59.392-25.6q-37.888 0-61.952 24.064t-24.064 61.952zM971.776 859.648q0-35.84 25.6-61.44t61.44-25.6q36.864 0 60.416 25.088t23.552 61.952q0 34.816-24.576 59.392t-59.392 24.576-60.928-25.088-26.112-58.88zM986.112 571.904q56.32-36.864 97.28-94.72t57.344-122.368q60.416 44.032 60.416 98.304 0 59.392-36.352 102.4t-94.72 43.008q-46.080 0-83.968-26.624z" horiz-adv-x="1232" />
13
- <glyph unicode="&#x74;" d="M0 556.544v145.408q61.44 20.48 103.424 56.32 41.984 33.792 68.608 88.064 26.624 52.224 35.84 130.048h146.432v-259.072h242.688v-160.768h-242.688v-262.144q0-88.064 9.216-114.688 9.216-24.576 34.816-39.936 34.816-20.48 77.824-20.48 78.848 0 154.624 50.176v-160.768q-64.512-31.744-118.784-44.032-53.248-12.288-114.688-12.288-69.632 0-124.928 17.408-56.32 19.456-91.136 51.2-36.864 31.744-53.248 69.632-14.336 34.816-14.336 107.52v358.4h-113.664z" horiz-adv-x="630" />
14
- <glyph unicode="&#xe000;" d="M876.856 448v-73.142q0-30.286-18.572-51.714t-48.286-21.428h-402.286l167.428-168q21.714-20.572 21.714-51.428t-21.714-51.428l-42.858-43.428q-21.142-21.142-51.428-21.142-29.714 0-52 21.142l-372 372.572q-21.142 21.142-21.142 51.428 0 29.714 21.142 52l372 371.428q21.714 21.714 52 21.714 29.714 0 51.428-21.714l42.858-42.286q21.714-21.714 21.714-52t-21.714-52l-167.428-167.428h402.286q29.714 0 48.286-21.428t18.572-51.714z" horiz-adv-x="876" />
15
- <glyph unicode="&#xe001;" d="M840.286 411.428q0-30.858-21.142-52l-372-372q-22.286-21.142-52-21.142-29.142 0-51.428 21.142l-42.858 42.858q-21.714 21.714-21.714 52t21.714 52l167.428 167.428h-402.286q-29.714 0-48.286 21.428t-18.572 51.714v73.142q0 30.286 18.572 51.714t48.286 21.428h402.286l-167.428 168q-21.714 20.572-21.714 51.428t21.714 51.428l42.858 42.858q21.714 21.714 51.428 21.714 30.286 0 52-21.714l372-372q21.142-20 21.142-51.428z" horiz-adv-x="876" />
16
- <glyph unicode="&#xe002;" d="M741.428 204.572q0-22.858-16-38.858l-77.714-77.714q-16-16-38.858-16t-38.858 16l-168 168-168-168q-16-16-38.858-16t-38.858 16l-77.714 77.714q-16 16-16 38.858t16 38.858l168 168-168 168q-16 16-16 38.858t16 38.858l77.714 77.714q16 16 38.858 16t38.858-16l168-168 168 168q16 16 38.858 16t38.858-16l77.714-77.714q16-16 16-38.858t-16-38.858l-168-168 168-168q16-16 16-38.858z" horiz-adv-x="804" />
17
- <glyph unicode="&#xe003;" d="M790.572 430.286l-758.858-421.714q-13.142-7.428-22.572-1.714t-9.428 20.572v841.142q0 14.858 9.428 20.572t22.572-1.714l758.858-421.714q13.142-7.428 13.142-17.714t-13.142-17.714z" horiz-adv-x="804" />
18
- <glyph unicode="&#xe004;" d="M876.856 850.286v-804.572q0-14.858-10.858-25.714t-25.714-10.858h-292.572q-14.858 0-25.714 10.858t-10.858 25.714v804.572q0 14.858 10.858 25.714t25.714 10.858h292.572q14.858 0 25.714-10.858t10.858-25.714zM364.856 850.286v-804.572q0-14.858-10.858-25.714t-25.714-10.858h-292.572q-14.858 0-25.714 10.858t-10.858 25.714v804.572q0 14.858 10.858 25.714t25.714 10.858h292.572q14.858 0 25.714-10.858t10.858-25.714z" horiz-adv-x="876" />
19
- <glyph unicode="&#xe005;" d="M283.428 192q0-34.286-24.286-58.286t-58-24q-34.286 0-58.286 24t-24 58.286 24 58.286 58.286 24q33.714 0 58-24t24.286-58.286zM530.286 82.286q0-30.286-21.428-51.714t-51.714-21.428-51.714 21.428-21.428 51.714 21.428 51.714 51.714 21.428 51.714-21.428 21.428-51.714zM182.858 448q0-37.714-26.858-64.572t-64.572-26.858-64.572 26.858-26.858 64.572 26.858 64.572 64.572 26.858 64.572-26.858 26.858-64.572zM777.142 192q0-26.286-18.858-45.142t-45.142-18.858-45.142 18.858-18.858 45.142 18.858 45.142 45.142 18.858 45.142-18.858 18.858-45.142zM301.714 704q0-41.714-29.428-71.142t-71.142-29.428-71.142 29.428-29.428 71.142 29.428 71.142 71.142 29.428 71.142-29.428 29.428-71.142zM566.858 813.714q0-45.714-32-77.714t-77.714-32-77.714 32-32 77.714 32 77.714 77.714 32 77.714-32 32-77.714zM877.714 448q0-22.858-16-38.858t-38.858-16-38.858 16-16 38.858 16 38.858 38.858 16 38.858-16 16-38.858zM758.858 704q0-18.858-13.428-32.286t-32.286-13.428-32.286 13.428-13.428 32.286 13.428 32.286 32.286 13.428 32.286-13.428 13.428-32.286z" horiz-adv-x="896" />
20
- <glyph unicode="&#xe006;" d="M0 135.786q0 89.058 91.104 158.666t220.084 69.608h55.278q-42.994 40.946-42.994 88.034 0 29.686 16.378 59.372-10.236-1.024-29.686-1.024-106.46 0-174.020 66.538t-67.56 163.784q0 93.152 83.94 162.76t191.422 69.608h317.332l-70.632-51.182h-100.318q48.112-18.426 75.238-69.608t27.126-113.626q0-95.2-90.082-165.832-37.876-29.686-49.136-47.088t-11.26-42.994q0-19.45 27.638-49.136t55.278-50.158q62.442-44.016 86.498-90.082t24.056-115.672q0-92.128-83.94-160.202t-227.25-68.072q-136.146 0-230.32 51.182t-94.176 135.122zM114.648 169.568q0-70.632 59.884-120.278t148.94-49.646q121.814 0 176.58 45.040t54.766 119.766q0 19.45-4.094 32.756-3.070 11.26-7.166 20.984t-12.284 19.45-14.332 16.378-19.962 16.89-20.984 15.354-25.592 17.914-26.614 17.914q-39.922 12.284-78.82 12.284-92.128 1.024-161.224-48.112t-69.096-116.696zM182.21 741.786q11.26-80.868 61.93-139.216t112.090-59.372q60.396-2.048 96.222 53.23t25.592 136.146-60.908 137.168-112.090 58.348-97.246-52.206-25.592-134.098zM750.334 717.22v51.182h204.73v204.73h51.182v-204.73h205.754v-51.182h-205.754v-205.754h-51.182v205.754h-204.73z" horiz-adv-x="1212" />
21
- <glyph unicode="&#xe007;" d="M0 589.312q0 64.512 27.136 128t77.824 117.76 133.12 88.064 182.784 33.792q162.816 0 267.264-100.352t104.448-236.544q0-175.104-88.576-289.28t-228.864-114.176q-46.080 0-86.528 21.504t-56.832 52.224l-40.96-161.792q-5.12-19.456-13.312-39.424t-17.92-38.4-19.456-34.816-19.456-30.72-16.896-24.064-13.312-16.896l-6.144-8.192q-3.072-4.096-8.192-3.072t-6.144 6.144q0 1.024-1.536 14.336t-3.072 28.16-3.072 38.4-1.024 45.568 3.072 48.64 7.68 49.152q11.264 48.128 75.776 320.512-8.192 16.384-13.312 39.424t-5.12 37.376l-1.024 15.36q0 65.536 33.28 109.056t80.384 43.52q37.888 0 58.88-25.088t20.992-62.976q0-23.552-8.704-57.856t-23.040-78.848-20.48-72.192q-10.24-46.080 17.92-79.872t75.264-33.792q80.896 0 133.632 91.648t52.736 221.696q0 99.328-64.512 162.304t-180.224 62.976q-129.024 0-209.408-82.944t-80.384-198.656q0-68.608 38.912-115.712 13.312-15.36 8.192-32.768-2.048-5.12-6.144-23.552t-6.144-23.552q-2.048-11.264-10.24-14.848t-18.432 0.512q-60.416 24.576-90.624 84.48t-30.208 139.776z" horiz-adv-x="793" />
22
- <glyph unicode="&#xe008;" d="M-5.116 852.114q0 51.154 35.808 84.404t93.1 33.25q56.27 0 91.054-32.738 35.808-33.762 35.808-87.984 0-49.108-34.784-81.846-35.808-33.762-94.124-33.762h-1.024q-56.27 0-91.054 33.762t-34.784 84.916zM8.184-43.078v683.416h227.124v-683.416h-227.124zM361.146-43.078h227.124v381.608q0 35.808 8.184 55.246 14.324 34.784 43.48 58.826t73.15 24.042q114.584 0 114.584-154.484v-365.238h227.124v391.838q0 151.416-71.616 229.68t-189.27 78.266q-131.976 0-205.638-113.562v-2.046h-1.024l1.024 2.046v97.192h-227.124q2.046-32.738 2.046-203.592t-2.046-479.824z" horiz-adv-x="1064" />
23
- <glyph unicode="&#xe009;" d="M0 52.19q30.682-3.068 61.366-3.068 180.006 0 321.148 110.458-83.866 1.022-150.346 51.138t-91.026 127.846q20.456-4.092 48.070-4.092 35.796 0 68.526 9.204-90.004 17.386-148.812 88.47t-58.808 164.154v3.068q54.206-30.682 117.618-31.706-53.184 34.774-84.378 91.538t-31.194 123.244q0 69.548 35.796 129.892 96.14-119.664 234.724-190.746t297.114-79.264q-7.16 33.752-7.16 59.32 0 106.368 75.684 182.052t183.074 75.684q111.482 0 188.188-81.822 88.98 18.41 163.642 63.412-28.638-93.072-112.504-143.186 74.662 9.204 147.278 40.91-49.092-76.708-127.846-133.982v-33.752q0-103.3-30.172-207.11t-92.048-198.416-147.79-168.244-206.086-117.106-258.248-43.468q-213.758 0-395.81 115.572z" horiz-adv-x="1258" />
24
- <glyph unicode="&#xe00a;" d="M286.416 426.496v195.584h157.696v98.304q0 106.496 69.12 181.248t167.424 74.752h156.672v-195.584h-156.672q-15.36 0-27.648-16.896t-12.288-41.472v-100.352h196.608v-195.584h-196.608v-474.112h-196.608v474.112h-157.696z" horiz-adv-x="836" />
25
- <glyph unicode="&#xe00b;" d="M0 163.328q11.264 15.36 32.256 26.112t50.176 20.48 41.472 15.872q19.456 0 34.304-4.608t34.304-15.36 25.6-12.8q48.128-21.504 266.24-121.856 19.456-4.096 36.352 0t40.448 17.92 24.576 14.848q20.48 9.216 78.336 35.328t89.6 40.448q4.096 2.048 42.496 21.504t61.952 24.576q13.312 2.048 28.16-1.024t24.064-7.68 23.552-13.312 18.432-10.752 15.872-6.144 18.944-8.192 11.264-11.264q3.072-4.096 4.096-14.336-10.24-13.312-31.744-24.576t-52.224-22.528-40.96-16.384q-44.032-20.48-131.584-62.976t-131.584-62.976q-7.168-3.072-21.504-11.776t-24.064-13.312-26.112-11.264-28.16-7.168-30.208 1.536l-270.336 125.952q-6.144 3.072-32.768 14.336t-52.736 22.528-54.784 24.576-47.616 24.064-22.016 16.896q-4.096 4.096-4.096 13.312zM0 437.76q11.264 15.36 32.256 25.6t51.2 20.48 42.496 15.36q19.456 0 34.816-4.608t35.328-15.36 26.112-13.824q43.008-19.456 129.536-59.392t130.56-60.416q19.456-5.12 37.888-0.512t39.936 17.408 25.6 14.848q69.632 32.768 163.84 73.728 11.264 5.12 32.256 16.896t39.424 19.968 36.864 11.264q16.384 3.072 32.256-1.024t38.4-17.408 23.552-13.312q5.12-3.072 15.872-6.656t18.432-8.192 11.776-10.752q3.072-5.12 4.096-14.336-10.24-14.336-32.256-26.112t-53.76-23.040-41.984-16.384q-49.152-23.552-138.752-66.56t-125.44-60.416q-7.168-3.072-26.624-14.336t-29.696-15.36-33.28-10.24-36.352 0q-219.136 103.424-266.24 124.928-6.144 3.072-45.056 19.456t-71.168 30.72-62.976 30.208-34.816 23.040q-4.096 4.096-4.096 14.336zM0 711.168q10.24 15.36 32.256 27.136t53.76 23.040 41.984 16.384l356.352 165.888q30.72 0 54.784-7.168t57.856-26.624 40.96-22.528q39.936-18.432 119.808-55.808t119.808-55.808q4.096-2.048 37.376-15.36t55.808-24.576 27.648-20.48q3.072-4.096 4.096-13.312-9.216-13.312-26.624-23.040t-44.544-19.456-35.328-13.824q-48.128-22.528-143.36-68.096t-142.336-68.096q-6.144-3.072-20.48-11.264t-23.552-12.8-25.6-10.752-27.648-6.144-28.672 1.024q-250.88 116.736-262.144 121.856-4.096 2.048-64.512 28.16t-104.448 47.616-49.152 30.72q-4.096 4.096-4.096 13.312z" horiz-adv-x="1002" />
26
- <glyph unicode="&#xe00c;" d="M704 384l128 128v-512h-768v768h512l-128-128h-256v-512h512zM960 896v-352l-130.744 130.744-354.746-354.744h-90.51v90.512l354.744 354.744-130.744 130.744z" />
27
- <glyph unicode="&#xe00d;" d="M64 384h384v-384l-138.26 138.26-202-202-107.48 107.48 202 202zM821.74 245.74l202-202-107.48-107.48-202 202-138.26-138.26v384h384zM960 512h-384v384l138.26-138.26 202 202 107.48-107.48-202-202zM309.74 757.74l138.26 138.26v-384h-384l138.26 138.26-202 202 107.48 107.48z" />
28
- <glyph unicode="&#xe00e;" d="M1024 960v-384l-138.26 138.26-212-212-107.48 107.48 212 212-138.26 138.26zM245.74 821.74l212-212-107.48-107.48-212 212-138.26-138.26v384h384zM885.74 181.74l138.26 138.26v-384h-384l138.26 138.26-212 212 107.48 107.48zM457.74 286.26l-212-212 138.26-138.26h-384v384l138.26-138.26 212 212z" />
29
- <glyph unicode="&#xe00f;" d="M512 384l256 256h-192v256h-128v-256h-192zM744.726 488.728l-71.74-71.742 260.080-96.986-421.066-157.018-421.066 157.018 260.080 96.986-71.742 71.742-279.272-104.728v-256l512-192 512 192v256z" />
30
- <glyph unicode="&#xe010;" d="M960 832h-896c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM896 704v-46l-384-226.286-384 226.286v46h768zM128 192v354.572l384-226.286 384 226.286v-354.572h-768z" />
31
- <glyph unicode="&#xe011;" d="M1024 448c-1.278 66.862-15.784 133.516-42.576 194.462-26.704 61-65.462 116.258-113.042 161.92-47.552 45.696-103.944 81.82-164.984 105.652-61.004 23.924-126.596 35.352-191.398 33.966-64.81-1.282-129.332-15.374-188.334-41.356-59.048-25.896-112.542-63.47-156.734-109.576-44.224-46.082-79.16-100.708-102.186-159.798-23.114-59.062-34.128-122.52-32.746-185.27 1.286-62.76 14.964-125.148 40.134-182.206 25.088-57.1 61.476-108.828 106.11-151.548 44.61-42.754 97.472-76.504 154.614-98.72 57.118-22.304 118.446-32.902 179.142-31.526 60.708 1.29 120.962 14.554 176.076 38.914 55.15 24.282 105.116 59.48 146.366 102.644 41.282 43.14 73.844 94.236 95.254 149.43 13.034 33.458 21.88 68.4 26.542 103.798 1.246-0.072 2.498-0.12 3.762-0.12 35.346 0 64 28.652 64 64 0 1.796-0.094 3.572-0.238 5.332h0.238zM922.306 278.052c-23.472-53.202-57.484-101.4-99.178-141.18-41.67-39.81-91-71.186-144.244-91.79-53.228-20.678-110.29-30.452-166.884-29.082-56.604 1.298-112.596 13.736-163.82 36.474-51.25 22.666-97.684 55.49-135.994 95.712-38.338 40.198-68.528 87.764-88.322 139.058-19.87 51.284-29.228 106.214-27.864 160.756 1.302 54.552 13.328 108.412 35.254 157.69 21.858 49.3 53.498 93.97 92.246 130.81 38.73 36.868 84.53 65.87 133.874 84.856 49.338 19.060 102.136 28.006 154.626 26.644 52.5-1.306 104.228-12.918 151.562-34.034 47.352-21.050 90.256-51.502 125.624-88.782 35.396-37.258 63.21-81.294 81.39-128.688 18.248-47.392 26.782-98.058 25.424-148.496h0.238c-0.144-1.76-0.238-3.536-0.238-5.332 0-33.012 24.992-60.174 57.086-63.624-6.224-34.822-16.53-68.818-30.78-100.992z" />
32
- <glyph unicode="&#xe012;" d="M192 448c0 12.18 0.704 24.196 2.030 36.022l-184.98 60.104c-5.916-31.14-9.050-63.264-9.050-96.126 0-147.23 62.166-279.922 161.654-373.324l114.284 157.296c-52.124 56.926-83.938 132.758-83.938 216.028zM832 448c0-83.268-31.812-159.102-83.938-216.028l114.284-157.296c99.488 93.402 161.654 226.094 161.654 373.324 0 32.862-3.132 64.986-9.048 96.126l-184.98-60.104c1.324-11.828 2.028-23.842 2.028-36.022zM576 761.592c91.934-18.662 169.544-76.742 214.45-155.826l184.978 60.102c-73.196 155.42-222.24 268.060-399.428 290.156v-194.432zM233.55 605.768c44.906 79.084 122.516 137.164 214.45 155.826v194.43c-177.188-22.096-326.23-134.736-399.426-290.154l184.976-60.102zM644.556 156.672c-40.39-18.408-85.272-28.672-132.556-28.672s-92.166 10.264-132.554 28.67l-114.292-157.31c73.206-40.366 157.336-63.36 246.846-63.36s173.64 22.994 246.848 63.36l-114.292 157.312z" />
33
- <glyph unicode="&#xe013;" d="M384 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128-70.692 0-128 57.308-128 128zM655.53 719.53c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128-70.692 0-128 57.308-128 128zM832 448c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM719.53 176.47c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM448.002 64c0 0 0 0 0 0 0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0 0 0 0 0 0 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM176.472 176.47c0 0 0 0 0 0 0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0 0 0 0 0 0 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM144.472 719.53c0 0 0 0 0 0 0 53.019 42.981 96 96 96 53.019 0 96-42.981 96-96 0 0 0 0 0 0 0-53.019-42.981-96-96-96-53.019 0-96 42.981-96 96zM56 448c0 39.765 32.235 72 72 72s72-32.235 72-72c0-39.765-32.235-72-72-72-39.765 0-72 32.235-72 72z" />
34
- <glyph unicode="&#xe014;" d="M512 960c-278.748 0-505.458-222.762-511.848-499.974 5.92 241.864 189.832 435.974 415.848 435.974 229.75 0 416-200.576 416-448 0-53.020 42.98-96 96-96 53.020 0 96 42.98 96 96 0 282.77-229.23 512-512 512zM512-64c278.748 0 505.458 222.762 511.848 499.974-5.92-241.864-189.832-435.974-415.848-435.974-229.75 0-416 200.576-416 448 0 53.020-42.98 96-96 96-53.020 0-96-42.98-96-96 0-282.77 229.23-512 512-512z" />
35
- <glyph unicode="&#xe015;" d="M0.042 446.382l-0.022-0.004c0 0 0.012-0.090 0.028-0.222 0.11-3.878 0.55-7.676 1.322-11.352 0.204-1.746 0.428-3.66 0.674-5.774 0.222-1.886 0.46-3.914 0.718-6.078 0.374-2.566 0.77-5.292 1.19-8.176 0.856-5.746 1.8-12.124 2.908-18.958 1.348-6.446 2.804-13.414 4.364-20.864 0.71-3.718 1.776-7.504 2.786-11.406 1.024-3.89 2.078-7.894 3.16-12.004 0.566-2.042 1.040-4.132 1.708-6.208 0.656-2.074 1.32-4.176 1.988-6.3 1.348-4.234 2.726-8.566 4.136-12.988 0.352-1.106 0.708-2.21 1.064-3.324 0.408-1.102 0.814-2.208 1.226-3.316 0.826-2.218 1.658-4.458 2.502-6.714 1.696-4.496 3.422-9.078 5.18-13.742 1.968-4.566 3.97-9.214 6.004-13.934 1.018-2.348 2.044-4.714 3.078-7.098 1.048-2.376 2.27-4.704 3.408-7.074 2.322-4.714 4.678-9.496 7.062-14.332 2.47-4.786 5.208-9.512 7.846-14.328 1.336-2.398 2.68-4.808 4.028-7.23 1.368-2.41 2.902-4.75 4.356-7.14 2.95-4.738 5.93-9.524 8.934-14.348 12.64-18.894 26.676-37.566 42.21-55.278 15.712-17.578 32.726-34.25 50.692-49.602 18.18-15.136 37.264-28.902 56.726-41.114 19.604-12.036 39.644-22.312 59.376-31.144 5.004-2.040 9.964-4.062 14.878-6.066 2.462-0.972 4.868-2.032 7.336-2.918 2.47-0.868 4.93-1.734 7.376-2.594 4.898-1.684 9.678-3.468 14.484-4.992 4.832-1.43 9.604-2.844 14.312-4.242 2.356-0.672 4.66-1.426 7.004-2.012 2.346-0.574 4.676-1.14 6.986-1.704 4.606-1.118 9.142-2.214 13.604-3.296 4.5-0.868 8.926-1.722 13.27-2.558 2.166-0.41 4.31-0.82 6.434-1.222 1.062-0.2 2.118-0.398 3.166-0.598 1.060-0.148 2.118-0.292 3.166-0.442 4.192-0.582 8.292-1.152 12.3-1.71 1.998-0.274 3.972-0.546 5.922-0.816 1.946-0.286 3.904-0.378 5.814-0.57 3.822-0.336 7.544-0.664 11.164-0.98 3.616-0.304 7.104-0.688 10.526-0.738 0.23-0.008 0.452-0.016 0.682-0.026 0.614-34.812 29.008-62.846 63.968-62.846 0.542 0 1.080 0.028 1.62 0.042v-0.022c0 0 0.090 0.012 0.224 0.028 3.878 0.11 7.674 0.55 11.35 1.322 1.748 0.204 3.662 0.426 5.776 0.672 1.884 0.222 3.912 0.462 6.076 0.718 2.566 0.376 5.292 0.772 8.176 1.192 5.746 0.856 12.124 1.8 18.958 2.908 6.446 1.348 13.414 2.804 20.864 4.362 3.718 0.712 7.504 1.778 11.406 2.786 3.892 1.026 7.894 2.080 12.004 3.162 2.044 0.566 4.132 1.040 6.208 1.708 2.074 0.656 4.174 1.318 6.3 1.988 4.232 1.348 8.564 2.726 12.988 4.134 1.104 0.354 2.21 0.708 3.324 1.066 1.1 0.406 2.206 0.814 3.316 1.226 2.216 0.824 4.456 1.658 6.714 2.5 4.496 1.698 9.078 3.424 13.74 5.182 4.568 1.968 9.216 3.97 13.936 6.004 2.348 1.018 4.714 2.044 7.098 3.078 2.376 1.048 4.702 2.27 7.074 3.408 4.714 2.322 9.494 4.678 14.33 7.062 4.786 2.47 9.512 5.208 14.328 7.846 2.398 1.336 4.808 2.678 7.23 4.028 2.41 1.366 4.75 2.9 7.14 4.354 4.738 2.952 9.524 5.93 14.35 8.936 18.89 12.64 37.564 26.674 55.278 42.21 17.574 15.712 34.248 32.726 49.602 50.69 15.136 18.182 28.902 37.264 41.112 56.728 12.036 19.602 22.314 39.644 31.142 59.376 2.042 5.002 4.062 9.964 6.068 14.878 0.974 2.462 2.032 4.868 2.918 7.334 0.87 2.472 1.732 4.932 2.592 7.376 1.686 4.898 3.468 9.678 4.994 14.484 1.432 4.832 2.846 9.604 4.24 14.31 0.674 2.358 1.43 4.66 2.016 7.004 0.57 2.348 1.138 4.676 1.702 6.988 1.118 4.606 2.216 9.14 3.296 13.602 0.868 4.502 1.72 8.928 2.558 13.272 0.41 2.164 0.818 4.308 1.222 6.434 0.2 1.060 0.398 2.116 0.596 3.164 0.148 1.062 0.296 2.118 0.444 3.168 0.582 4.19 1.152 8.292 1.708 12.3 0.278 1.996 0.55 3.97 0.82 5.922 0.284 1.946 0.376 3.902 0.568 5.812 0.336 3.822 0.664 7.546 0.98 11.164 0.304 3.616 0.686 7.106 0.738 10.528 0.020 0.534 0.040 1.044 0.058 1.574 35.224 0.146 63.732 28.738 63.732 63.992 0 0.542-0.028 1.080-0.042 1.62h0.022c0 0-0.012 0.090-0.028 0.224-0.11 3.878-0.55 7.674-1.322 11.35-0.204 1.748-0.428 3.662-0.674 5.776-0.222 1.886-0.46 3.914-0.718 6.076-0.374 2.566-0.77 5.294-1.19 8.176-0.856 5.746-1.8 12.124-2.908 18.958-1.348 6.444-2.804 13.414-4.364 20.862-0.71 3.72-1.776 7.506-2.786 11.408-1.024 3.892-2.078 7.894-3.16 12.002-0.566 2.044-1.040 4.134-1.708 6.208-0.656 2.076-1.32 4.174-1.988 6.3-1.348 4.234-2.726 8.566-4.136 12.99-0.352 1.102-0.708 2.21-1.064 3.324-0.408 1.1-0.814 2.206-1.226 3.316-0.826 2.216-1.658 4.454-2.502 6.714-1.696 4.498-3.422 9.080-5.18 13.74-1.968 4.57-3.97 9.216-6.004 13.936-1.020 2.348-2.044 4.714-3.078 7.098-1.048 2.376-2.27 4.702-3.408 7.076-2.322 4.714-4.678 9.494-7.062 14.33-2.47 4.786-5.208 9.512-7.846 14.328-1.336 2.398-2.68 4.808-4.028 7.23-1.368 2.41-2.902 4.75-4.356 7.14-2.95 4.74-5.93 9.524-8.934 14.35-12.64 18.892-26.676 37.564-42.21 55.278-15.712 17.576-32.726 34.25-50.692 49.602-18.18 15.136-37.264 28.902-56.726 41.112-19.604 12.036-39.644 22.314-59.376 31.142-5.004 2.040-9.964 4.062-14.878 6.068-2.462 0.974-4.868 2.032-7.336 2.918-2.47 0.87-4.93 1.734-7.376 2.592-4.898 1.684-9.678 3.468-14.484 4.994-4.832 1.432-9.604 2.846-14.312 4.242-2.356 0.672-4.66 1.428-7.004 2.014-2.346 0.572-4.676 1.138-6.986 1.702-4.606 1.118-9.142 2.216-13.604 3.298-4.5 0.868-8.926 1.72-13.27 2.558-2.166 0.412-4.31 0.82-6.434 1.222-1.062 0.2-2.118 0.398-3.166 0.596-1.060 0.148-2.118 0.296-3.166 0.442-4.192 0.584-8.292 1.154-12.3 1.71-1.998 0.276-3.972 0.55-5.922 0.82-1.946 0.284-3.904 0.376-5.814 0.57-3.822 0.336-7.544 0.664-11.164 0.98-3.616 0.304-7.104 0.686-10.526 0.738-0.852 0.032-1.674 0.062-2.512 0.092-0.65 34.78-29.028 62.778-63.966 62.778-0.542 0-1.080-0.028-1.62-0.042l-0.002 0.022c0 0-0.090-0.012-0.222-0.028-3.878-0.11-7.676-0.55-11.352-1.322-1.748-0.204-3.662-0.426-5.776-0.672-1.884-0.222-3.912-0.462-6.076-0.718-2.566-0.376-5.292-0.772-8.176-1.192-5.746-0.856-12.124-1.8-18.958-2.908-6.446-1.348-13.414-2.804-20.864-4.362-3.718-0.712-7.504-1.778-11.406-2.786-3.892-1.026-7.894-2.080-12.004-3.162-2.044-0.566-4.132-1.040-6.208-1.708-2.074-0.656-4.174-1.318-6.3-1.988-4.232-1.348-8.564-2.726-12.988-4.134-1.104-0.354-2.21-0.708-3.324-1.066-1.1-0.406-2.206-0.814-3.316-1.226-2.216-0.824-4.456-1.658-6.714-2.5-4.496-1.698-9.078-3.424-13.74-5.182-4.568-1.968-9.216-3.97-13.936-6.004-2.348-1.018-4.714-2.044-7.098-3.078-2.376-1.048-4.702-2.27-7.074-3.408-4.714-2.322-9.494-4.678-14.33-7.062-4.786-2.47-9.512-5.208-14.328-7.846-2.398-1.336-4.808-2.678-7.23-4.028-2.41-1.366-4.75-2.9-7.14-4.354-4.738-2.952-9.524-5.93-14.35-8.936-18.89-12.64-37.564-26.674-55.278-42.21-17.574-15.712-34.248-32.726-49.602-50.69-15.136-18.182-28.902-37.264-41.112-56.728-12.036-19.602-22.314-39.644-31.142-59.376-2.042-5.002-4.062-9.964-6.068-14.878-0.974-2.462-2.032-4.868-2.918-7.334-0.87-2.472-1.732-4.932-2.592-7.376-1.686-4.898-3.468-9.678-4.994-14.484-1.432-4.832-2.846-9.604-4.24-14.31-0.674-2.358-1.43-4.66-2.016-7.004-0.57-2.348-1.138-4.676-1.702-6.988-1.118-4.606-2.216-9.14-3.296-13.602-0.868-4.502-1.72-8.928-2.558-13.272-0.41-2.164-0.818-4.308-1.222-6.434-0.2-1.060-0.398-2.116-0.596-3.164-0.148-1.062-0.296-2.118-0.444-3.168-0.582-4.19-1.152-8.292-1.708-12.3-0.278-1.996-0.55-3.97-0.82-5.922-0.284-1.946-0.376-3.902-0.568-5.812-0.336-3.822-0.664-7.546-0.98-11.164-0.304-3.616-0.686-7.106-0.738-10.528-0.020-0.548-0.040-1.076-0.058-1.62-34.376-1.112-61.902-29.304-61.902-63.946 0-0.542 0.028-1.078 0.042-1.618zM73.518 511.294c0.042 0.196 0.086 0.384 0.128 0.58 0.644 3.248 1.632 6.542 2.556 9.942 0.934 3.388 1.894 6.876 2.88 10.454 0.516 1.78 0.934 3.602 1.546 5.406 0.596 1.802 1.202 3.628 1.81 5.476 1.218 3.682 2.464 7.45 3.736 11.294 0.316 0.958 0.634 1.924 0.956 2.892 0.37 0.954 0.74 1.914 1.114 2.876 0.746 1.924 1.5 3.868 2.26 5.83 1.52 3.904 3.070 7.882 4.646 11.93 1.768 3.96 3.566 7.99 5.392 12.080 0.908 2.038 1.824 4.090 2.746 6.156 0.932 2.060 2.036 4.072 3.052 6.126 2.070 4.084 4.17 8.222 6.294 12.412 2.202 4.142 4.654 8.224 6.998 12.392 1.184 2.074 2.374 4.16 3.57 6.256 1.21 2.086 2.586 4.102 3.876 6.166 2.616 4.098 5.256 8.232 7.918 12.402 11.234 16.298 23.632 32.398 37.33 47.638 13.874 15.104 28.842 29.404 44.598 42.548 15.974 12.928 32.686 24.65 49.676 35.022 17.13 10.194 34.6 18.838 51.734 26.258 4.35 1.7 8.662 3.382 12.934 5.050 2.136 0.812 4.216 1.71 6.36 2.444 2.146 0.714 4.28 1.428 6.404 2.136 4.25 1.386 8.382 2.888 12.548 4.142 4.184 1.174 8.314 2.332 12.392 3.474 2.038 0.55 4.026 1.19 6.054 1.662 2.030 0.458 4.044 0.914 6.044 1.368 3.978 0.91 7.896 1.806 11.748 2.688 3.888 0.686 7.71 1.36 11.462 2.022 1.868 0.33 3.716 0.658 5.546 0.98 0.914 0.162 1.824 0.324 2.728 0.484 0.916 0.112 1.828 0.222 2.734 0.332 3.612 0.448 7.148 0.882 10.604 1.31 1.72 0.216 3.422 0.432 5.102 0.644 1.674 0.226 3.364 0.266 5.010 0.408 3.292 0.238 6.498 0.472 9.616 0.7 3.11 0.218 6.11 0.524 9.058 0.508 5.848 0.132 11.32 0.256 16.38 0.372 4.664-0.168 8.948-0.324 12.818-0.462 1.914-0.054 3.726-0.108 5.432-0.156 2.122-0.134 4.108-0.26 5.958-0.378 2.13-0.138 4.060-0.266 5.82-0.38 3.256-0.51 6.592-0.782 9.99-0.782 0.466 0 0.93 0.026 1.396 0.036 0.132-0.008 0.224-0.014 0.224-0.014v0.020c31.14 0.778 56.75 23.784 61.556 53.754 0.542-0.12 1.064-0.236 1.612-0.356 3.246-0.644 6.542-1.632 9.942-2.556 3.386-0.934 6.876-1.894 10.454-2.88 1.778-0.516 3.602-0.934 5.404-1.546 1.802-0.596 3.63-1.202 5.478-1.812 3.68-1.218 7.448-2.464 11.292-3.736 0.96-0.316 1.924-0.634 2.892-0.956 0.956-0.37 1.914-0.74 2.876-1.112 1.926-0.746 3.868-1.5 5.83-2.26 3.904-1.52 7.884-3.070 11.932-4.646 3.96-1.768 7.988-3.566 12.080-5.392 2.038-0.908 4.088-1.824 6.156-2.746 2.060-0.932 4.072-2.036 6.126-3.054 4.082-2.070 8.222-4.17 12.41-6.294 4.144-2.202 8.226-4.654 12.394-6.998 2.074-1.184 4.16-2.374 6.256-3.572 2.086-1.21 4.102-2.586 6.166-3.876 4.098-2.616 8.23-5.256 12.402-7.918 16.296-11.234 32.398-23.632 47.636-37.33 15.104-13.874 29.406-28.842 42.55-44.598 12.928-15.974 24.648-32.686 35.020-49.676 10.196-17.13 18.84-34.6 26.26-51.736 1.698-4.348 3.382-8.662 5.050-12.932 0.812-2.136 1.71-4.216 2.444-6.36 0.714-2.146 1.428-4.28 2.136-6.404 1.386-4.25 2.888-8.384 4.142-12.548 1.174-4.184 2.33-8.316 3.474-12.392 0.55-2.038 1.19-4.026 1.66-6.054 0.46-2.030 0.916-4.046 1.368-6.046 0.91-3.978 1.808-7.896 2.688-11.748 0.688-3.888 1.362-7.71 2.024-11.462 0.33-1.868 0.656-3.716 0.98-5.548 0.162-0.914 0.324-1.824 0.484-2.728 0.11-0.916 0.222-1.828 0.332-2.734 0.446-3.612 0.882-7.148 1.31-10.604 0.216-1.72 0.432-3.42 0.642-5.1 0.226-1.674 0.268-3.364 0.41-5.010 0.238-3.292 0.472-6.498 0.7-9.616 0.218-3.11 0.524-6.11 0.508-9.058 0.132-5.848 0.256-11.32 0.372-16.38-0.168-4.664-0.324-8.948-0.462-12.818-0.054-1.914-0.108-3.726-0.156-5.432-0.134-2.122-0.26-4.108-0.378-5.958-0.138-2.13-0.266-4.060-0.38-5.82-0.498-3.256-0.768-6.592-0.768-9.99 0-0.468 0.026-0.93 0.036-1.396-0.008-0.132-0.016-0.224-0.016-0.224h0.022c0.768-30.766 23.236-56.128 52.682-61.37-0.066-0.296-0.13-0.584-0.198-0.884-0.644-3.248-1.632-6.542-2.556-9.942-0.934-3.388-1.894-6.876-2.88-10.454-0.516-1.78-0.934-3.602-1.546-5.406-0.596-1.802-1.202-3.628-1.81-5.476-1.218-3.682-2.464-7.45-3.736-11.294-0.316-0.958-0.634-1.924-0.956-2.892-0.37-0.954-0.74-1.914-1.114-2.876-0.746-1.924-1.5-3.868-2.26-5.83-1.52-3.904-3.070-7.882-4.646-11.93-1.768-3.96-3.566-7.99-5.392-12.080-0.908-2.038-1.824-4.090-2.746-6.156-0.932-2.060-2.036-4.072-3.052-6.126-2.070-4.084-4.17-8.222-6.294-12.412-2.202-4.142-4.654-8.224-6.998-12.392-1.184-2.074-2.374-4.16-3.57-6.256-1.21-2.086-2.586-4.102-3.876-6.166-2.616-4.098-5.256-8.232-7.918-12.402-11.234-16.298-23.632-32.398-37.33-47.638-13.874-15.104-28.842-29.404-44.598-42.548-15.974-12.928-32.686-24.65-49.676-35.022-17.13-10.194-34.6-18.838-51.734-26.258-4.35-1.7-8.662-3.382-12.934-5.050-2.136-0.812-4.216-1.71-6.36-2.444-2.146-0.714-4.28-1.428-6.404-2.136-4.25-1.386-8.382-2.888-12.548-4.142-4.184-1.174-8.314-2.332-12.392-3.474-2.038-0.55-4.026-1.19-6.054-1.662-2.030-0.458-4.044-0.914-6.044-1.368-3.978-0.91-7.896-1.806-11.748-2.688-3.888-0.686-7.71-1.36-11.462-2.022-1.868-0.33-3.716-0.658-5.546-0.98-0.914-0.162-1.824-0.324-2.728-0.484-0.916-0.112-1.828-0.222-2.734-0.332-3.612-0.448-7.148-0.882-10.604-1.31-1.72-0.216-3.422-0.432-5.102-0.644-1.674-0.226-3.364-0.266-5.010-0.408-3.292-0.238-6.498-0.472-9.616-0.7-3.11-0.218-6.11-0.524-9.058-0.508-5.848-0.132-11.32-0.256-16.38-0.372-4.664 0.168-8.948 0.324-12.818 0.462-1.914 0.054-3.726 0.108-5.432 0.156-2.122 0.134-4.108 0.26-5.958 0.378-2.13 0.138-4.060 0.266-5.82 0.38-3.256 0.51-6.592 0.782-9.99 0.782-0.466 0-0.93-0.026-1.396-0.036-0.132 0.008-0.224 0.014-0.224 0.014v-0.020c-31.004-0.774-56.524-23.586-61.488-53.364-3.2 0.64-6.446 1.61-9.792 2.522-3.386 0.934-6.876 1.894-10.454 2.878-1.778 0.516-3.602 0.938-5.404 1.546-1.802 0.598-3.63 1.204-5.478 1.812-3.68 1.218-7.448 2.464-11.292 3.738-0.96 0.316-1.924 0.632-2.892 0.954-0.956 0.372-1.914 0.742-2.876 1.114-1.926 0.746-3.868 1.5-5.83 2.258-3.904 1.524-7.884 3.070-11.932 4.648-3.96 1.77-7.988 3.566-12.080 5.39-2.038 0.91-4.088 1.824-6.156 2.746-2.060 0.934-4.072 2.036-6.126 3.054-4.082 2.070-8.222 4.172-12.41 6.296-4.144 2.2-8.226 4.652-12.394 6.996-2.074 1.184-4.16 2.376-6.256 3.57-2.086 1.21-4.102 2.586-6.166 3.878-4.098 2.614-8.23 5.254-12.402 7.918-16.296 11.23-32.398 23.632-47.636 37.328-15.104 13.876-29.406 28.84-42.55 44.598-12.928 15.972-24.648 32.684-35.020 49.676-10.196 17.128-18.84 34.602-26.26 51.734-1.698 4.352-3.382 8.664-5.050 12.934-0.812 2.136-1.71 4.218-2.444 6.36-0.714 2.148-1.428 4.282-2.136 6.406-1.386 4.25-2.888 8.382-4.142 12.546-1.174 4.184-2.33 8.316-3.474 12.394-0.55 2.036-1.19 4.024-1.66 6.054-0.46 2.028-0.916 4.042-1.368 6.042-0.91 3.98-1.808 7.898-2.688 11.75-0.688 3.886-1.362 7.71-2.024 11.46-0.33 1.868-0.656 3.718-0.98 5.546-0.162 0.914-0.324 1.824-0.484 2.73-0.11 0.914-0.222 1.828-0.332 2.734-0.446 3.61-0.882 7.148-1.31 10.602-0.216 1.722-0.432 3.422-0.642 5.102-0.226 1.676-0.268 3.364-0.41 5.012-0.238 3.29-0.472 6.496-0.7 9.614-0.218 3.11-0.524 6.11-0.508 9.058-0.132 5.848-0.256 11.32-0.372 16.382 0.168 4.664 0.324 8.946 0.462 12.816 0.054 1.914 0.108 3.726 0.156 5.434 0.134 2.122 0.26 4.106 0.378 5.958 0.138 2.128 0.266 4.058 0.38 5.82 0.496 3.26 0.766 6.596 0.766 9.994 0 0.466-0.026 0.93-0.036 1.396 0.008 0.132 0.016 0.224 0.016 0.224h-0.022c-0.78 31.38-24.134 57.154-54.44 61.674z" />
36
- <glyph unicode="&#xe016;" d="M1024 544l-225.738 22.574 143.66 175.582-135.766 135.764-175.582-143.658-22.574 225.738h-192l-22.574-225.738-175.582 143.658-135.764-135.764 143.658-175.582-225.738-22.574v-192l225.738-22.574-143.658-175.582 135.764-135.766 175.582 143.66 22.574-225.738h192l22.574 225.738 175.582-143.66 135.766 135.766-143.66 175.582 225.738 22.574v192zM704 527.528v-159.056l-112.472-112.472h-159.056l-112.472 112.472v159.056l112.47 112.472h159.056l112.474-112.472z" />
37
- <glyph unicode="&#xe017;" d="M874.022 810.020c-92.652 92.656-220.636 149.98-362.022 149.98-219.488 0-406.69-138.128-479.498-332.188l119.876-44.954c54.604 145.546 195.006 249.142 359.622 249.142 106.040 0 202.020-43 271.506-112.494l-143.506-143.506h384v384l-149.978-149.98zM512 64c-106.040 0-202.026 42.992-271.512 112.488l143.512 143.512h-384v-384l149.994 149.994c92.646-92.662 220.618-149.994 362.006-149.994 219.49 0 406.692 138.128 479.5 332.188l-119.876 44.954c-54.604-145.546-195.006-249.142-359.624-249.142z" />
38
- <glyph unicode="&#xe018;" d="M512 752c-100.252 0-189.54-46.802-246.326-119.256l-76.776 57.582c74.32 95.764 191.494 157.674 323.102 157.674v112l160-160-160-160v112zM512 144c100.254 0 189.542 46.802 246.326 119.256l76.776-57.582c-74.32-95.764-191.494-157.674-323.102-157.674v-112l-160 160 160 160v-112zM201.6 448c0-100.364 49.928-189.508 126.724-244.902l-57.584-76.78c-100.108 72.928-165.14 189.966-165.14 321.682h-105.6l160 160 160-160h-118.4zM918.4 448h105.6l-160-160-160 160h118.4c0 100.364-49.928 189.508-126.724 244.902l57.584 76.778c100.108-72.926 165.14-189.962 165.14-321.68z" />
39
- <glyph unicode="&#xe019;" d="M831.924 753.296v0 0zM834.050 448c104.384 99.81 155.082 197.58 121.354 256-19.26 33.356-63.36 49.296-123.48 49.296v-48c42.144 0 72.766-9.458 81.912-25.296 7.218-12.504 3.2-31.73-1.446-45.658-8.906-26.71-28.288-58.664-56.042-92.404-16.848-20.478-36.27-41.122-57.874-61.642-29.764 25.698-62.876 51.258-98.796 76.058-3.514 43.48-9.090 84.916-16.458 123.518 56.19 16.666 107.186 25.418 148.682 25.422l0.022 48c-0.008 0-0.018 0-0.026 0-45.174-0.004-99.396-9.032-158.874-26.404-34.24 140.318-93.566 233.11-161.024 233.11-67.458 0-126.784-92.792-161.028-233.102-59.474 17.372-113.698 26.398-158.872 26.398-60.12 0-104.248-15.942-123.506-49.296-33.73-58.42 16.966-156.19 121.352-256-104.386-99.808-155.082-197.58-121.352-256 19.26-33.36 63.37-49.294 123.506-49.294 45.172 0 99.396 9.030 158.872 26.4 34.244-140.314 93.568-233.106 161.028-233.106 67.458 0 126.784 92.792 161.028 233.102 59.474-17.374 113.7-26.398 158.874-26.398 60.12 0 104.248 15.944 123.506 49.296 33.724 58.418-16.97 156.192-121.358 256zM762.542 448c-18.62-15.876-38.454-31.584-59.358-46.988 0.53 15.476 0.816 31.142 0.816 46.988 0 15.844-0.286 31.51-0.812 46.988 20.904-15.404 40.738-31.112 59.354-46.988zM637.292 231.132c-23.054 8.196-46.562 17.52-70.27 27.868 13.626 7.262 27.294 14.824 40.974 22.722 13.722 7.922 27.146 16 40.288 24.198-2.882-25.766-6.562-50.76-10.992-74.788zM584 323.292c-23.782-13.728-47.876-26.63-72-38.616-24.124 11.982-48.22 24.884-72 38.616-23.976 13.844-47.192 28.226-69.498 43.012-1.65 26.712-2.502 54.010-2.502 81.696s0.852 54.984 2.502 81.694c22.306 14.786 45.522 29.17 69.498 43.014 23.78 13.728 47.876 26.63 72 38.614 24.124-11.982 48.218-24.884 72-38.614 23.976-13.842 47.192-28.23 69.498-43.014 1.65-26.71 2.502-54.008 2.502-81.694s-0.852-54.984-2.502-81.696c-22.306-14.784-45.522-29.172-69.498-43.012zM375.712 305.92c13.14-8.198 26.564-16.276 40.288-24.198 13.68-7.898 27.346-15.46 40.974-22.722-23.704-10.348-47.214-19.67-70.266-27.864-4.43 24.026-8.112 49.020-10.996 74.784zM320.812 401.010c-20.904 15.406-40.74 31.116-59.358 46.99 18.618 15.876 38.454 31.584 59.358 46.99-0.528-15.48-0.812-31.144-0.812-46.99s0.284-31.512 0.812-46.99zM386.708 664.864c23.052-8.194 46.562-17.518 70.266-27.864-13.626-7.262-27.294-14.824-40.974-22.722-13.722-7.922-27.146-16.002-40.288-24.198 2.884 25.764 6.566 50.758 10.996 74.784zM608 614.278c-13.68 7.898-27.346 15.46-40.972 22.722 23.706 10.346 47.212 19.668 70.268 27.862 4.43-24.024 8.11-49.016 10.992-74.782-13.142 8.196-26.566 16.274-40.288 24.198zM421.18 793.184c15.34 40.908 33.322 73.668 52.002 94.736 9.738 10.986 24.378 24.080 38.818 24.080 14.442 0 29.078-13.094 38.818-24.080 18.68-21.068 36.658-53.828 52.002-94.736 9.312-24.834 17.478-51.978 24.45-80.952-37.136-12.926-75.832-28.824-115.268-47.532-39.438 18.71-78.132 34.608-115.27 47.536 6.97 28.972 15.136 56.116 24.448 80.948zM167.65 541.938c-27.756 33.74-47.136 65.692-56.042 92.404-4.644 13.926-8.664 33.154-1.444 45.658 9.144 15.838 39.776 25.294 81.938 25.296h0.004c41.492 0 92.486-8.752 148.674-25.418-7.368-38.604-12.942-80.040-16.456-123.522-35.92-24.798-69.036-50.36-98.8-76.058-21.604 20.52-41.026 41.162-57.874 61.64zM192.1 190.708c-42.162 0-72.792 9.456-81.936 25.292-7.22 12.504-3.2 31.73 1.444 45.658 8.906 26.708 28.286 58.662 56.042 92.4 16.848 20.48 36.27 41.124 57.874 61.644 29.762-25.702 62.878-51.262 98.798-76.058 3.514-43.482 9.088-84.916 16.456-123.524-56.19-16.662-107.184-25.412-148.678-25.412zM602.82 102.816c-15.342-40.91-33.322-73.668-52.002-94.738-9.74-10.984-24.376-24.078-38.818-24.078-14.44 0-29.080 13.094-38.818 24.078-18.68 21.070-36.662 53.828-52.002 94.736-9.312 24.834-17.478 51.978-24.45 80.952 37.138 12.93 75.832 28.824 115.268 47.536 39.44-18.71 78.13-34.61 115.27-47.538-6.972-28.972-15.136-56.116-24.448-80.948zM912.39 261.656c4.642-13.926 8.664-33.152 1.446-45.656-9.146-15.84-39.778-25.296-81.938-25.296-41.496 0-92.49 8.754-148.678 25.418 7.368 38.606 12.944 80.042 16.458 123.524 35.92 24.8 69.036 50.362 98.796 76.058 21.604-20.522 41.026-41.164 57.874-61.64 27.758-33.744 47.136-65.696 56.042-92.408zM432 448c0 44.183 35.817 80 80 80s80-35.817 80-80c0-44.183-35.817-80-80-80-44.183 0-80 35.817-80 80z" />
40
- <glyph unicode="&#xe01a;" d="M466.038 402.038l-320 320-146.038-146.038v384h384l-146.038-146.038 320-320zM512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512h128c0-212.078 171.922-384 384-384s384 171.922 384 384c0 212.078-171.922 384-384 384v128z" />
41
- <glyph unicode="&#xe01b;" d="M640-64l192 192-320 320 320 320-192 192-512-512z" />
42
- <glyph unicode="&#xe01c;" d="M384 960l-192-192 320-320-320-320 192-192 512 512z" />
43
- <glyph unicode="&#xe01d;" d="M0 448l1024-448-192 448 192 448z" />
44
- <glyph unicode="&#xe01e;" d="M1024 448l-1024 448 192-448-192-448z" />
45
- <glyph unicode="&#xe01f;" d="M768 960l-512-512 512-512-255.998 512z" />
46
- <glyph unicode="&#xe020;" d="M256-64l512 512-512 512 256-512z" />
47
- <glyph unicode="&#xe021;" d="M640.002 704l-256-256 256-256.002z" />
48
- <glyph unicode="&#xe022;" d="M384.002 192l256 256-256 256z" />
49
- <glyph unicode="&#xe023;" d="M0 448.002l512-512.002v320h511.998l0.002 384h-512v320l-512-511.998zM152 509.492l16 16v-154.98l-16 16v122.98zM136 402.512l-16 16v58.98l16 16v-90.98zM184 541.492l16 16v-218.982l-16 16v186.982zM216 573.492l16 16v-282.982l-16 16v250.982zM248 605.492l16 16v-346.982l-16 16v314.982zM280 637.492l16 15.998v-410.98l-16 16v378.982zM312 669.49l16 16v-474.98l-16 16v442.98zM344 701.49l16 16v-538.98l-16 16v506.98zM376 733.49l16 16v-602.98l-16 16v570.98zM408 765.49l16 16v-666.98l-16 16v634.98zM104 461.492v-26.98l-13.49 13.49 13.49 13.49zM472 320v256h16v-256h-16zM504 320v256h16v-256h-16zM536 320v256h16v-256h-16zM568 320v256h16v-256h-16zM600 320v256h16v-256h-16zM632 320v256h16v-256h-16zM664 320v256h16v-256h-16zM696 320v256h16v-256h-16zM728 320v256h16v-256h-16zM760 320v256h16v-256h-16zM792 320v256h16v-256h-16zM824 320v256h16v-256h-16zM856 320v256h16v-256h-16zM888 320v256h16v-256h-16zM920 320v256h16v-256h-16zM959.998 320h-7.998v256h8l-0.002-256zM448 576h8v-256h-8v-229.49l-8 8v698.98l8 8v-229.49z" />
50
- <glyph unicode="&#xe024;" d="M1024 447.998l-512 512.002v-320h-511.998l-0.002-384h512v-320l512 511.998zM872 386.508l-16-16v154.98l16-16v-122.98zM888 493.488l16-16v-58.98l-16-16v90.98zM840 354.508l-16-16v218.982l16-16v-186.982zM808 322.508l-16-16v282.982l16-16v-250.982zM776 290.508l-16-16v346.982l16-16v-314.982zM744 258.508l-16-15.998v410.98l16-16v-378.982zM712 226.51l-16-16v474.98l16-16v-442.98zM680 194.51l-16-16v538.98l16-16v-506.98zM648 162.51l-16-16v602.98l16-16v-570.98zM616 130.51l-16-16v666.98l16-16v-634.98zM920 434.508v26.98l13.49-13.49-13.49-13.49zM552 576v-256h-16v256h16zM520 576v-256h-16v256h16zM488 576v-256h-16v256h16zM456 576v-256h-16v256h16zM424 576v-256h-16v256h16zM392 576v-256h-16v256h16zM360 576v-256h-16v256h16zM328 576v-256h-16v256h16zM296 576v-256h-16v256h16zM264 576v-256h-16v256h16zM232 576v-256h-16v256h16zM200 576v-256h-16v256h16zM168 576v-256h-16v256h16zM136 576v-256h-16v256h16zM104 576v-256h-16v256h16zM64.002 576h7.998v-256h-8l0.002 256zM576 320h-8v256h8v229.49l8-8v-698.98l-8-8v229.49z" />
51
- <glyph unicode="&#xe025;" d="M0 448l512-512v320h511.998l0.002 384h-512v320z" />
52
- <glyph unicode="&#xe026;" d="M1024 448l-512 512v-320h-511.998l-0.002-384h512v-320z" />
53
- <glyph unicode="&#xe027;" d="M448 704c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 128c-35.348 0-64 28.652-64 64s28.652 64 64 64c35.346 0 64-28.652 64-64s-28.654-64-64-64zM512 448c-114.876 0-208-93.124-208-208s93.124-208 208-208c-229.75 0-416 186.25-416 416s186.25 416 416 416c114.876 0 208-93.124 208-208s-93.124-208-208-208z" />
54
- <glyph unicode="&#xe028;" d="M512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156 78.572-78.572 183.038-121.844 294.156-121.844 111.118 0 215.584 43.272 294.156 121.844 78.572 78.572 121.844 183.038 121.844 294.156 0 111.118-43.272 215.584-121.844 294.156-78.572 78.572-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512 0 282.77 229.23 512 512 512zM448 256h128v-128h-128zM448 768h128v-384h-128z" />
55
- <glyph unicode="&#xe3cb;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM813.256 493.254l-256.002 256c-24.992 24.994-65.514 24.994-90.508 0s-24.994-65.516 0-90.51l146.744-146.744h-357.49c-35.346 0-64-28.654-64-64s28.654-64 64-64h357.49l-146.746-146.744c-24.994-24.994-24.994-65.518 0-90.512 12.498-12.496 28.878-18.744 45.256-18.744s32.758 6.248 45.254 18.744l256.002 256c24.992 24.994 24.992 65.518 0 90.51z" />
56
- <glyph unicode="&#xe3cf;" d="M512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 32c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM210.744 493.254l256.002 256c24.992 24.994 65.514 24.994 90.508 0s24.994-65.516 0-90.51l-146.744-146.744h357.49c35.346 0 64-28.654 64-64s-28.654-64-64-64h-357.49l146.746-146.744c24.994-24.994 24.994-65.518 0-90.512-12.498-12.496-28.878-18.744-45.256-18.744s-32.758 6.248-45.254 18.744l-256.002 256c-24.992 24.994-24.992 65.518 0 90.51z" />
57
- <glyph unicode="&#xe3d3;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM813.256 402.744l-256.002-256c-12.496-12.496-28.876-18.744-45.254-18.744s-32.758 6.248-45.254 18.744c-24.994 24.994-24.994 65.518 0 90.512l146.744 146.744h-357.49c-35.346 0-64 28.654-64 64s28.654 64 64 64h357.49l-146.746 146.746c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.508 0l256.002-256c24.994-24.994 24.994-65.518 0.002-90.512z" />
58
- <glyph unicode="&#xe3d7;" d="M512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM210.744 402.744l256.002-256c12.496-12.496 28.876-18.744 45.254-18.744s32.758 6.248 45.254 18.744c24.994 24.994 24.994 65.518 0 90.512l-146.744 146.744h357.49c35.346 0 64 28.654 64 64s-28.654 64-64 64h-357.49l146.746 146.746c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.508 0l-256.002-256c-24.994-24.994-24.994-65.518-0.002-90.512z" />
59
- <glyph unicode="&#xe3e3;" d="M1023.998-64h-1023.998v1024h1024l-0.002-1024zM128 832v-768h767.998l0.002 768h-768zM576 224l224 224-224 224v-160h-320v-128h320v-160z" />
60
- <glyph unicode="&#xe3e7;" d="M0.002-64h1023.998v1024h-1024l0.002-1024zM896 832v-768h-767.998l-0.002 768h768zM448 224l-224 224 224 224v-160h320v-128h-320v-160z" />
61
- <glyph unicode="&#xe409;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM576 224v160h-320v128h320v160l224-224-224-224z" />
62
- <glyph unicode="&#xe40b;" d="M512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM448 224v160h320v128h-320v160l-224-224 224-224z" />
63
- <glyph unicode="&#xe415;" d="M0 640h64v-384h-64zM128 640h64v-384h-64zM256 640h64v-384h-64zM1024 448l-448 448v-256h-192v-384h192v-256z" />
64
- <glyph unicode="&#xe417;" d="M960 640h64v-384h-64zM832 640h64v-384h-64zM704 640h64v-384h-64zM0 448l448 448v-256h192v-384h-192v-256z" />
65
- <glyph unicode="&#xe48c;" d="M864 256c-45.16 0-85.92-18.738-115.012-48.83l-431.004 215.502c1.314 8.252 2.016 16.706 2.016 25.328s-0.702 17.076-2.016 25.326l431.004 215.502c29.092-30.090 69.852-48.828 115.012-48.828 88.366 0 160 71.634 160 160s-71.634 160-160 160-160-71.634-160-160c0-8.622 0.704-17.076 2.016-25.326l-431.004-215.504c-29.092 30.090-69.852 48.83-115.012 48.83-88.366 0-160-71.636-160-160 0-88.368 71.634-160 160-160 45.16 0 85.92 18.738 115.012 48.828l431.004-215.502c-1.312-8.25-2.016-16.704-2.016-25.326 0-88.368 71.634-160 160-160s160 71.632 160 160c0 88.364-71.634 160-160 160z" />
66
  </font>
67
  </defs>
68
  </svg>
4
  <metadata>Generated by IcoMoon</metadata>
5
  <defs>
6
  <font id="foobox" horiz-adv-x="1024">
7
+ <font-face units-per-em="1024" ascent="960" descent="-64" />
8
+ <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10
+ <glyph unicode="&#x2f;" d="M0 249.344v185.344h229.376v-183.296q0-28.672 20.48-49.664t50.176-20.992 50.688 20.48 20.992 50.176v433.152q0 119.808 88.576 204.288t210.432 84.48 210.432-84.992 88.576-205.824v-94.208l-137.216-40.96-91.136 43.008v81.92q0 29.696-20.48 50.176t-50.176 20.48-50.688-20.48-20.992-50.176v-427.008q0-122.88-88.064-209.408t-210.944-86.528q-123.904 0-211.968 87.552t-88.064 212.48zM741.376 246.272v187.392l91.136-43.008 137.216 40.96v-188.416q0-29.696 20.48-50.688t50.176-20.992 50.176 20.992 20.48 50.688v191.488h229.376v-185.344q0-123.904-87.552-211.968t-211.456-88.064-211.968 87.040-88.064 209.92z" horiz-adv-x="1340" />
11
+ <glyph unicode="&#x3b;" d="M-1.024 189.952v380.928q0 13.312 13.312 13.312h180.224v132.096q0 14.336 13.312 14.336h100.352v-526.336q0-14.336-12.288-14.336h-294.912zM110.592 274.944h68.608q13.312 0 13.312 14.336v210.944h-68.608q-13.312 0-13.312-14.336v-210.944zM340.992 189.952v380.928q0 13.312 13.312 13.312h100.352v-379.904q0-14.336-12.288-14.336h-101.376zM340.992 645.632v70.656q0 14.336 12.288 14.336h101.376v-70.656q0-14.336-12.288-14.336h-101.376zM493.568 189.952v380.928q0 13.312 13.312 13.312h294.912v-516.096q0-13.312-13.312-13.312h-294.912l1.024 70.656q0 14.336 12.288 14.336h180.224v50.176h-193.536zM606.208 274.944h68.608q12.288 0 12.288 14.336v210.944h-68.608q-12.288 0-12.288-14.336v-210.944zM840.704 125.44q0 14.336 13.312 14.336h180.224v50.176h-193.536v380.928q0 13.312 13.312 13.312h293.888v-516.096q0-13.312-12.288-13.312h-294.912v70.656zM952.32 274.944h68.608q13.312 0 13.312 14.336v210.944h-68.608q-13.312 0-13.312-14.336v-210.944z" horiz-adv-x="1148" />
12
+ <glyph unicode="&#x3e;" d="M0 467.456q0 63.488 50.688 108.544t115.2 45.056q63.488 0 107.52-36.864h5.12q137.216 83.968 343.040 83.968l5.12 4.096 71.68 273.408 247.808-36.864q0-1.024 2.048-1.024 1.024 0 0 1.024 2.048 1.024 11.776 15.872t14.848 18.944q34.816 32.768 83.968 32.768 50.176 0 84.48-33.28t34.304-83.456-34.304-86.016-84.48-35.84q-58.368 0-89.088 39.424t-30.72 98.816q-2.048-1.024-99.84 13.312t-112.128 17.408h-3.072q-2.048-2.048-16.896-54.784t-30.72-111.616-17.92-65.024v-3.072l5.12-4.096q73.728 0 151.040-20.992t133.632-58.88l3.072-2.048q1.024 1.024 2.048 1.024t2.048 1.024q25.6 18.432 36.352 25.6t30.208 13.312 44.032 6.144q69.632 0 118.784-49.152t49.152-119.808q0-48.128-27.136-88.064t-71.168-61.44q0-199.68-266.24-310.272-41.984-18.432-57.344-23.552-32.768-10.24-93.184-19.456t-95.232-9.216q-122.88 0-236.544 35.84-2.048 2.048-73.728 38.912-97.28 52.224-156.16 118.784t-58.88 159.744h-5.12q-33.792 17.408-60.416 51.2l-9.216 12.288q-15.36 27.648-19.456 46.592t-4.096 51.712zM34.816 455.168q0-67.584 58.368-114.688 5.12 60.416 49.152 118.784t103.424 103.424q-37.888 26.624-83.968 26.624-50.176 0-88.576-41.472t-38.4-92.672zM139.264 305.664q0-55.296 31.744-106.496t81.408-87.552 104.96-60.928 107.52-34.816q76.8-14.336 149.504-14.336 125.952 0 238.592 40.448t189.44 125.44h-3.072q30.72 38.912 44.032 70.144t13.312 74.24q0 55.296-27.136 105.472t-71.168 86.016-94.208 61.952-102.4 39.424q-87.040 23.552-185.344 23.552-75.776 0-155.136-18.432t-153.6-55.296-121.344-101.888-47.104-146.944zM329.728 380.416q0 37.888 23.040 60.928t60.928 23.040 63.488-23.040 25.6-60.928q0-36.864-26.112-61.44t-62.976-24.576-60.416 24.576-23.552 61.44zM366.592 212.48h45.056q25.6-46.080 81.408-70.144t114.176-24.064q59.392 0 112.64 24.064t86.016 70.144h41.984q-25.6-63.488-95.232-98.304t-145.408-34.816q-73.728 0-144.896 35.328t-95.744 97.792zM710.656 380.416q0 38.912 23.552 61.44t62.464 22.528q34.816 0 59.392-24.576t24.576-59.392-24.576-60.416-59.392-25.6q-37.888 0-61.952 24.064t-24.064 61.952zM971.776 859.648q0-35.84 25.6-61.44t61.44-25.6q36.864 0 60.416 25.088t23.552 61.952q0 34.816-24.576 59.392t-59.392 24.576-60.928-25.088-26.112-58.88zM986.112 571.904q56.32-36.864 97.28-94.72t57.344-122.368q60.416 44.032 60.416 98.304 0 59.392-36.352 102.4t-94.72 43.008q-46.080 0-83.968-26.624z" horiz-adv-x="1232" />
13
+ <glyph unicode="&#x74;" d="M0 556.544v145.408q61.44 20.48 103.424 56.32 41.984 33.792 68.608 88.064 26.624 52.224 35.84 130.048h146.432v-259.072h242.688v-160.768h-242.688v-262.144q0-88.064 9.216-114.688 9.216-24.576 34.816-39.936 34.816-20.48 77.824-20.48 78.848 0 154.624 50.176v-160.768q-64.512-31.744-118.784-44.032-53.248-12.288-114.688-12.288-69.632 0-124.928 17.408-56.32 19.456-91.136 51.2-36.864 31.744-53.248 69.632-14.336 34.816-14.336 107.52v358.4h-113.664z" horiz-adv-x="630" />
14
+ <glyph unicode="&#xe000;" d="M876.856 448v-73.142q0-30.286-18.572-51.714t-48.286-21.428h-402.286l167.428-168q21.714-20.572 21.714-51.428t-21.714-51.428l-42.858-43.428q-21.142-21.142-51.428-21.142-29.714 0-52 21.142l-372 372.572q-21.142 21.142-21.142 51.428 0 29.714 21.142 52l372 371.428q21.714 21.714 52 21.714 29.714 0 51.428-21.714l42.858-42.286q21.714-21.714 21.714-52t-21.714-52l-167.428-167.428h402.286q29.714 0 48.286-21.428t18.572-51.714z" horiz-adv-x="876" />
15
+ <glyph unicode="&#xe001;" d="M840.286 411.428q0-30.858-21.142-52l-372-372q-22.286-21.142-52-21.142-29.142 0-51.428 21.142l-42.858 42.858q-21.714 21.714-21.714 52t21.714 52l167.428 167.428h-402.286q-29.714 0-48.286 21.428t-18.572 51.714v73.142q0 30.286 18.572 51.714t48.286 21.428h402.286l-167.428 168q-21.714 20.572-21.714 51.428t21.714 51.428l42.858 42.858q21.714 21.714 51.428 21.714 30.286 0 52-21.714l372-372q21.142-20 21.142-51.428z" horiz-adv-x="876" />
16
+ <glyph unicode="&#xe002;" d="M741.428 204.572q0-22.858-16-38.858l-77.714-77.714q-16-16-38.858-16t-38.858 16l-168 168-168-168q-16-16-38.858-16t-38.858 16l-77.714 77.714q-16 16-16 38.858t16 38.858l168 168-168 168q-16 16-16 38.858t16 38.858l77.714 77.714q16 16 38.858 16t38.858-16l168-168 168 168q16 16 38.858 16t38.858-16l77.714-77.714q16-16 16-38.858t-16-38.858l-168-168 168-168q16-16 16-38.858z" horiz-adv-x="804" />
17
+ <glyph unicode="&#xe003;" d="M790.572 430.286l-758.858-421.714q-13.142-7.428-22.572-1.714t-9.428 20.572v841.142q0 14.858 9.428 20.572t22.572-1.714l758.858-421.714q13.142-7.428 13.142-17.714t-13.142-17.714z" horiz-adv-x="804" />
18
+ <glyph unicode="&#xe004;" d="M876.856 850.286v-804.572q0-14.858-10.858-25.714t-25.714-10.858h-292.572q-14.858 0-25.714 10.858t-10.858 25.714v804.572q0 14.858 10.858 25.714t25.714 10.858h292.572q14.858 0 25.714-10.858t10.858-25.714zM364.856 850.286v-804.572q0-14.858-10.858-25.714t-25.714-10.858h-292.572q-14.858 0-25.714 10.858t-10.858 25.714v804.572q0 14.858 10.858 25.714t25.714 10.858h292.572q14.858 0 25.714-10.858t10.858-25.714z" horiz-adv-x="876" />
19
+ <glyph unicode="&#xe005;" d="M283.428 192q0-34.286-24.286-58.286t-58-24q-34.286 0-58.286 24t-24 58.286 24 58.286 58.286 24q33.714 0 58-24t24.286-58.286zM530.286 82.286q0-30.286-21.428-51.714t-51.714-21.428-51.714 21.428-21.428 51.714 21.428 51.714 51.714 21.428 51.714-21.428 21.428-51.714zM182.858 448q0-37.714-26.858-64.572t-64.572-26.858-64.572 26.858-26.858 64.572 26.858 64.572 64.572 26.858 64.572-26.858 26.858-64.572zM777.142 192q0-26.286-18.858-45.142t-45.142-18.858-45.142 18.858-18.858 45.142 18.858 45.142 45.142 18.858 45.142-18.858 18.858-45.142zM301.714 704q0-41.714-29.428-71.142t-71.142-29.428-71.142 29.428-29.428 71.142 29.428 71.142 71.142 29.428 71.142-29.428 29.428-71.142zM566.858 813.714q0-45.714-32-77.714t-77.714-32-77.714 32-32 77.714 32 77.714 77.714 32 77.714-32 32-77.714zM877.714 448q0-22.858-16-38.858t-38.858-16-38.858 16-16 38.858 16 38.858 38.858 16 38.858-16 16-38.858zM758.858 704q0-18.858-13.428-32.286t-32.286-13.428-32.286 13.428-13.428 32.286 13.428 32.286 32.286 13.428 32.286-13.428 13.428-32.286z" horiz-adv-x="896" />
20
+ <glyph unicode="&#xe006;" d="M0 135.786q0 89.058 91.104 158.666t220.084 69.608h55.278q-42.994 40.946-42.994 88.034 0 29.686 16.378 59.372-10.236-1.024-29.686-1.024-106.46 0-174.020 66.538t-67.56 163.784q0 93.152 83.94 162.76t191.422 69.608h317.332l-70.632-51.182h-100.318q48.112-18.426 75.238-69.608t27.126-113.626q0-95.2-90.082-165.832-37.876-29.686-49.136-47.088t-11.26-42.994q0-19.45 27.638-49.136t55.278-50.158q62.442-44.016 86.498-90.082t24.056-115.672q0-92.128-83.94-160.202t-227.25-68.072q-136.146 0-230.32 51.182t-94.176 135.122zM114.648 169.568q0-70.632 59.884-120.278t148.94-49.646q121.814 0 176.58 45.040t54.766 119.766q0 19.45-4.094 32.756-3.070 11.26-7.166 20.984t-12.284 19.45-14.332 16.378-19.962 16.89-20.984 15.354-25.592 17.914-26.614 17.914q-39.922 12.284-78.82 12.284-92.128 1.024-161.224-48.112t-69.096-116.696zM182.21 741.786q11.26-80.868 61.93-139.216t112.090-59.372q60.396-2.048 96.222 53.23t25.592 136.146-60.908 137.168-112.090 58.348-97.246-52.206-25.592-134.098zM750.334 717.22v51.182h204.73v204.73h51.182v-204.73h205.754v-51.182h-205.754v-205.754h-51.182v205.754h-204.73z" horiz-adv-x="1212" />
21
+ <glyph unicode="&#xe007;" d="M0 589.312q0 64.512 27.136 128t77.824 117.76 133.12 88.064 182.784 33.792q162.816 0 267.264-100.352t104.448-236.544q0-175.104-88.576-289.28t-228.864-114.176q-46.080 0-86.528 21.504t-56.832 52.224l-40.96-161.792q-5.12-19.456-13.312-39.424t-17.92-38.4-19.456-34.816-19.456-30.72-16.896-24.064-13.312-16.896l-6.144-8.192q-3.072-4.096-8.192-3.072t-6.144 6.144q0 1.024-1.536 14.336t-3.072 28.16-3.072 38.4-1.024 45.568 3.072 48.64 7.68 49.152q11.264 48.128 75.776 320.512-8.192 16.384-13.312 39.424t-5.12 37.376l-1.024 15.36q0 65.536 33.28 109.056t80.384 43.52q37.888 0 58.88-25.088t20.992-62.976q0-23.552-8.704-57.856t-23.040-78.848-20.48-72.192q-10.24-46.080 17.92-79.872t75.264-33.792q80.896 0 133.632 91.648t52.736 221.696q0 99.328-64.512 162.304t-180.224 62.976q-129.024 0-209.408-82.944t-80.384-198.656q0-68.608 38.912-115.712 13.312-15.36 8.192-32.768-2.048-5.12-6.144-23.552t-6.144-23.552q-2.048-11.264-10.24-14.848t-18.432 0.512q-60.416 24.576-90.624 84.48t-30.208 139.776z" horiz-adv-x="793" />
22
+ <glyph unicode="&#xe008;" d="M-5.116 852.114q0 51.154 35.808 84.404t93.1 33.25q56.27 0 91.054-32.738 35.808-33.762 35.808-87.984 0-49.108-34.784-81.846-35.808-33.762-94.124-33.762h-1.024q-56.27 0-91.054 33.762t-34.784 84.916zM8.184-43.078v683.416h227.124v-683.416h-227.124zM361.146-43.078h227.124v381.608q0 35.808 8.184 55.246 14.324 34.784 43.48 58.826t73.15 24.042q114.584 0 114.584-154.484v-365.238h227.124v391.838q0 151.416-71.616 229.68t-189.27 78.266q-131.976 0-205.638-113.562v-2.046h-1.024l1.024 2.046v97.192h-227.124q2.046-32.738 2.046-203.592t-2.046-479.824z" horiz-adv-x="1064" />
23
+ <glyph unicode="&#xe009;" d="M0 52.19q30.682-3.068 61.366-3.068 180.006 0 321.148 110.458-83.866 1.022-150.346 51.138t-91.026 127.846q20.456-4.092 48.070-4.092 35.796 0 68.526 9.204-90.004 17.386-148.812 88.47t-58.808 164.154v3.068q54.206-30.682 117.618-31.706-53.184 34.774-84.378 91.538t-31.194 123.244q0 69.548 35.796 129.892 96.14-119.664 234.724-190.746t297.114-79.264q-7.16 33.752-7.16 59.32 0 106.368 75.684 182.052t183.074 75.684q111.482 0 188.188-81.822 88.98 18.41 163.642 63.412-28.638-93.072-112.504-143.186 74.662 9.204 147.278 40.91-49.092-76.708-127.846-133.982v-33.752q0-103.3-30.172-207.11t-92.048-198.416-147.79-168.244-206.086-117.106-258.248-43.468q-213.758 0-395.81 115.572z" horiz-adv-x="1258" />
24
+ <glyph unicode="&#xe00a;" d="M286.416 426.496v195.584h157.696v98.304q0 106.496 69.12 181.248t167.424 74.752h156.672v-195.584h-156.672q-15.36 0-27.648-16.896t-12.288-41.472v-100.352h196.608v-195.584h-196.608v-474.112h-196.608v474.112h-157.696z" horiz-adv-x="836" />
25
+ <glyph unicode="&#xe00b;" d="M0 163.328q11.264 15.36 32.256 26.112t50.176 20.48 41.472 15.872q19.456 0 34.304-4.608t34.304-15.36 25.6-12.8q48.128-21.504 266.24-121.856 19.456-4.096 36.352 0t40.448 17.92 24.576 14.848q20.48 9.216 78.336 35.328t89.6 40.448q4.096 2.048 42.496 21.504t61.952 24.576q13.312 2.048 28.16-1.024t24.064-7.68 23.552-13.312 18.432-10.752 15.872-6.144 18.944-8.192 11.264-11.264q3.072-4.096 4.096-14.336-10.24-13.312-31.744-24.576t-52.224-22.528-40.96-16.384q-44.032-20.48-131.584-62.976t-131.584-62.976q-7.168-3.072-21.504-11.776t-24.064-13.312-26.112-11.264-28.16-7.168-30.208 1.536l-270.336 125.952q-6.144 3.072-32.768 14.336t-52.736 22.528-54.784 24.576-47.616 24.064-22.016 16.896q-4.096 4.096-4.096 13.312zM0 437.76q11.264 15.36 32.256 25.6t51.2 20.48 42.496 15.36q19.456 0 34.816-4.608t35.328-15.36 26.112-13.824q43.008-19.456 129.536-59.392t130.56-60.416q19.456-5.12 37.888-0.512t39.936 17.408 25.6 14.848q69.632 32.768 163.84 73.728 11.264 5.12 32.256 16.896t39.424 19.968 36.864 11.264q16.384 3.072 32.256-1.024t38.4-17.408 23.552-13.312q5.12-3.072 15.872-6.656t18.432-8.192 11.776-10.752q3.072-5.12 4.096-14.336-10.24-14.336-32.256-26.112t-53.76-23.040-41.984-16.384q-49.152-23.552-138.752-66.56t-125.44-60.416q-7.168-3.072-26.624-14.336t-29.696-15.36-33.28-10.24-36.352 0q-219.136 103.424-266.24 124.928-6.144 3.072-45.056 19.456t-71.168 30.72-62.976 30.208-34.816 23.040q-4.096 4.096-4.096 14.336zM0 711.168q10.24 15.36 32.256 27.136t53.76 23.040 41.984 16.384l356.352 165.888q30.72 0 54.784-7.168t57.856-26.624 40.96-22.528q39.936-18.432 119.808-55.808t119.808-55.808q4.096-2.048 37.376-15.36t55.808-24.576 27.648-20.48q3.072-4.096 4.096-13.312-9.216-13.312-26.624-23.040t-44.544-19.456-35.328-13.824q-48.128-22.528-143.36-68.096t-142.336-68.096q-6.144-3.072-20.48-11.264t-23.552-12.8-25.6-10.752-27.648-6.144-28.672 1.024q-250.88 116.736-262.144 121.856-4.096 2.048-64.512 28.16t-104.448 47.616-49.152 30.72q-4.096 4.096-4.096 13.312z" horiz-adv-x="1002" />
26
+ <glyph unicode="&#xe00c;" d="M704 384l128 128v-512h-768v768h512l-128-128h-256v-512h512zM960 896v-352l-130.744 130.744-354.746-354.744h-90.51v90.512l354.744 354.744-130.744 130.744z" />
27
+ <glyph unicode="&#xe00d;" d="M64 384h384v-384l-138.26 138.26-202-202-107.48 107.48 202 202zM821.74 245.74l202-202-107.48-107.48-202 202-138.26-138.26v384h384zM960 512h-384v384l138.26-138.26 202 202 107.48-107.48-202-202zM309.74 757.74l138.26 138.26v-384h-384l138.26 138.26-202 202 107.48 107.48z" />
28
+ <glyph unicode="&#xe00e;" d="M1024 960v-384l-138.26 138.26-212-212-107.48 107.48 212 212-138.26 138.26zM245.74 821.74l212-212-107.48-107.48-212 212-138.26-138.26v384h384zM885.74 181.74l138.26 138.26v-384h-384l138.26 138.26-212 212 107.48 107.48zM457.74 286.26l-212-212 138.26-138.26h-384v384l138.26-138.26 212 212z" />
29
+ <glyph unicode="&#xe00f;" d="M512 384l256 256h-192v256h-128v-256h-192zM744.726 488.728l-71.74-71.742 260.080-96.986-421.066-157.018-421.066 157.018 260.080 96.986-71.742 71.742-279.272-104.728v-256l512-192 512 192v256z" />
30
+ <glyph unicode="&#xe010;" d="M960 832h-896c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM896 704v-46l-384-226.286-384 226.286v46h768zM128 192v354.572l384-226.286 384 226.286v-354.572h-768z" />
31
+ <glyph unicode="&#xe011;" d="M1024 448c-1.278 66.862-15.784 133.516-42.576 194.462-26.704 61-65.462 116.258-113.042 161.92-47.552 45.696-103.944 81.82-164.984 105.652-61.004 23.924-126.596 35.352-191.398 33.966-64.81-1.282-129.332-15.374-188.334-41.356-59.048-25.896-112.542-63.47-156.734-109.576-44.224-46.082-79.16-100.708-102.186-159.798-23.114-59.062-34.128-122.52-32.746-185.27 1.286-62.76 14.964-125.148 40.134-182.206 25.088-57.1 61.476-108.828 106.11-151.548 44.61-42.754 97.472-76.504 154.614-98.72 57.118-22.304 118.446-32.902 179.142-31.526 60.708 1.29 120.962 14.554 176.076 38.914 55.15 24.282 105.116 59.48 146.366 102.644 41.282 43.14 73.844 94.236 95.254 149.43 13.034 33.458 21.88 68.4 26.542 103.798 1.246-0.072 2.498-0.12 3.762-0.12 35.346 0 64 28.652 64 64 0 1.796-0.094 3.572-0.238 5.332h0.238zM922.306 278.052c-23.472-53.202-57.484-101.4-99.178-141.18-41.67-39.81-91-71.186-144.244-91.79-53.228-20.678-110.29-30.452-166.884-29.082-56.604 1.298-112.596 13.736-163.82 36.474-51.25 22.666-97.684 55.49-135.994 95.712-38.338 40.198-68.528 87.764-88.322 139.058-19.87 51.284-29.228 106.214-27.864 160.756 1.302 54.552 13.328 108.412 35.254 157.69 21.858 49.3 53.498 93.97 92.246 130.81 38.73 36.868 84.53 65.87 133.874 84.856 49.338 19.060 102.136 28.006 154.626 26.644 52.5-1.306 104.228-12.918 151.562-34.034 47.352-21.050 90.256-51.502 125.624-88.782 35.396-37.258 63.21-81.294 81.39-128.688 18.248-47.392 26.782-98.058 25.424-148.496h0.238c-0.144-1.76-0.238-3.536-0.238-5.332 0-33.012 24.992-60.174 57.086-63.624-6.224-34.822-16.53-68.818-30.78-100.992z" />
32
+ <glyph unicode="&#xe012;" d="M192 448c0 12.18 0.704 24.196 2.030 36.022l-184.98 60.104c-5.916-31.14-9.050-63.264-9.050-96.126 0-147.23 62.166-279.922 161.654-373.324l114.284 157.296c-52.124 56.926-83.938 132.758-83.938 216.028zM832 448c0-83.268-31.812-159.102-83.938-216.028l114.284-157.296c99.488 93.402 161.654 226.094 161.654 373.324 0 32.862-3.132 64.986-9.048 96.126l-184.98-60.104c1.324-11.828 2.028-23.842 2.028-36.022zM576 761.592c91.934-18.662 169.544-76.742 214.45-155.826l184.978 60.102c-73.196 155.42-222.24 268.060-399.428 290.156v-194.432zM233.55 605.768c44.906 79.084 122.516 137.164 214.45 155.826v194.43c-177.188-22.096-326.23-134.736-399.426-290.154l184.976-60.102zM644.556 156.672c-40.39-18.408-85.272-28.672-132.556-28.672s-92.166 10.264-132.554 28.67l-114.292-157.31c73.206-40.366 157.336-63.36 246.846-63.36s173.64 22.994 246.848 63.36l-114.292 157.312z" />
33
+ <glyph unicode="&#xe013;" d="M384 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128-70.692 0-128 57.308-128 128zM655.53 719.53c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128-70.692 0-128 57.308-128 128zM832 448c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM719.53 176.47c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM448.002 64c0 0 0 0 0 0 0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0 0 0 0 0 0 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM176.472 176.47c0 0 0 0 0 0 0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0 0 0 0 0 0 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM144.472 719.53c0 0 0 0 0 0 0 53.019 42.981 96 96 96 53.019 0 96-42.981 96-96 0 0 0 0 0 0 0-53.019-42.981-96-96-96-53.019 0-96 42.981-96 96zM56 448c0 39.765 32.235 72 72 72s72-32.235 72-72c0-39.765-32.235-72-72-72-39.765 0-72 32.235-72 72z" />
34
+ <glyph unicode="&#xe014;" d="M512 960c-278.748 0-505.458-222.762-511.848-499.974 5.92 241.864 189.832 435.974 415.848 435.974 229.75 0 416-200.576 416-448 0-53.020 42.98-96 96-96 53.020 0 96 42.98 96 96 0 282.77-229.23 512-512 512zM512-64c278.748 0 505.458 222.762 511.848 499.974-5.92-241.864-189.832-435.974-415.848-435.974-229.75 0-416 200.576-416 448 0 53.020-42.98 96-96 96-53.020 0-96-42.98-96-96 0-282.77 229.23-512 512-512z" />
35
+ <glyph unicode="&#xe015;" d="M0.042 446.382l-0.022-0.004c0 0 0.012-0.090 0.028-0.222 0.11-3.878 0.55-7.676 1.322-11.352 0.204-1.746 0.428-3.66 0.674-5.774 0.222-1.886 0.46-3.914 0.718-6.078 0.374-2.566 0.77-5.292 1.19-8.176 0.856-5.746 1.8-12.124 2.908-18.958 1.348-6.446 2.804-13.414 4.364-20.864 0.71-3.718 1.776-7.504 2.786-11.406 1.024-3.89 2.078-7.894 3.16-12.004 0.566-2.042 1.040-4.132 1.708-6.208 0.656-2.074 1.32-4.176 1.988-6.3 1.348-4.234 2.726-8.566 4.136-12.988 0.352-1.106 0.708-2.21 1.064-3.324 0.408-1.102 0.814-2.208 1.226-3.316 0.826-2.218 1.658-4.458 2.502-6.714 1.696-4.496 3.422-9.078 5.18-13.742 1.968-4.566 3.97-9.214 6.004-13.934 1.018-2.348 2.044-4.714 3.078-7.098 1.048-2.376 2.27-4.704 3.408-7.074 2.322-4.714 4.678-9.496 7.062-14.332 2.47-4.786 5.208-9.512 7.846-14.328 1.336-2.398 2.68-4.808 4.028-7.23 1.368-2.41 2.902-4.75 4.356-7.14 2.95-4.738 5.93-9.524 8.934-14.348 12.64-18.894 26.676-37.566 42.21-55.278 15.712-17.578 32.726-34.25 50.692-49.602 18.18-15.136 37.264-28.902 56.726-41.114 19.604-12.036 39.644-22.312 59.376-31.144 5.004-2.040 9.964-4.062 14.878-6.066 2.462-0.972 4.868-2.032 7.336-2.918 2.47-0.868 4.93-1.734 7.376-2.594 4.898-1.684 9.678-3.468 14.484-4.992 4.832-1.43 9.604-2.844 14.312-4.242 2.356-0.672 4.66-1.426 7.004-2.012 2.346-0.574 4.676-1.14 6.986-1.704 4.606-1.118 9.142-2.214 13.604-3.296 4.5-0.868 8.926-1.722 13.27-2.558 2.166-0.41 4.31-0.82 6.434-1.222 1.062-0.2 2.118-0.398 3.166-0.598 1.060-0.148 2.118-0.292 3.166-0.442 4.192-0.582 8.292-1.152 12.3-1.71 1.998-0.274 3.972-0.546 5.922-0.816 1.946-0.286 3.904-0.378 5.814-0.57 3.822-0.336 7.544-0.664 11.164-0.98 3.616-0.304 7.104-0.688 10.526-0.738 0.23-0.008 0.452-0.016 0.682-0.026 0.614-34.812 29.008-62.846 63.968-62.846 0.542 0 1.080 0.028 1.62 0.042v-0.022c0 0 0.090 0.012 0.224 0.028 3.878 0.11 7.674 0.55 11.35 1.322 1.748 0.204 3.662 0.426 5.776 0.672 1.884 0.222 3.912 0.462 6.076 0.718 2.566 0.376 5.292 0.772 8.176 1.192 5.746 0.856 12.124 1.8 18.958 2.908 6.446 1.348 13.414 2.804 20.864 4.362 3.718 0.712 7.504 1.778 11.406 2.786 3.892 1.026 7.894 2.080 12.004 3.162 2.044 0.566 4.132 1.040 6.208 1.708 2.074 0.656 4.174 1.318 6.3 1.988 4.232 1.348 8.564 2.726 12.988 4.134 1.104 0.354 2.21 0.708 3.324 1.066 1.1 0.406 2.206 0.814 3.316 1.226 2.216 0.824 4.456 1.658 6.714 2.5 4.496 1.698 9.078 3.424 13.74 5.182 4.568 1.968 9.216 3.97 13.936 6.004 2.348 1.018 4.714 2.044 7.098 3.078 2.376 1.048 4.702 2.27 7.074 3.408 4.714 2.322 9.494 4.678 14.33 7.062 4.786 2.47 9.512 5.208 14.328 7.846 2.398 1.336 4.808 2.678 7.23 4.028 2.41 1.366 4.75 2.9 7.14 4.354 4.738 2.952 9.524 5.93 14.35 8.936 18.89 12.64 37.564 26.674 55.278 42.21 17.574 15.712 34.248 32.726 49.602 50.69 15.136 18.182 28.902 37.264 41.112 56.728 12.036 19.602 22.314 39.644 31.142 59.376 2.042 5.002 4.062 9.964 6.068 14.878 0.974 2.462 2.032 4.868 2.918 7.334 0.87 2.472 1.732 4.932 2.592 7.376 1.686 4.898 3.468 9.678 4.994 14.484 1.432 4.832 2.846 9.604 4.24 14.31 0.674 2.358 1.43 4.66 2.016 7.004 0.57 2.348 1.138 4.676 1.702 6.988 1.118 4.606 2.216 9.14 3.296 13.602 0.868 4.502 1.72 8.928 2.558 13.272 0.41 2.164 0.818 4.308 1.222 6.434 0.2 1.060 0.398 2.116 0.596 3.164 0.148 1.062 0.296 2.118 0.444 3.168 0.582 4.19 1.152 8.292 1.708 12.3 0.278 1.996 0.55 3.97 0.82 5.922 0.284 1.946 0.376 3.902 0.568 5.812 0.336 3.822 0.664 7.546 0.98 11.164 0.304 3.616 0.686 7.106 0.738 10.528 0.020 0.534 0.040 1.044 0.058 1.574 35.224 0.146 63.732 28.738 63.732 63.992 0 0.542-0.028 1.080-0.042 1.62h0.022c0 0-0.012 0.090-0.028 0.224-0.11 3.878-0.55 7.674-1.322 11.35-0.204 1.748-0.428 3.662-0.674 5.776-0.222 1.886-0.46 3.914-0.718 6.076-0.374 2.566-0.77 5.294-1.19 8.176-0.856 5.746-1.8 12.124-2.908 18.958-1.348 6.444-2.804 13.414-4.364 20.862-0.71 3.72-1.776 7.506-2.786 11.408-1.024 3.892-2.078 7.894-3.16 12.002-0.566 2.044-1.040 4.134-1.708 6.208-0.656 2.076-1.32 4.174-1.988 6.3-1.348 4.234-2.726 8.566-4.136 12.99-0.352 1.102-0.708 2.21-1.064 3.324-0.408 1.1-0.814 2.206-1.226 3.316-0.826 2.216-1.658 4.454-2.502 6.714-1.696 4.498-3.422 9.080-5.18 13.74-1.968 4.57-3.97 9.216-6.004 13.936-1.020 2.348-2.044 4.714-3.078 7.098-1.048 2.376-2.27 4.702-3.408 7.076-2.322 4.714-4.678 9.494-7.062 14.33-2.47 4.786-5.208 9.512-7.846 14.328-1.336 2.398-2.68 4.808-4.028 7.23-1.368 2.41-2.902 4.75-4.356 7.14-2.95 4.74-5.93 9.524-8.934 14.35-12.64 18.892-26.676 37.564-42.21 55.278-15.712 17.576-32.726 34.25-50.692 49.602-18.18 15.136-37.264 28.902-56.726 41.112-19.604 12.036-39.644 22.314-59.376 31.142-5.004 2.040-9.964 4.062-14.878 6.068-2.462 0.974-4.868 2.032-7.336 2.918-2.47 0.87-4.93 1.734-7.376 2.592-4.898 1.684-9.678 3.468-14.484 4.994-4.832 1.432-9.604 2.846-14.312 4.242-2.356 0.672-4.66 1.428-7.004 2.014-2.346 0.572-4.676 1.138-6.986 1.702-4.606 1.118-9.142 2.216-13.604 3.298-4.5 0.868-8.926 1.72-13.27 2.558-2.166 0.412-4.31 0.82-6.434 1.222-1.062 0.2-2.118 0.398-3.166 0.596-1.060 0.148-2.118 0.296-3.166 0.442-4.192 0.584-8.292 1.154-12.3 1.71-1.998 0.276-3.972 0.55-5.922 0.82-1.946 0.284-3.904 0.376-5.814 0.57-3.822 0.336-7.544 0.664-11.164 0.98-3.616 0.304-7.104 0.686-10.526 0.738-0.852 0.032-1.674 0.062-2.512 0.092-0.65 34.78-29.028 62.778-63.966 62.778-0.542 0-1.080-0.028-1.62-0.042l-0.002 0.022c0 0-0.090-0.012-0.222-0.028-3.878-0.11-7.676-0.55-11.352-1.322-1.748-0.204-3.662-0.426-5.776-0.672-1.884-0.222-3.912-0.462-6.076-0.718-2.566-0.376-5.292-0.772-8.176-1.192-5.746-0.856-12.124-1.8-18.958-2.908-6.446-1.348-13.414-2.804-20.864-4.362-3.718-0.712-7.504-1.778-11.406-2.786-3.892-1.026-7.894-2.080-12.004-3.162-2.044-0.566-4.132-1.040-6.208-1.708-2.074-0.656-4.174-1.318-6.3-1.988-4.232-1.348-8.564-2.726-12.988-4.134-1.104-0.354-2.21-0.708-3.324-1.066-1.1-0.406-2.206-0.814-3.316-1.226-2.216-0.824-4.456-1.658-6.714-2.5-4.496-1.698-9.078-3.424-13.74-5.182-4.568-1.968-9.216-3.97-13.936-6.004-2.348-1.018-4.714-2.044-7.098-3.078-2.376-1.048-4.702-2.27-7.074-3.408-4.714-2.322-9.494-4.678-14.33-7.062-4.786-2.47-9.512-5.208-14.328-7.846-2.398-1.336-4.808-2.678-7.23-4.028-2.41-1.366-4.75-2.9-7.14-4.354-4.738-2.952-9.524-5.93-14.35-8.936-18.89-12.64-37.564-26.674-55.278-42.21-17.574-15.712-34.248-32.726-49.602-50.69-15.136-18.182-28.902-37.264-41.112-56.728-12.036-19.602-22.314-39.644-31.142-59.376-2.042-5.002-4.062-9.964-6.068-14.878-0.974-2.462-2.032-4.868-2.918-7.334-0.87-2.472-1.732-4.932-2.592-7.376-1.686-4.898-3.468-9.678-4.994-14.484-1.432-4.832-2.846-9.604-4.24-14.31-0.674-2.358-1.43-4.66-2.016-7.004-0.57-2.348-1.138-4.676-1.702-6.988-1.118-4.606-2.216-9.14-3.296-13.602-0.868-4.502-1.72-8.928-2.558-13.272-0.41-2.164-0.818-4.308-1.222-6.434-0.2-1.060-0.398-2.116-0.596-3.164-0.148-1.062-0.296-2.118-0.444-3.168-0.582-4.19-1.152-8.292-1.708-12.3-0.278-1.996-0.55-3.97-0.82-5.922-0.284-1.946-0.376-3.902-0.568-5.812-0.336-3.822-0.664-7.546-0.98-11.164-0.304-3.616-0.686-7.106-0.738-10.528-0.020-0.548-0.040-1.076-0.058-1.62-34.376-1.112-61.902-29.304-61.902-63.946 0-0.542 0.028-1.078 0.042-1.618zM73.518 511.294c0.042 0.196 0.086 0.384 0.128 0.58 0.644 3.248 1.632 6.542 2.556 9.942 0.934 3.388 1.894 6.876 2.88 10.454 0.516 1.78 0.934 3.602 1.546 5.406 0.596 1.802 1.202 3.628 1.81 5.476 1.218 3.682 2.464 7.45 3.736 11.294 0.316 0.958 0.634 1.924 0.956 2.892 0.37 0.954 0.74 1.914 1.114 2.876 0.746 1.924 1.5 3.868 2.26 5.83 1.52 3.904 3.070 7.882 4.646 11.93 1.768 3.96 3.566 7.99 5.392 12.080 0.908 2.038 1.824 4.090 2.746 6.156 0.932 2.060 2.036 4.072 3.052 6.126 2.070 4.084 4.17 8.222 6.294 12.412 2.202 4.142 4.654 8.224 6.998 12.392 1.184 2.074 2.374 4.16 3.57 6.256 1.21 2.086 2.586 4.102 3.876 6.166 2.616 4.098 5.256 8.232 7.918 12.402 11.234 16.298 23.632 32.398 37.33 47.638 13.874 15.104 28.842 29.404 44.598 42.548 15.974 12.928 32.686 24.65 49.676 35.022 17.13 10.194 34.6 18.838 51.734 26.258 4.35 1.7 8.662 3.382 12.934 5.050 2.136 0.812 4.216 1.71 6.36 2.444 2.146 0.714 4.28 1.428 6.404 2.136 4.25 1.386 8.382 2.888 12.548 4.142 4.184 1.174 8.314 2.332 12.392 3.474 2.038 0.55 4.026 1.19 6.054 1.662 2.030 0.458 4.044 0.914 6.044 1.368 3.978 0.91 7.896 1.806 11.748 2.688 3.888 0.686 7.71 1.36 11.462 2.022 1.868 0.33 3.716 0.658 5.546 0.98 0.914 0.162 1.824 0.324 2.728 0.484 0.916 0.112 1.828 0.222 2.734 0.332 3.612 0.448 7.148 0.882 10.604 1.31 1.72 0.216 3.422 0.432 5.102 0.644 1.674 0.226 3.364 0.266 5.010 0.408 3.292 0.238 6.498 0.472 9.616 0.7 3.11 0.218 6.11 0.524 9.058 0.508 5.848 0.132 11.32 0.256 16.38 0.372 4.664-0.168 8.948-0.324 12.818-0.462 1.914-0.054 3.726-0.108 5.432-0.156 2.122-0.134 4.108-0.26 5.958-0.378 2.13-0.138 4.060-0.266 5.82-0.38 3.256-0.51 6.592-0.782 9.99-0.782 0.466 0 0.93 0.026 1.396 0.036 0.132-0.008 0.224-0.014 0.224-0.014v0.020c31.14 0.778 56.75 23.784 61.556 53.754 0.542-0.12 1.064-0.236 1.612-0.356 3.246-0.644 6.542-1.632 9.942-2.556 3.386-0.934 6.876-1.894 10.454-2.88 1.778-0.516 3.602-0.934 5.404-1.546 1.802-0.596 3.63-1.202 5.478-1.812 3.68-1.218 7.448-2.464 11.292-3.736 0.96-0.316 1.924-0.634 2.892-0.956 0.956-0.37 1.914-0.74 2.876-1.112 1.926-0.746 3.868-1.5 5.83-2.26 3.904-1.52 7.884-3.070 11.932-4.646 3.96-1.768 7.988-3.566 12.080-5.392 2.038-0.908 4.088-1.824 6.156-2.746 2.060-0.932 4.072-2.036 6.126-3.054 4.082-2.070 8.222-4.17 12.41-6.294 4.144-2.202 8.226-4.654 12.394-6.998 2.074-1.184 4.16-2.374 6.256-3.572 2.086-1.21 4.102-2.586 6.166-3.876 4.098-2.616 8.23-5.256 12.402-7.918 16.296-11.234 32.398-23.632 47.636-37.33 15.104-13.874 29.406-28.842 42.55-44.598 12.928-15.974 24.648-32.686 35.020-49.676 10.196-17.13 18.84-34.6 26.26-51.736 1.698-4.348 3.382-8.662 5.050-12.932 0.812-2.136 1.71-4.216 2.444-6.36 0.714-2.146 1.428-4.28 2.136-6.404 1.386-4.25 2.888-8.384 4.142-12.548 1.174-4.184 2.33-8.316 3.474-12.392 0.55-2.038 1.19-4.026 1.66-6.054 0.46-2.030 0.916-4.046 1.368-6.046 0.91-3.978 1.808-7.896 2.688-11.748 0.688-3.888 1.362-7.71 2.024-11.462 0.33-1.868 0.656-3.716 0.98-5.548 0.162-0.914 0.324-1.824 0.484-2.728 0.11-0.916 0.222-1.828 0.332-2.734 0.446-3.612 0.882-7.148 1.31-10.604 0.216-1.72 0.432-3.42 0.642-5.1 0.226-1.674 0.268-3.364 0.41-5.010 0.238-3.292 0.472-6.498 0.7-9.616 0.218-3.11 0.524-6.11 0.508-9.058 0.132-5.848 0.256-11.32 0.372-16.38-0.168-4.664-0.324-8.948-0.462-12.818-0.054-1.914-0.108-3.726-0.156-5.432-0.134-2.122-0.26-4.108-0.378-5.958-0.138-2.13-0.266-4.060-0.38-5.82-0.498-3.256-0.768-6.592-0.768-9.99 0-0.468 0.026-0.93 0.036-1.396-0.008-0.132-0.016-0.224-0.016-0.224h0.022c0.768-30.766 23.236-56.128 52.682-61.37-0.066-0.296-0.13-0.584-0.198-0.884-0.644-3.248-1.632-6.542-2.556-9.942-0.934-3.388-1.894-6.876-2.88-10.454-0.516-1.78-0.934-3.602-1.546-5.406-0.596-1.802-1.202-3.628-1.81-5.476-1.218-3.682-2.464-7.45-3.736-11.294-0.316-0.958-0.634-1.924-0.956-2.892-0.37-0.954-0.74-1.914-1.114-2.876-0.746-1.924-1.5-3.868-2.26-5.83-1.52-3.904-3.070-7.882-4.646-11.93-1.768-3.96-3.566-7.99-5.392-12.080-0.908-2.038-1.824-4.090-2.746-6.156-0.932-2.060-2.036-4.072-3.052-6.126-2.070-4.084-4.17-8.222-6.294-12.412-2.202-4.142-4.654-8.224-6.998-12.392-1.184-2.074-2.374-4.16-3.57-6.256-1.21-2.086-2.586-4.102-3.876-6.166-2.616-4.098-5.256-8.232-7.918-12.402-11.234-16.298-23.632-32.398-37.33-47.638-13.874-15.104-28.842-29.404-44.598-42.548-15.974-12.928-32.686-24.65-49.676-35.022-17.13-10.194-34.6-18.838-51.734-26.258-4.35-1.7-8.662-3.382-12.934-5.050-2.136-0.812-4.216-1.71-6.36-2.444-2.146-0.714-4.28-1.428-6.404-2.136-4.25-1.386-8.382-2.888-12.548-4.142-4.184-1.174-8.314-2.332-12.392-3.474-2.038-0.55-4.026-1.19-6.054-1.662-2.030-0.458-4.044-0.914-6.044-1.368-3.978-0.91-7.896-1.806-11.748-2.688-3.888-0.686-7.71-1.36-11.462-2.022-1.868-0.33-3.716-0.658-5.546-0.98-0.914-0.162-1.824-0.324-2.728-0.484-0.916-0.112-1.828-0.222-2.734-0.332-3.612-0.448-7.148-0.882-10.604-1.31-1.72-0.216-3.422-0.432-5.102-0.644-1.674-0.226-3.364-0.266-5.010-0.408-3.292-0.238-6.498-0.472-9.616-0.7-3.11-0.218-6.11-0.524-9.058-0.508-5.848-0.132-11.32-0.256-16.38-0.372-4.664 0.168-8.948 0.324-12.818 0.462-1.914 0.054-3.726 0.108-5.432 0.156-2.122 0.134-4.108 0.26-5.958 0.378-2.13 0.138-4.060 0.266-5.82 0.38-3.256 0.51-6.592 0.782-9.99 0.782-0.466 0-0.93-0.026-1.396-0.036-0.132 0.008-0.224 0.014-0.224 0.014v-0.020c-31.004-0.774-56.524-23.586-61.488-53.364-3.2 0.64-6.446 1.61-9.792 2.522-3.386 0.934-6.876 1.894-10.454 2.878-1.778 0.516-3.602 0.938-5.404 1.546-1.802 0.598-3.63 1.204-5.478 1.812-3.68 1.218-7.448 2.464-11.292 3.738-0.96 0.316-1.924 0.632-2.892 0.954-0.956 0.372-1.914 0.742-2.876 1.114-1.926 0.746-3.868 1.5-5.83 2.258-3.904 1.524-7.884 3.070-11.932 4.648-3.96 1.77-7.988 3.566-12.080 5.39-2.038 0.91-4.088 1.824-6.156 2.746-2.060 0.934-4.072 2.036-6.126 3.054-4.082 2.070-8.222 4.172-12.41 6.296-4.144 2.2-8.226 4.652-12.394 6.996-2.074 1.184-4.16 2.376-6.256 3.57-2.086 1.21-4.102 2.586-6.166 3.878-4.098 2.614-8.23 5.254-12.402 7.918-16.296 11.23-32.398 23.632-47.636 37.328-15.104 13.876-29.406 28.84-42.55 44.598-12.928 15.972-24.648 32.684-35.020 49.676-10.196 17.128-18.84 34.602-26.26 51.734-1.698 4.352-3.382 8.664-5.050 12.934-0.812 2.136-1.71 4.218-2.444 6.36-0.714 2.148-1.428 4.282-2.136 6.406-1.386 4.25-2.888 8.382-4.142 12.546-1.174 4.184-2.33 8.316-3.474 12.394-0.55 2.036-1.19 4.024-1.66 6.054-0.46 2.028-0.916 4.042-1.368 6.042-0.91 3.98-1.808 7.898-2.688 11.75-0.688 3.886-1.362 7.71-2.024 11.46-0.33 1.868-0.656 3.718-0.98 5.546-0.162 0.914-0.324 1.824-0.484 2.73-0.11 0.914-0.222 1.828-0.332 2.734-0.446 3.61-0.882 7.148-1.31 10.602-0.216 1.722-0.432 3.422-0.642 5.102-0.226 1.676-0.268 3.364-0.41 5.012-0.238 3.29-0.472 6.496-0.7 9.614-0.218 3.11-0.524 6.11-0.508 9.058-0.132 5.848-0.256 11.32-0.372 16.382 0.168 4.664 0.324 8.946 0.462 12.816 0.054 1.914 0.108 3.726 0.156 5.434 0.134 2.122 0.26 4.106 0.378 5.958 0.138 2.128 0.266 4.058 0.38 5.82 0.496 3.26 0.766 6.596 0.766 9.994 0 0.466-0.026 0.93-0.036 1.396 0.008 0.132 0.016 0.224 0.016 0.224h-0.022c-0.78 31.38-24.134 57.154-54.44 61.674z" />
36
+ <glyph unicode="&#xe016;" d="M1024 544l-225.738 22.574 143.66 175.582-135.766 135.764-175.582-143.658-22.574 225.738h-192l-22.574-225.738-175.582 143.658-135.764-135.764 143.658-175.582-225.738-22.574v-192l225.738-22.574-143.658-175.582 135.764-135.766 175.582 143.66 22.574-225.738h192l22.574 225.738 175.582-143.66 135.766 135.766-143.66 175.582 225.738 22.574v192zM704 527.528v-159.056l-112.472-112.472h-159.056l-112.472 112.472v159.056l112.47 112.472h159.056l112.474-112.472z" />
37
+ <glyph unicode="&#xe017;" d="M874.022 810.020c-92.652 92.656-220.636 149.98-362.022 149.98-219.488 0-406.69-138.128-479.498-332.188l119.876-44.954c54.604 145.546 195.006 249.142 359.622 249.142 106.040 0 202.020-43 271.506-112.494l-143.506-143.506h384v384l-149.978-149.98zM512 64c-106.040 0-202.026 42.992-271.512 112.488l143.512 143.512h-384v-384l149.994 149.994c92.646-92.662 220.618-149.994 362.006-149.994 219.49 0 406.692 138.128 479.5 332.188l-119.876 44.954c-54.604-145.546-195.006-249.142-359.624-249.142z" />
38
+ <glyph unicode="&#xe018;" d="M512 752c-100.252 0-189.54-46.802-246.326-119.256l-76.776 57.582c74.32 95.764 191.494 157.674 323.102 157.674v112l160-160-160-160v112zM512 144c100.254 0 189.542 46.802 246.326 119.256l76.776-57.582c-74.32-95.764-191.494-157.674-323.102-157.674v-112l-160 160 160 160v-112zM201.6 448c0-100.364 49.928-189.508 126.724-244.902l-57.584-76.78c-100.108 72.928-165.14 189.966-165.14 321.682h-105.6l160 160 160-160h-118.4zM918.4 448h105.6l-160-160-160 160h118.4c0 100.364-49.928 189.508-126.724 244.902l57.584 76.778c100.108-72.926 165.14-189.962 165.14-321.68z" />
39
+ <glyph unicode="&#xe019;" d="M831.924 753.296v0 0zM834.050 448c104.384 99.81 155.082 197.58 121.354 256-19.26 33.356-63.36 49.296-123.48 49.296v-48c42.144 0 72.766-9.458 81.912-25.296 7.218-12.504 3.2-31.73-1.446-45.658-8.906-26.71-28.288-58.664-56.042-92.404-16.848-20.478-36.27-41.122-57.874-61.642-29.764 25.698-62.876 51.258-98.796 76.058-3.514 43.48-9.090 84.916-16.458 123.518 56.19 16.666 107.186 25.418 148.682 25.422l0.022 48c-0.008 0-0.018 0-0.026 0-45.174-0.004-99.396-9.032-158.874-26.404-34.24 140.318-93.566 233.11-161.024 233.11-67.458 0-126.784-92.792-161.028-233.102-59.474 17.372-113.698 26.398-158.872 26.398-60.12 0-104.248-15.942-123.506-49.296-33.73-58.42 16.966-156.19 121.352-256-104.386-99.808-155.082-197.58-121.352-256 19.26-33.36 63.37-49.294 123.506-49.294 45.172 0 99.396 9.030 158.872 26.4 34.244-140.314 93.568-233.106 161.028-233.106 67.458 0 126.784 92.792 161.028 233.102 59.474-17.374 113.7-26.398 158.874-26.398 60.12 0 104.248 15.944 123.506 49.296 33.724 58.418-16.97 156.192-121.358 256zM762.542 448c-18.62-15.876-38.454-31.584-59.358-46.988 0.53 15.476 0.816 31.142 0.816 46.988 0 15.844-0.286 31.51-0.812 46.988 20.904-15.404 40.738-31.112 59.354-46.988zM637.292 231.132c-23.054 8.196-46.562 17.52-70.27 27.868 13.626 7.262 27.294 14.824 40.974 22.722 13.722 7.922 27.146 16 40.288 24.198-2.882-25.766-6.562-50.76-10.992-74.788zM584 323.292c-23.782-13.728-47.876-26.63-72-38.616-24.124 11.982-48.22 24.884-72 38.616-23.976 13.844-47.192 28.226-69.498 43.012-1.65 26.712-2.502 54.010-2.502 81.696s0.852 54.984 2.502 81.694c22.306 14.786 45.522 29.17 69.498 43.014 23.78 13.728 47.876 26.63 72 38.614 24.124-11.982 48.218-24.884 72-38.614 23.976-13.842 47.192-28.23 69.498-43.014 1.65-26.71 2.502-54.008 2.502-81.694s-0.852-54.984-2.502-81.696c-22.306-14.784-45.522-29.172-69.498-43.012zM375.712 305.92c13.14-8.198 26.564-16.276 40.288-24.198 13.68-7.898 27.346-15.46 40.974-22.722-23.704-10.348-47.214-19.67-70.266-27.864-4.43 24.026-8.112 49.020-10.996 74.784zM320.812 401.010c-20.904 15.406-40.74 31.116-59.358 46.99 18.618 15.876 38.454 31.584 59.358 46.99-0.528-15.48-0.812-31.144-0.812-46.99s0.284-31.512 0.812-46.99zM386.708 664.864c23.052-8.194 46.562-17.518 70.266-27.864-13.626-7.262-27.294-14.824-40.974-22.722-13.722-7.922-27.146-16.002-40.288-24.198 2.884 25.764 6.566 50.758 10.996 74.784zM608 614.278c-13.68 7.898-27.346 15.46-40.972 22.722 23.706 10.346 47.212 19.668 70.268 27.862 4.43-24.024 8.11-49.016 10.992-74.782-13.142 8.196-26.566 16.274-40.288 24.198zM421.18 793.184c15.34 40.908 33.322 73.668 52.002 94.736 9.738 10.986 24.378 24.080 38.818 24.080 14.442 0 29.078-13.094 38.818-24.080 18.68-21.068 36.658-53.828 52.002-94.736 9.312-24.834 17.478-51.978 24.45-80.952-37.136-12.926-75.832-28.824-115.268-47.532-39.438 18.71-78.132 34.608-115.27 47.536 6.97 28.972 15.136 56.116 24.448 80.948zM167.65 541.938c-27.756 33.74-47.136 65.692-56.042 92.404-4.644 13.926-8.664 33.154-1.444 45.658 9.144 15.838 39.776 25.294 81.938 25.296h0.004c41.492 0 92.486-8.752 148.674-25.418-7.368-38.604-12.942-80.040-16.456-123.522-35.92-24.798-69.036-50.36-98.8-76.058-21.604 20.52-41.026 41.162-57.874 61.64zM192.1 190.708c-42.162 0-72.792 9.456-81.936 25.292-7.22 12.504-3.2 31.73 1.444 45.658 8.906 26.708 28.286 58.662 56.042 92.4 16.848 20.48 36.27 41.124 57.874 61.644 29.762-25.702 62.878-51.262 98.798-76.058 3.514-43.482 9.088-84.916 16.456-123.524-56.19-16.662-107.184-25.412-148.678-25.412zM602.82 102.816c-15.342-40.91-33.322-73.668-52.002-94.738-9.74-10.984-24.376-24.078-38.818-24.078-14.44 0-29.080 13.094-38.818 24.078-18.68 21.070-36.662 53.828-52.002 94.736-9.312 24.834-17.478 51.978-24.45 80.952 37.138 12.93 75.832 28.824 115.268 47.536 39.44-18.71 78.13-34.61 115.27-47.538-6.972-28.972-15.136-56.116-24.448-80.948zM912.39 261.656c4.642-13.926 8.664-33.152 1.446-45.656-9.146-15.84-39.778-25.296-81.938-25.296-41.496 0-92.49 8.754-148.678 25.418 7.368 38.606 12.944 80.042 16.458 123.524 35.92 24.8 69.036 50.362 98.796 76.058 21.604-20.522 41.026-41.164 57.874-61.64 27.758-33.744 47.136-65.696 56.042-92.408zM432 448c0 44.183 35.817 80 80 80s80-35.817 80-80c0-44.183-35.817-80-80-80-44.183 0-80 35.817-80 80z" />
40
+ <glyph unicode="&#xe01a;" d="M466.038 402.038l-320 320-146.038-146.038v384h384l-146.038-146.038 320-320zM512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512h128c0-212.078 171.922-384 384-384s384 171.922 384 384c0 212.078-171.922 384-384 384v128z" />
41
+ <glyph unicode="&#xe01b;" d="M640-64l192 192-320 320 320 320-192 192-512-512z" />
42
+ <glyph unicode="&#xe01c;" d="M384 960l-192-192 320-320-320-320 192-192 512 512z" />
43
+ <glyph unicode="&#xe01d;" d="M0 448l1024-448-192 448 192 448z" />
44
+ <glyph unicode="&#xe01e;" d="M1024 448l-1024 448 192-448-192-448z" />
45
+ <glyph unicode="&#xe01f;" d="M768 960l-512-512 512-512-255.998 512z" />
46
+ <glyph unicode="&#xe020;" d="M256-64l512 512-512 512 256-512z" />
47
+ <glyph unicode="&#xe021;" d="M640.002 704l-256-256 256-256.002z" />
48
+ <glyph unicode="&#xe022;" d="M384.002 192l256 256-256 256z" />
49
+ <glyph unicode="&#xe023;" d="M0 448.002l512-512.002v320h511.998l0.002 384h-512v320l-512-511.998zM152 509.492l16 16v-154.98l-16 16v122.98zM136 402.512l-16 16v58.98l16 16v-90.98zM184 541.492l16 16v-218.982l-16 16v186.982zM216 573.492l16 16v-282.982l-16 16v250.982zM248 605.492l16 16v-346.982l-16 16v314.982zM280 637.492l16 15.998v-410.98l-16 16v378.982zM312 669.49l16 16v-474.98l-16 16v442.98zM344 701.49l16 16v-538.98l-16 16v506.98zM376 733.49l16 16v-602.98l-16 16v570.98zM408 765.49l16 16v-666.98l-16 16v634.98zM104 461.492v-26.98l-13.49 13.49 13.49 13.49zM472 320v256h16v-256h-16zM504 320v256h16v-256h-16zM536 320v256h16v-256h-16zM568 320v256h16v-256h-16zM600 320v256h16v-256h-16zM632 320v256h16v-256h-16zM664 320v256h16v-256h-16zM696 320v256h16v-256h-16zM728 320v256h16v-256h-16zM760 320v256h16v-256h-16zM792 320v256h16v-256h-16zM824 320v256h16v-256h-16zM856 320v256h16v-256h-16zM888 320v256h16v-256h-16zM920 320v256h16v-256h-16zM959.998 320h-7.998v256h8l-0.002-256zM448 576h8v-256h-8v-229.49l-8 8v698.98l8 8v-229.49z" />
50
+ <glyph unicode="&#xe024;" d="M1024 447.998l-512 512.002v-320h-511.998l-0.002-384h512v-320l512 511.998zM872 386.508l-16-16v154.98l16-16v-122.98zM888 493.488l16-16v-58.98l-16-16v90.98zM840 354.508l-16-16v218.982l16-16v-186.982zM808 322.508l-16-16v282.982l16-16v-250.982zM776 290.508l-16-16v346.982l16-16v-314.982zM744 258.508l-16-15.998v410.98l16-16v-378.982zM712 226.51l-16-16v474.98l16-16v-442.98zM680 194.51l-16-16v538.98l16-16v-506.98zM648 162.51l-16-16v602.98l16-16v-570.98zM616 130.51l-16-16v666.98l16-16v-634.98zM920 434.508v26.98l13.49-13.49-13.49-13.49zM552 576v-256h-16v256h16zM520 576v-256h-16v256h16zM488 576v-256h-16v256h16zM456 576v-256h-16v256h16zM424 576v-256h-16v256h16zM392 576v-256h-16v256h16zM360 576v-256h-16v256h16zM328 576v-256h-16v256h16zM296 576v-256h-16v256h16zM264 576v-256h-16v256h16zM232 576v-256h-16v256h16zM200 576v-256h-16v256h16zM168 576v-256h-16v256h16zM136 576v-256h-16v256h16zM104 576v-256h-16v256h16zM64.002 576h7.998v-256h-8l0.002 256zM576 320h-8v256h8v229.49l8-8v-698.98l-8-8v229.49z" />
51
+ <glyph unicode="&#xe025;" d="M0 448l512-512v320h511.998l0.002 384h-512v320z" />
52
+ <glyph unicode="&#xe026;" d="M1024 448l-512 512v-320h-511.998l-0.002-384h512v-320z" />
53
+ <glyph unicode="&#xe027;" d="M448 704c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 128c-35.348 0-64 28.652-64 64s28.652 64 64 64c35.346 0 64-28.652 64-64s-28.654-64-64-64zM512 448c-114.876 0-208-93.124-208-208s93.124-208 208-208c-229.75 0-416 186.25-416 416s186.25 416 416 416c114.876 0 208-93.124 208-208s-93.124-208-208-208z" />
54
+ <glyph unicode="&#xe028;" d="M512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156 78.572-78.572 183.038-121.844 294.156-121.844 111.118 0 215.584 43.272 294.156 121.844 78.572 78.572 121.844 183.038 121.844 294.156 0 111.118-43.272 215.584-121.844 294.156-78.572 78.572-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512 0 282.77 229.23 512 512 512zM448 256h128v-128h-128zM448 768h128v-384h-128z" />
55
+ <glyph unicode="&#xe3cb;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM813.256 493.254l-256.002 256c-24.992 24.994-65.514 24.994-90.508 0s-24.994-65.516 0-90.51l146.744-146.744h-357.49c-35.346 0-64-28.654-64-64s28.654-64 64-64h357.49l-146.746-146.744c-24.994-24.994-24.994-65.518 0-90.512 12.498-12.496 28.878-18.744 45.256-18.744s32.758 6.248 45.254 18.744l256.002 256c24.992 24.994 24.992 65.518 0 90.51z" />
56
+ <glyph unicode="&#xe3cf;" d="M512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 32c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM210.744 493.254l256.002 256c24.992 24.994 65.514 24.994 90.508 0s24.994-65.516 0-90.51l-146.744-146.744h357.49c35.346 0 64-28.654 64-64s-28.654-64-64-64h-357.49l146.746-146.744c24.994-24.994 24.994-65.518 0-90.512-12.498-12.496-28.878-18.744-45.256-18.744s-32.758 6.248-45.254 18.744l-256.002 256c-24.992 24.994-24.992 65.518 0 90.51z" />
57
+ <glyph unicode="&#xe3d3;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM813.256 402.744l-256.002-256c-12.496-12.496-28.876-18.744-45.254-18.744s-32.758 6.248-45.254 18.744c-24.994 24.994-24.994 65.518 0 90.512l146.744 146.744h-357.49c-35.346 0-64 28.654-64 64s28.654 64 64 64h357.49l-146.746 146.746c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.508 0l256.002-256c24.994-24.994 24.994-65.518 0.002-90.512z" />
58
+ <glyph unicode="&#xe3d7;" d="M512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM210.744 402.744l256.002-256c12.496-12.496 28.876-18.744 45.254-18.744s32.758 6.248 45.254 18.744c24.994 24.994 24.994 65.518 0 90.512l-146.744 146.744h357.49c35.346 0 64 28.654 64 64s-28.654 64-64 64h-357.49l146.746 146.746c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.508 0l-256.002-256c-24.994-24.994-24.994-65.518-0.002-90.512z" />
59
+ <glyph unicode="&#xe3e3;" d="M1023.998-64h-1023.998v1024h1024l-0.002-1024zM128 832v-768h767.998l0.002 768h-768zM576 224l224 224-224 224v-160h-320v-128h320v-160z" />
60
+ <glyph unicode="&#xe3e7;" d="M0.002-64h1023.998v1024h-1024l0.002-1024zM896 832v-768h-767.998l-0.002 768h768zM448 224l-224 224 224 224v-160h320v-128h-320v-160z" />
61
+ <glyph unicode="&#xe409;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM576 224v160h-320v128h320v160l224-224-224-224z" />
62
+ <glyph unicode="&#xe40b;" d="M512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM448 224v160h320v128h-320v160l-224-224 224-224z" />
63
+ <glyph unicode="&#xe415;" d="M0 640h64v-384h-64zM128 640h64v-384h-64zM256 640h64v-384h-64zM1024 448l-448 448v-256h-192v-384h192v-256z" />
64
+ <glyph unicode="&#xe417;" d="M960 640h64v-384h-64zM832 640h64v-384h-64zM704 640h64v-384h-64zM0 448l448 448v-256h192v-384h-192v-256z" />
65
+ <glyph unicode="&#xe48c;" d="M864 256c-45.16 0-85.92-18.738-115.012-48.83l-431.004 215.502c1.314 8.252 2.016 16.706 2.016 25.328s-0.702 17.076-2.016 25.326l431.004 215.502c29.092-30.090 69.852-48.828 115.012-48.828 88.366 0 160 71.634 160 160s-71.634 160-160 160-160-71.634-160-160c0-8.622 0.704-17.076 2.016-25.326l-431.004-215.504c-29.092 30.090-69.852 48.83-115.012 48.83-88.366 0-160-71.636-160-160 0-88.368 71.634-160 160-160 45.16 0 85.92 18.738 115.012 48.828l431.004-215.502c-1.312-8.25-2.016-16.704-2.016-25.326 0-88.368 71.634-160 160-160s160 71.632 160 160c0 88.364-71.634 160-160 160z" />
66
  </font>
67
  </defs>
68
  </svg>
assets/admin/layout/css/layout-rtl.css CHANGED
@@ -253,8 +253,8 @@
253
  {
254
  width: 235px;
255
  /* float: left;
256
- position: relative;
257
- margin-right: -100%;*/
258
  }
259
  .page-sidebar-tech-banker.navbar-collapse
260
  {
253
  {
254
  width: 235px;
255
  /* float: left;
256
+ position: relative;
257
+ margin-right: -100%;*/
258
  }
259
  .page-sidebar-tech-banker.navbar-collapse
260
  {
assets/global/plugins/custom/js/custom.js CHANGED
@@ -18,248 +18,248 @@
18
 
19
  , init: function (type, element, options)
20
  {
21
- var eventIn
22
- , eventOut
23
-
24
- this.type = type
25
- this.$element = $(element)
26
- this.options = this.getOptions(options)
27
- this.enabled = true
28
-
29
- if (this.options.trigger == 'click')
30
- {
31
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
32
- } else if (this.options.trigger != 'manual')
33
- {
34
- eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
35
- eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
36
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
37
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
38
- }
39
-
40
- this.options.selector ?
41
- (this._options = $.extend({}, this.options, {trigger: 'manual', selector: ''})) :
42
- this.fixTitle()
43
  }
44
 
45
  , getOptions: function (options)
46
  {
47
- options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
48
 
49
- if (options.delay && typeof options.delay == 'number')
50
- {
51
- options.delay = {
52
- show: options.delay
53
- , hide: options.delay
54
- }
55
- }
56
 
57
- return options
58
  }
59
 
60
  , enter: function (e)
61
  {
62
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
63
-
64
- if (!self.options.delay || !self.options.delay.show)
65
- return self.show()
66
-
67
- clearTimeout(this.timeout)
68
- self.hoverState = 'in'
69
- this.timeout = setTimeout(function ()
70
- {
71
- if (self.hoverState == 'in')
72
- self.show()
73
- }, self.options.delay.show)
74
  }
75
 
76
  , leave: function (e)
77
  {
78
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
79
-
80
- if (this.timeout)
81
- clearTimeout(this.timeout)
82
- if (!self.options.delay || !self.options.delay.hide)
83
- return self.hide()
84
-
85
- self.hoverState = 'out'
86
- this.timeout = setTimeout(function ()
87
- {
88
- if (self.hoverState == 'out')
89
- self.hide()
90
- }, self.options.delay.hide)
91
  }
92
 
93
  , show: function ()
94
  {
95
- var $tip
96
- , inside
97
- , pos
98
- , actualWidth
99
- , actualHeight
100
- , placement
101
- , tp
102
-
103
- if (this.hasContent() && this.enabled)
104
- {
105
- $tip = this.tip()
106
- this.setContent()
107
-
108
- if (this.options.animation)
109
- {
110
- $tip.addClass('fade')
111
- }
112
-
113
- placement = typeof this.options.placement == 'function' ?
114
- this.options.placement.call(this, $tip[0], this.$element[0]) :
115
- this.options.placement
116
-
117
- inside = /in/.test(placement)
118
-
119
- $tip
120
- .detach()
121
- .css({top: 0, left: 0, display: 'block'})
122
- .insertAfter(this.$element)
123
-
124
- pos = this.getPosition(inside)
125
-
126
- actualWidth = $tip[0].offsetWidth
127
- actualHeight = $tip[0].offsetHeight
128
-
129
- switch (inside ? placement.split(' ')[1] : placement)
130
- {
131
- case 'bottom':
132
- tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
133
- break
134
- case 'top':
135
- tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
136
- break
137
- case 'left':
138
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
139
- break
140
- case 'right':
141
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
142
- break
143
- }
144
-
145
- $tip
146
- .offset(tp)
147
- .addClass(placement)
148
- .addClass('in')
149
- }
150
  }
151
 
152
  , setContent: function ()
153
  {
154
- var $tip = this.tip()
155
- , title = this.getTitle()
156
 
157
- $tip.find('.tooltip_tip-inner')[this.options.html ? 'html' : 'text'](title)
158
- $tip.removeClass('fade in top bottom left right')
159
  }
160
 
161
  , hide: function ()
162
  {
163
- var that = this
164
- , $tip = this.tip()
165
-
166
- $tip.removeClass('in')
167
-
168
- function removeWithAnimation()
169
- {
170
- var timeout = setTimeout(function ()
171
- {
172
- $tip.off($.support.transition.end).detach()
173
- }, 500)
174
-
175
- $tip.one($.support.transition.end, function ()
176
- {
177
- clearTimeout(timeout)
178
- $tip.detach()
179
- })
180
- }
181
-
182
- $.support.transition && this.$tip.hasClass('fade') ?
183
- removeWithAnimation() :
184
- $tip.detach()
185
-
186
- return this
187
  }
188
 
189
  , fixTitle: function ()
190
  {
191
- var $e = this.$element
192
- if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string')
193
- {
194
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
195
- }
196
  }
197
 
198
  , hasContent: function ()
199
  {
200
- return this.getTitle()
201
  }
202
 
203
  , getPosition: function (inside)
204
  {
205
- return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()),
206
- {
207
- width: this.$element[0].offsetWidth
208
- , height: this.$element[0].offsetHeight
209
- })
210
  }
211
 
212
  , getTitle: function ()
213
  {
214
- var title
215
- , $e = this.$element
216
- , o = this.options
217
 
218
- title = $e.attr('data-original-title')
219
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
220
 
221
- return title
222
  }
223
 
224
  , tip: function ()
225
  {
226
- return this.$tip = this.$tip || $(this.options.template)
227
  }
228
 
229
  , validate: function ()
230
  {
231
- if (!this.$element[0].parentNode)
232
- {
233
- this.hide()
234
- this.$element = null
235
- this.options = null
236
- }
237
  }
238
 
239
  , enable: function ()
240
  {
241
- this.enabled = true
242
  }
243
 
244
  , disable: function ()
245
  {
246
- this.enabled = false
247
  }
248
 
249
  , toggleEnabled: function ()
250
  {
251
- this.enabled = !this.enabled
252
  }
253
 
254
  , toggle: function (e)
255
  {
256
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
257
- self[self.tip().hasClass('in') ? 'hide' : 'show']()
258
  }
259
 
260
  , destroy: function ()
261
  {
262
- this.hide().$element.off('.' + this.type).removeData(this.type)
263
  }
264
 
265
  }
@@ -274,13 +274,13 @@
274
  {
275
  return this.each(function ()
276
  {
277
- var $this = $(this)
278
- , data = $this.data('tooltip_tip')
279
- , options = typeof option == 'object' && option
280
- if (!data)
281
- $this.data('tooltip_tip', (data = new Tooltip(this, options)))
282
- if (typeof option == 'string')
283
- data[option]()
284
  })
285
  }
286
 
@@ -336,44 +336,44 @@
336
 
337
  if (!selector)
338
  {
339
- selector = $this.attr('href')
340
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
341
  }
342
 
343
  if ($this.parent('li').hasClass('active'))
344
- return
345
 
346
  var $previous = $ul.find('.active:last a')
347
  var hideEvent = $.Event('hide.bs.tab',
348
- {
349
- relatedTarget: $this[0]
350
- })
351
  var showEvent = $.Event('show.bs.tab',
352
- {
353
- relatedTarget: $previous[0]
354
- })
355
 
356
  $previous.trigger(hideEvent)
357
  $this.trigger(showEvent)
358
 
359
  if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented())
360
- return
361
 
362
  var $target = $(selector)
363
 
364
  this.activate($this.closest('li'), $ul)
365
  this.activate($target, $target.parent(), function ()
366
  {
367
- $previous.trigger
368
- ({
369
- type: 'hidden.bs.tab',
370
- relatedTarget: $this[0]
371
- })
372
- $this.trigger(
373
- {
374
- type: 'shown.bs.tab',
375
- relatedTarget: $previous[0]
376
- })
377
  })
378
  }
379
 
@@ -381,51 +381,51 @@
381
  {
382
  var $active = container.find('> .active')
383
  var transition = callback
384
- && $.support.transition
385
- && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
386
 
387
  function next()
388
  {
389
- $active
390
- .removeClass('active')
391
- .find('> .dropdown-menu > .active')
392
- .removeClass('active')
393
- .end()
394
- .find('[data-toggle="tab"]')
395
- .attr('aria-expanded', false)
396
-
397
- element
398
- .addClass('active')
399
- .find('[data-toggle="tab"]')
400
- .attr('aria-expanded', true)
401
-
402
- if (transition)
403
- {
404
- element[0].offsetWidth // reflow for transition
405
- element.addClass('in')
406
- } else
407
- {
408
- element.removeClass('fade')
409
- }
410
-
411
- if (element.parent('.dropdown-menu').length)
412
- {
413
- element
414
- .closest('li.dropdown')
415
- .addClass('active')
416
- .end()
417
- .find('[data-toggle="tab"]')
418
- .attr('aria-expanded', true)
419
- }
420
-
421
- callback && callback()
422
  }
423
 
424
  $active.length && transition ?
425
- $active
426
- .one('bsTransitionEnd', next)
427
- .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
428
- next()
429
 
430
  $active.removeClass('in')
431
  }
@@ -438,13 +438,13 @@
438
  {
439
  return this.each(function ()
440
  {
441
- var $this = $(this)
442
- var data = $this.data('bs.tab')
443
 
444
- if (!data)
445
- $this.data('bs.tab', (data = new Tab(this)))
446
- if (typeof option == 'string')
447
- data[option]()
448
  })
449
  }
450
 
@@ -474,7 +474,7 @@
474
  }
475
 
476
  $(document)
477
- .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
478
- .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
479
 
480
  }(jQuery);
18
 
19
  , init: function (type, element, options)
20
  {
21
+ var eventIn
22
+ , eventOut
23
+
24
+ this.type = type
25
+ this.$element = $(element)
26
+ this.options = this.getOptions(options)
27
+ this.enabled = true
28
+
29
+ if (this.options.trigger == 'click')
30
+ {
31
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
32
+ } else if (this.options.trigger != 'manual')
33
+ {
34
+ eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
35
+ eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
36
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
37
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
38
+ }
39
+
40
+ this.options.selector ?
41
+ (this._options = $.extend({}, this.options, {trigger: 'manual', selector: ''})) :
42
+ this.fixTitle()
43
  }
44
 
45
  , getOptions: function (options)
46
  {
47
+ options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
48
 
49
+ if (options.delay && typeof options.delay == 'number')
50
+ {
51
+ options.delay = {
52
+ show: options.delay
53
+ , hide: options.delay
54
+ }
55
+ }
56
 
57
+ return options
58
  }
59
 
60
  , enter: function (e)
61
  {
62
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
63
+
64
+ if (!self.options.delay || !self.options.delay.show)
65
+ return self.show()
66
+
67
+ clearTimeout(this.timeout)
68
+ self.hoverState = 'in'
69
+ this.timeout = setTimeout(function ()
70
+ {
71
+ if (self.hoverState == 'in')
72
+ self.show()
73
+ }, self.options.delay.show)
74
  }
75
 
76
  , leave: function (e)
77
  {
78
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
79
+
80
+ if (this.timeout)
81
+ clearTimeout(this.timeout)
82
+ if (!self.options.delay || !self.options.delay.hide)
83
+ return self.hide()
84
+
85
+ self.hoverState = 'out'
86
+ this.timeout = setTimeout(function ()
87
+ {
88
+ if (self.hoverState == 'out')
89
+ self.hide()
90
+ }, self.options.delay.hide)
91
  }
92
 
93
  , show: function ()
94
  {
95
+ var $tip
96
+ , inside
97
+ , pos
98
+ , actualWidth
99
+ , actualHeight
100
+ , placement
101
+ , tp
102
+
103
+ if (this.hasContent() && this.enabled)
104
+ {
105
+ $tip = this.tip()
106
+ this.setContent()
107
+
108
+ if (this.options.animation)
109
+ {
110
+ $tip.addClass('fade')
111
+ }
112
+
113
+ placement = typeof this.options.placement == 'function' ?
114
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
115
+ this.options.placement
116
+
117
+ inside = /in/.test(placement)
118
+
119
+ $tip
120
+ .detach()
121
+ .css({top: 0, left: 0, display: 'block'})
122
+ .insertAfter(this.$element)
123
+
124
+ pos = this.getPosition(inside)
125
+
126
+ actualWidth = $tip[0].offsetWidth
127
+ actualHeight = $tip[0].offsetHeight
128
+
129
+ switch (inside ? placement.split(' ')[1] : placement)
130
+ {
131
+ case 'bottom':
132
+ tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
133
+ break
134
+ case 'top':
135
+ tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
136
+ break
137
+ case 'left':
138
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
139
+ break
140
+ case 'right':
141
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
142
+ break
143
+ }
144
+
145
+ $tip
146
+ .offset(tp)
147
+ .addClass(placement)
148
+ .addClass('in')
149
+ }
150
  }
151
 
152
  , setContent: function ()
153
  {
154
+ var $tip = this.tip()
155
+ , title = this.getTitle()
156
 
157
+ $tip.find('.tooltip_tip-inner')[this.options.html ? 'html' : 'text'](title)
158
+ $tip.removeClass('fade in top bottom left right')
159
  }
160
 
161
  , hide: function ()
162
  {
163
+ var that = this
164
+ , $tip = this.tip()
165
+
166
+ $tip.removeClass('in')
167
+
168
+ function removeWithAnimation()
169
+ {
170
+ var timeout = setTimeout(function ()
171
+ {
172
+ $tip.off($.support.transition.end).detach()
173
+ }, 500)
174
+
175
+ $tip.one($.support.transition.end, function ()
176
+ {
177
+ clearTimeout(timeout)
178
+ $tip.detach()
179
+ })
180
+ }
181
+
182
+ $.support.transition && this.$tip.hasClass('fade') ?
183
+ removeWithAnimation() :
184
+ $tip.detach()
185
+
186
+ return this
187
  }
188
 
189
  , fixTitle: function ()
190
  {
191
+ var $e = this.$element
192
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string')
193
+ {
194
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
195
+ }
196
  }
197
 
198
  , hasContent: function ()
199
  {
200
+ return this.getTitle()
201
  }
202
 
203
  , getPosition: function (inside)
204
  {
205
+ return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()),
206
+ {
207
+ width: this.$element[0].offsetWidth
208
+ , height: this.$element[0].offsetHeight
209
+ })
210
  }
211
 
212
  , getTitle: function ()
213
  {
214
+ var title
215
+ , $e = this.$element
216
+ , o = this.options
217
 
218
+ title = $e.attr('data-original-title')
219
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
220
 
221
+ return title
222
  }
223
 
224
  , tip: function ()
225
  {
226
+ return this.$tip = this.$tip || $(this.options.template)
227
  }
228
 
229
  , validate: function ()
230
  {
231
+ if (!this.$element[0].parentNode)
232
+ {
233
+ this.hide()
234
+ this.$element = null
235
+ this.options = null
236
+ }
237
  }
238
 
239
  , enable: function ()
240
  {
241
+ this.enabled = true
242
  }
243
 
244
  , disable: function ()
245
  {
246
+ this.enabled = false
247
  }
248
 
249
  , toggleEnabled: function ()
250
  {
251
+ this.enabled = !this.enabled
252
  }
253
 
254
  , toggle: function (e)
255
  {
256
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
257
+ self[self.tip().hasClass('in') ? 'hide' : 'show']()
258
  }
259
 
260
  , destroy: function ()
261
  {
262
+ this.hide().$element.off('.' + this.type).removeData(this.type)
263
  }
264
 
265
  }
274
  {
275
  return this.each(function ()
276
  {
277
+ var $this = $(this)
278
+ , data = $this.data('tooltip_tip')
279
+ , options = typeof option == 'object' && option
280
+ if (!data)
281
+ $this.data('tooltip_tip', (data = new Tooltip(this, options)))
282
+ if (typeof option == 'string')
283
+ data[option]()
284
  })
285
  }
286
 
336
 
337
  if (!selector)
338
  {
339
+ selector = $this.attr('href')
340
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
341
  }
342
 
343
  if ($this.parent('li').hasClass('active'))
344
+ return
345
 
346
  var $previous = $ul.find('.active:last a')
347
  var hideEvent = $.Event('hide.bs.tab',
348
+ {
349
+ relatedTarget: $this[0]
350
+ })
351
  var showEvent = $.Event('show.bs.tab',
352
+ {
353
+ relatedTarget: $previous[0]
354
+ })
355
 
356
  $previous.trigger(hideEvent)
357
  $this.trigger(showEvent)
358
 
359
  if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented())
360
+ return
361
 
362
  var $target = $(selector)
363
 
364
  this.activate($this.closest('li'), $ul)
365
  this.activate($target, $target.parent(), function ()
366
  {
367
+ $previous.trigger
368
+ ({
369
+ type: 'hidden.bs.tab',
370
+ relatedTarget: $this[0]
371
+ })
372
+ $this.trigger(
373
+ {
374
+ type: 'shown.bs.tab',
375
+ relatedTarget: $previous[0]
376
+ })
377
  })
378
  }
379
 
381
  {
382
  var $active = container.find('> .active')
383
  var transition = callback
384
+ && $.support.transition
385
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
386
 
387
  function next()
388
  {
389
+ $active
390
+ .removeClass('active')
391
+ .find('> .dropdown-menu > .active')
392
+ .removeClass('active')
393
+ .end()
394
+ .find('[data-toggle="tab"]')
395
+ .attr('aria-expanded', false)
396
+
397
+ element
398
+ .addClass('active')
399
+ .find('[data-toggle="tab"]')
400
+ .attr('aria-expanded', true)
401
+
402
+ if (transition)
403
+ {
404
+ element[0].offsetWidth // reflow for transition
405
+ element.addClass('in')
406
+ } else
407
+ {
408
+ element.removeClass('fade')
409
+ }
410
+
411
+ if (element.parent('.dropdown-menu').length)
412
+ {
413
+ element
414
+ .closest('li.dropdown')
415
+ .addClass('active')
416
+ .end()
417
+ .find('[data-toggle="tab"]')
418
+ .attr('aria-expanded', true)
419
+ }
420
+
421
+ callback && callback()
422
  }
423
 
424
  $active.length && transition ?
425
+ $active
426
+ .one('bsTransitionEnd', next)
427
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
428
+ next()
429
 
430
  $active.removeClass('in')
431
  }
438
  {
439
  return this.each(function ()
440
  {
441
+ var $this = $(this)
442
+ var data = $this.data('bs.tab')
443
 
444
+ if (!data)
445
+ $this.data('bs.tab', (data = new Tab(this)))
446
+ if (typeof option == 'string')
447
+ data[option]()
448
  })
449
  }
450
 
474
  }
475
 
476
  $(document)
477
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
478
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
479
 
480
  }(jQuery);
assets/global/plugins/datatables/media/js/jquery.datatables.js CHANGED
@@ -1,3 +1,3 @@
1
  !function(t, e, n){!function(t){"use strict"; "function" == typeof define && define.amd?define("datatables", ["jquery"], t):"object" == typeof exports?module.exports = t(require("jquery")):jQuery && !jQuery.fn.dataTable && t(jQuery)}(function(a){"use strict"; function r(t){var e, n, o = "a aa ai ao as b fn i m o s ", i = {}; a.each(t, function(a, s){e = a.match(/^([^A-Z]+?)([A-Z])/), e && - 1 !== o.indexOf(e[1] + " ") && (n = a.replace(e[0], e[2].toLowerCase()), i[n] = a, "o" === e[1] && r(t[a]))}), t._hungarianMap = i}function o(t, e, i){t._hungarianMap || r(t); var s; a.each(e, function(r, l){s = t._hungarianMap[r], s === n || !i && e[s] !== n || ("o" === s.charAt(0)?(e[s] || (e[s] = {}), a.extend(!0, e[s], e[r]), o(t[s], e[s], i)):e[s] = e[r])})}function i(t){var e = qt.defaults.oLanguage, n = t.sZeroRecords; !t.sEmptyTable && n && "No data available in table" === e.sEmptyTable && Nt(t, t, "sZeroRecords", "sEmptyTable"), !t.sLoadingRecords && n && "Loading..." === e.sLoadingRecords && Nt(t, t, "sZeroRecords", "sLoadingRecords"), t.sInfoThousands && (t.sThousands = t.sInfoThousands); var a = t.sDecimal; a && Xt(a)}function s(t){be(t, "ordering", "bSort"), be(t, "orderMulti", "bSortMulti"), be(t, "orderClasses", "bSortClasses"), be(t, "orderCellsTop", "bSortCellsTop"), be(t, "order", "aaSorting"), be(t, "orderFixed", "aaSortingFixed"), be(t, "paging", "bPaginate"), be(t, "pagingType", "sPaginationType"), be(t, "pageLength", "iDisplayLength"), be(t, "searching", "bFilter"), "boolean" == typeof t.sScrollX && (t.sScrollX = t.sScrollX?"100%":""); var e = t.aoSearchCols; if (e)for (var n = 0, a = e.length; a > n; n++)e[n] && o(qt.models.oSearch, e[n])}function l(t){be(t, "orderable", "bSortable"), be(t, "orderData", "aDataSort"), be(t, "orderSequence", "asSorting"), be(t, "orderDataType", "sortDataType"); var e = t.aDataSort; e && !a.isArray(e) && (t.aDataSort = [e])}function u(t){if (!qt.__browser){var e = {}; qt.__browser = e; var n = a("<div/>").css({position:"fixed", top:0, left:0, height:1, width:1, overflow:"hidden"}).append(a("<div/>").css({position:"absolute", top:1, left:1, width:100, overflow:"scroll"}).append(a("<div/>").css({width:"100%", height:10}))).appendTo("body"), r = n.children(), o = r.children(); e.barWidth = r[0].offsetWidth - r[0].clientWidth, e.bScrollOversize = 100 === o[0].offsetWidth && 100 !== r[0].clientWidth, e.bScrollbarLeft = 1 !== Math.round(o.offset().left), e.bBounding = n[0].getBoundingClientRect().width?!0:!1, n.remove()}a.extend(t.oBrowser, qt.__browser), t.oScroll.iBarWidth = qt.__browser.barWidth}function c(t, e, a, r, o, i){var s, l = r, u = !1; for (a !== n && (s = a, u = !0); l !== o; )t.hasOwnProperty(l) && (s = u?e(s, t[l], l, t):t[l], u = !0, l += i); return s}function f(t, n){var r = qt.defaults.column, o = t.aoColumns.length, i = a.extend({}, qt.models.oColumn, r, {nTh:n?n:e.createElement("th"), sTitle:r.sTitle?r.sTitle:n?n.innerHTML:"", aDataSort:r.aDataSort?r.aDataSort:[o], mData:r.mData?r.mData:o, idx:o}); t.aoColumns.push(i); var s = t.aoPreSearchCols; s[o] = a.extend({}, qt.models.oSearch, s[o]), d(t, o, a(n).data())}function d(t, e, r){var i = t.aoColumns[e], s = t.oClasses, u = a(i.nTh); if (!i.sWidthOrig){i.sWidthOrig = u.attr("width") || null; var c = (u.attr("style") || "").match(/width:\s*(\d+[pxem%]+)/); c && (i.sWidthOrig = c[1])}r !== n && null !== r && (l(r), o(qt.defaults.column, r), r.mDataProp === n || r.mData || (r.mData = r.mDataProp), r.sType && (i._sManualType = r.sType), r.className && !r.sClass && (r.sClass = r.className), a.extend(i, r), Nt(i, r, "sWidth", "sWidthOrig"), r.iDataSort !== n && (i.aDataSort = [r.iDataSort]), Nt(i, r, "aDataSort")); var f = i.mData, d = I(f), h = i.mRender?I(i.mRender):null, p = function(t){return"string" == typeof t && - 1 !== t.indexOf("@")}; i._bAttrSrc = a.isPlainObject(f) && (p(f.sort) || p(f.type) || p(f.filter)), i.fnGetData = function(t, e, a){var r = d(t, e, n, a); return h && e?h(r, e, t, a):r}, i.fnSetData = function(t, e, n){return A(f)(t, e, n)}, "number" != typeof f && (t._rowReadObject = !0), t.oFeatures.bSort || (i.bSortable = !1, u.addClass(s.sSortableNone)); var g = - 1 !== a.inArray("asc", i.asSorting), b = - 1 !== a.inArray("desc", i.asSorting); i.bSortable && (g || b)?g && !b?(i.sSortingClass = s.sSortableAsc, i.sSortingClassJUI = s.sSortJUIAscAllowed):!g && b?(i.sSortingClass = s.sSortableDesc, i.sSortingClassJUI = s.sSortJUIDescAllowed):(i.sSortingClass = s.sSortable, i.sSortingClassJUI = s.sSortJUI):(i.sSortingClass = s.sSortableNone, i.sSortingClassJUI = "")}function h(t){if (t.oFeatures.bAutoWidth !== !1){var e = t.aoColumns; St(t); for (var n = 0, a = e.length; a > n; n++)e[n].nTh.style.width = e[n].sWidth}var r = t.oScroll; ("" !== r.sY || "" !== r.sX) && bt(t), Wt(t, null, "column-sizing", [t])}function p(t, e){var n = v(t, "bVisible"); return"number" == typeof n[e]?n[e]:null}function g(t, e){var n = v(t, "bVisible"), r = a.inArray(e, n); return - 1 !== r?r:null}function b(t){return v(t, "bVisible").length}function v(t, e){var n = []; return a.map(t.aoColumns, function(t, a){t[e] && n.push(a)}), n}function S(t){var e, a, r, o, i, s, l, u, c, f = t.aoColumns, d = t.aoData, h = qt.ext.type.detect; for (e = 0, a = f.length; a > e; e++)if (l = f[e], c = [], !l.sType && l._sManualType)l.sType = l._sManualType; else if (!l.sType){for (r = 0, o = h.length; o > r; r++){for (i = 0, s = d.length; s > i && (c[i] === n && (c[i] = w(t, i, e, "type")), u = h[r](c[i], t), u || r === h.length - 1) && "html" !== u; i++); if (u){l.sType = u; break}}l.sType || (l.sType = "string")}}function m(t, e, r, o){var i, s, l, u, c, d, h, p = t.aoColumns; if (e)for (i = e.length - 1; i >= 0; i--){h = e[i]; var g = h.targets !== n?h.targets:h.aTargets; for (a.isArray(g) || (g = [g]), l = 0, u = g.length; u > l; l++)if ("number" == typeof g[l] && g[l] >= 0){for (; p.length <= g[l]; )f(t); o(g[l], h)} else if ("number" == typeof g[l] && g[l] < 0)o(p.length + g[l], h); else if ("string" == typeof g[l])for (c = 0, d = p.length; d > c; c++)("_all" == g[l] || a(p[c].nTh).hasClass(g[l])) && o(c, h)}if (r)for (i = 0, s = r.length; s > i; i++)o(i, r[i])}function D(t, e, r, o){var i = t.aoData.length, s = a.extend(!0, {}, qt.models.oRow, {src:r?"dom":"data", idx:i}); s._aData = e, t.aoData.push(s); for (var l = t.aoColumns, u = 0, c = l.length; c > u; u++)l[u].sType = null; t.aiDisplayMaster.push(i); var f = t.rowIdFn(e); return f !== n && (t.aIds[f] = s), (r || !t.oFeatures.bDeferRender) && H(t, i, r, o), i}function y(t, e){var n; return e instanceof a || (e = a(e)), e.map(function(e, a){return n = j(t, a), D(t, n.data, a, n.cells)})}function _(t, e){return e._DT_RowIndex !== n?e._DT_RowIndex:null}function T(t, e, n){return a.inArray(n, t.aoData[e].anCells)}function w(t, e, a, r){var o = t.iDraw, i = t.aoColumns[a], s = t.aoData[e]._aData, l = i.sDefaultContent, u = i.fnGetData(s, r, {settings:t, row:e, col:a}); if (u === n)return t.iDrawError != o && null === l && (Ht(t, 0, "Requested unknown parameter " + ("function" == typeof i.mData?"{function}":"'" + i.mData + "'") + " for row " + e, 4), t.iDrawError = o), l; if (u !== s && null !== u || null === l){if ("function" == typeof u)return u.call(s)} else u = l; return null === u && "display" == r?"":u}function C(t, e, n, a){var r = t.aoColumns[n], o = t.aoData[e]._aData; r.fnSetData(o, a, {settings:t, row:e, col:n})}function x(t){return a.map(t.match(/(\\.|[^\.])+/g) || [""], function(t){return t.replace(/\\./g, ".")})}function I(t){if (a.isPlainObject(t)){var e = {}; return a.each(t, function(t, n){n && (e[t] = I(n))}), function(t, a, r, o){var i = e[a] || e._; return i !== n?i(t, a, r, o):t}}if (null === t)return function(t){return t}; if ("function" == typeof t)return function(e, n, a, r){return t(e, n, a, r)}; if ("string" != typeof t || - 1 === t.indexOf(".") && - 1 === t.indexOf("[") && - 1 === t.indexOf("("))return function(e, n){return e[t]}; var r = function(t, e, o){var i, s, l, u; if ("" !== o)for (var c = x(o), f = 0, d = c.length; d > f; f++){if (i = c[f].match(ve), s = c[f].match(Se), i){if (c[f] = c[f].replace(ve, ""), "" !== c[f] && (t = t[c[f]]), l = [], c.splice(0, f + 1), u = c.join("."), a.isArray(t))for (var h = 0, p = t.length; p > h; h++)l.push(r(t[h], e, u)); var g = i[0].substring(1, i[0].length - 1); t = "" === g?l:l.join(g); break}if (s)c[f] = c[f].replace(Se, ""), t = t[c[f]](); else{if (null === t || t[c[f]] === n)return n; t = t[c[f]]}}return t}; return function(e, n){return r(e, n, t)}}function A(t){if (a.isPlainObject(t))return A(t._); if (null === t)return function(){}; if ("function" == typeof t)return function(e, n, a){t(e, "set", n, a)}; if ("string" != typeof t || - 1 === t.indexOf(".") && - 1 === t.indexOf("[") && - 1 === t.indexOf("("))return function(e, n){e[t] = n}; var e = function(t, r, o){for (var i, s, l, u, c, f = x(o), d = f[f.length - 1], h = 0, p = f.length - 1; p > h; h++){if (s = f[h].match(ve), l = f[h].match(Se), s){if (f[h] = f[h].replace(ve, ""), t[f[h]] = [], i = f.slice(), i.splice(0, h + 1), c = i.join("."), a.isArray(r))for (var g = 0, b = r.length; b > g; g++)u = {}, e(u, r[g], c), t[f[h]].push(u); else t[f[h]] = r; return}l && (f[h] = f[h].replace(Se, ""), t = t[f[h]](r)), (null === t[f[h]] || t[f[h]] === n) && (t[f[h]] = {}), t = t[f[h]]}d.match(Se)?t = t[d.replace(Se, "")](r):t[d.replace(ve, "")] = r}; return function(n, a){return e(n, a, t)}}function F(t){return ce(t.aoData, "_aData")}function L(t){t.aoData.length = 0, t.aiDisplayMaster.length = 0, t.aiDisplay.length = 0, t.aIds = {}}function P(t, e, a){for (var r = - 1, o = 0, i = t.length; i > o; o++)t[o] == e?r = o:t[o] > e && t[o]--; - 1 != r && a === n && t.splice(r, 1)}function R(t, e, a, r){var o, i, s = t.aoData[e], l = function(n, a){for (; n.childNodes.length; )n.removeChild(n.firstChild); n.innerHTML = w(t, e, a, "display")}; if ("dom" !== a && (a && "auto" !== a || "dom" !== s.src)){var u = s.anCells; if (u)if (r !== n)l(u[r], r); else for (o = 0, i = u.length; i > o; o++)l(u[o], o)} else s._aData = j(t, s, r, r === n?n:s._aData).data; s._aSortData = null, s._aFilterData = null; var c = t.aoColumns; if (r !== n)c[r].sType = null; else{for (o = 0, i = c.length; i > o; o++)c[o].sType = null; N(t, s)}}function j(t, e, r, o){var i, s, l, u = [], c = e.firstChild, f = 0, d = t.aoColumns, h = t._rowReadObject; o = o !== n?o:h?{}:[]; var p = function(t, e){if ("string" == typeof t){var n = t.indexOf("@"); if ( - 1 !== n){var a = t.substring(n + 1), r = A(t); r(o, e.getAttribute(a))}}}, g = function(t){if (r === n || r === f)if (s = d[f], l = a.trim(t.innerHTML), s && s._bAttrSrc){var e = A(s.mData._); e(o, l), p(s.mData.sort, t), p(s.mData.type, t), p(s.mData.filter, t)} else h?(s._setter || (s._setter = A(s.mData)), s._setter(o, l)):o[f] = l; f++}; if (c)for (; c; )i = c.nodeName.toUpperCase(), ("TD" == i || "TH" == i) && (g(c), u.push(c)), c = c.nextSibling; else{u = e.anCells; for (var b = 0, v = u.length; v > b; b++)g(u[b])}var S = c?e:e.nTr; if (S){var m = S.getAttribute("id"); m && A(t.rowId)(o, m)}return{data:o, cells:u}}function H(t, n, a, r){var o, i, s, l, u, c = t.aoData[n], f = c._aData, d = []; if (null === c.nTr){for (o = a || e.createElement("tr"), c.nTr = o, c.anCells = d, o._DT_RowIndex = n, N(t, c), l = 0, u = t.aoColumns.length; u > l; l++)s = t.aoColumns[l], i = a?r[l]:e.createElement(s.sCellType), d.push(i), (!a || s.mRender || s.mData !== l) && (i.innerHTML = w(t, n, l, "display")), s.sClass && (i.className += " " + s.sClass), s.bVisible && !a?o.appendChild(i):!s.bVisible && a && i.parentNode.removeChild(i), s.fnCreatedCell && s.fnCreatedCell.call(t.oInstance, i, w(t, n, l), f, n, l); Wt(t, "aoRowCreatedCallback", null, [o, f, n])}c.nTr.setAttribute("role", "row")}function N(t, e){var n = e.nTr, r = e._aData; if (n){var o = t.rowIdFn(r); if (o && (n.id = o), r.DT_RowClass){var i = r.DT_RowClass.split(" "); e.__rowc = e.__rowc?ge(e.__rowc.concat(i)):i, a(n).removeClass(e.__rowc.join(" ")).addClass(r.DT_RowClass)}r.DT_RowAttr && a(n).attr(r.DT_RowAttr), r.DT_RowData && a(n).data(r.DT_RowData)}}function k(t){var e, n, r, o, i, s = t.nTHead, l = t.nTFoot, u = 0 === a("th, td", s).length, c = t.oClasses, f = t.aoColumns; for (u && (o = a("<tr/>").appendTo(s)), e = 0, n = f.length; n > e; e++)i = f[e], r = a(i.nTh).addClass(i.sClass), u && r.appendTo(o), t.oFeatures.bSort && (r.addClass(i.sSortingClass), i.bSortable !== !1 && (r.attr("tabindex", t.iTabIndex).attr("aria-controls", t.sTableId), At(t, i.nTh, e))), i.sTitle != r[0].innerHTML && r.html(i.sTitle), Et(t, "header")(t, r, i, c); if (u && E(t.aoHeader, s), a(s).find(">tr").attr("role", "row"), a(s).find(">tr>th, >tr>td").addClass(c.sHeaderTH), a(l).find(">tr>th, >tr>td").addClass(c.sFooterTH), null !== l){var d = t.aoFooter[0]; for (e = 0, n = d.length; n > e; e++)i = f[e], i.nTf = d[e].cell, i.sClass && a(i.nTf).addClass(i.sClass)}}function O(t, e, r){var o, i, s, l, u, c, f, d, h, p = [], g = [], b = t.aoColumns.length; if (e){for (r === n && (r = !1), o = 0, i = e.length; i > o; o++){for (p[o] = e[o].slice(), p[o].nTr = e[o].nTr, s = b - 1; s >= 0; s--)t.aoColumns[s].bVisible || r || p[o].splice(s, 1); g.push([])}for (o = 0, i = p.length; i > o; o++){if (f = p[o].nTr)for (; c = f.firstChild; )f.removeChild(c); for (s = 0, l = p[o].length; l > s; s++)if (d = 1, h = 1, g[o][s] === n){for (f.appendChild(p[o][s].cell), g[o][s] = 1; p[o + d] !== n && p[o][s].cell == p[o + d][s].cell; )g[o + d][s] = 1, d++; for (; p[o][s + h] !== n && p[o][s].cell == p[o][s + h].cell; ){for (u = 0; d > u; u++)g[o + u][s + h] = 1; h++}a(p[o][s].cell).attr("rowspan", d).attr("colspan", h)}}}}function M(t){var e = Wt(t, "aoPreDrawCallback", "preDraw", [t]); if ( - 1 !== a.inArray(!1, e))return void pt(t, !1); var r = [], o = 0, i = t.asStripeClasses, s = i.length, l = (t.aoOpenRows.length, t.oLanguage), u = t.iInitDisplayStart, c = "ssp" == Bt(t), f = t.aiDisplay; t.bDrawing = !0, u !== n && - 1 !== u && (t._iDisplayStart = c?u:u >= t.fnRecordsDisplay()?0:u, t.iInitDisplayStart = - 1); var d = t._iDisplayStart, h = t.fnDisplayEnd(); if (t.bDeferLoading)t.bDeferLoading = !1, t.iDraw++, pt(t, !1); else if (c){if (!t.bDestroying && !X(t))return} else t.iDraw++; if (0 !== f.length)for (var p = c?0:d, g = c?t.aoData.length:h, v = p; g > v; v++){var S = f[v], m = t.aoData[S]; null === m.nTr && H(t, S); var D = m.nTr; if (0 !== s){var y = i[o % s]; m._sRowStripe != y && (a(D).removeClass(m._sRowStripe).addClass(y), m._sRowStripe = y)}Wt(t, "aoRowCallback", null, [D, m._aData, o, v]), r.push(D), o++} else{var _ = l.sZeroRecords; 1 == t.iDraw && "ajax" == Bt(t)?_ = l.sLoadingRecords:l.sEmptyTable && 0 === t.fnRecordsTotal() && (_ = l.sEmptyTable), r[0] = a("<tr/>", {"class":s?i[0]:""}).append(a("<td />", {valign:"top", colSpan:b(t), "class":t.oClasses.sRowEmpty}).html(_))[0]}Wt(t, "aoHeaderCallback", "header", [a(t.nTHead).children("tr")[0], F(t), d, h, f]), Wt(t, "aoFooterCallback", "footer", [a(t.nTFoot).children("tr")[0], F(t), d, h, f]); var T = a(t.nTBody); T.children().detach(), T.append(a(r)), Wt(t, "aoDrawCallback", "draw", [t]), t.bSorted = !1, t.bFiltered = !1, t.bDrawing = !1}function W(t, e){var n = t.oFeatures, a = n.bSort, r = n.bFilter; a && Ct(t), r?z(t, t.oPreviousSearch):t.aiDisplay = t.aiDisplayMaster.slice(), e !== !0 && (t._iDisplayStart = 0), t._drawHold = e, M(t), t._drawHold = !1}function U(t){var e = t.oClasses, n = a(t.nTable), r = a("<div/>").insertBefore(n), o = t.oFeatures, i = a("<div/>", {id:t.sTableId + "_wrapper", "class":e.sWrapper + (t.nTFoot?"":" " + e.sNoFooter)}); t.nHolding = r[0], t.nTableWrapper = i[0], t.nTableReinsertBefore = t.nTable.nextSibling; for (var s, l, u, c, f, d, h = t.sDom.split(""), p = 0; p < h.length; p++){if (s = null, l = h[p], "<" == l){if (u = a("<div/>")[0], c = h[p + 1], "'" == c || '"' == c){for (f = "", d = 2; h[p + d] != c; )f += h[p + d], d++; if ("H" == f?f = e.sJUIHeader:"F" == f && (f = e.sJUIFooter), - 1 != f.indexOf(".")){var g = f.split("."); u.id = g[0].substr(1, g[0].length - 1), u.className = g[1]} else"#" == f.charAt(0)?u.id = f.substr(1, f.length - 1):u.className = f; p += d}i.append(u), i = a(u)} else if (">" == l)i = i.parent(); else if ("l" == l && o.bPaginate && o.bLengthChange)s = ct(t); else if ("f" == l && o.bFilter)s = $(t); else if ("r" == l && o.bProcessing)s = ht(t); else if ("t" == l)s = gt(t); else if ("i" == l && o.bInfo)s = rt(t); else if ("p" == l && o.bPaginate)s = ft(t); else if (0 !== qt.ext.feature.length)for (var b = qt.ext.feature, v = 0, S = b.length; S > v; v++)if (l == b[v].cFeature){s = b[v].fnInit(t); break}if (s){var m = t.aanFeatures; m[l] || (m[l] = []), m[l].push(s), i.append(s)}}r.replaceWith(i), t.nHolding = null}function E(t, e){var n, r, o, i, s, l, u, c, f, d, h, p = a(e).children("tr"), g = function(t, e, n){for (var a = t[e]; a[n]; )n++; return n}; for (t.splice(0, t.length), o = 0, l = p.length; l > o; o++)t.push([]); for (o = 0, l = p.length; l > o; o++)for (n = p[o], c = 0, r = n.firstChild; r; ){if ("TD" == r.nodeName.toUpperCase() || "TH" == r.nodeName.toUpperCase())for (f = 1 * r.getAttribute("colspan"), d = 1 * r.getAttribute("rowspan"), f = f && 0 !== f && 1 !== f?f:1, d = d && 0 !== d && 1 !== d?d:1, u = g(t, o, c), h = 1 === f?!0:!1, s = 0; f > s; s++)for (i = 0; d > i; i++)t[o + i][u + s] = {cell:r, unique:h}, t[o + i].nTr = n; r = r.nextSibling}}function B(t, e, n){var a = []; n || (n = t.aoHeader, e && (n = [], E(n, e))); for (var r = 0, o = n.length; o > r; r++)for (var i = 0, s = n[r].length; s > i; i++)!n[r][i].unique || a[i] && t.bSortCellsTop || (a[i] = n[r][i].cell); return a}function J(t, e, n){if (Wt(t, "aoServerParams", "serverParams", [e]), e && a.isArray(e)){var r = {}, o = /(.*?)\[\]$/; a.each(e, function(t, e){var n = e.name.match(o); if (n){var a = n[0]; r[a] || (r[a] = []), r[a].push(e.value)} else r[e.name] = e.value}), e = r}var i, s = t.ajax, l = t.oInstance, u = function(e){Wt(t, null, "xhr", [t, e, t.jqXHR]), n(e)}; if (a.isPlainObject(s) && s.data){i = s.data; var c = a.isFunction(i)?i(e, t):i; e = a.isFunction(i) && c?c:a.extend(!0, e, c), delete s.data}var f = {data:e, success:function(e){var n = e.error || e.sError; n && Ht(t, 0, n), t.json = e, u(e)}, dataType:"json", cache:!1, type:t.sServerMethod, error:function(e, n, r){var o = Wt(t, null, "xhr", [t, null, t.jqXHR]); - 1 === a.inArray(!0, o) && ("parsererror" == n?Ht(t, 0, "Invalid JSON response", 1):4 === e.readyState && Ht(t, 0, "Ajax error", 7)), pt(t, !1)}}; t.oAjaxData = e, Wt(t, null, "preXhr", [t, e]), t.fnServerData?t.fnServerData.call(l, t.sAjaxSource, a.map(e, function(t, e){return{name:e, value:t}}), u, t):t.sAjaxSource || "string" == typeof s?t.jqXHR = a.ajax(a.extend(f, {url:s || t.sAjaxSource})):a.isFunction(s)?t.jqXHR = s.call(l, e, u, t):(t.jqXHR = a.ajax(a.extend(f, s)), s.data = i)}function X(t){return t.bAjaxDataGet?(t.iDraw++, pt(t, !0), J(t, V(t), function(e){q(t, e)}), !1):!0}function V(t){var e, n, r, o, i = t.aoColumns, s = i.length, l = t.oFeatures, u = t.oPreviousSearch, c = t.aoPreSearchCols, f = [], d = wt(t), h = t._iDisplayStart, p = l.bPaginate !== !1?t._iDisplayLength: - 1, g = function(t, e){f.push({name:t, value:e})}; g("sEcho", t.iDraw), g("iColumns", s), g("sColumns", ce(i, "sName").join(",")), g("iDisplayStart", h), g("iDisplayLength", p); var b = {draw:t.iDraw, columns:[], order:[], start:h, length:p, search:{value:u.sSearch, regex:u.bRegex}}; for (e = 0; s > e; e++)r = i[e], o = c[e], n = "function" == typeof r.mData?"function":r.mData, b.columns.push({data:n, name:r.sName, searchable:r.bSearchable, orderable:r.bSortable, search:{value:o.sSearch, regex:o.bRegex}}), g("mDataProp_" + e, n), l.bFilter && (g("sSearch_" + e, o.sSearch), g("bRegex_" + e, o.bRegex), g("bSearchable_" + e, r.bSearchable)), l.bSort && g("bSortable_" + e, r.bSortable); l.bFilter && (g("sSearch", u.sSearch), g("bRegex", u.bRegex)), l.bSort && (a.each(d, function(t, e){b.order.push({column:e.col, dir:e.dir}), g("iSortCol_" + t, e.col), g("sSortDir_" + t, e.dir)}), g("iSortingCols", d.length)); var v = qt.ext.legacy.ajax; return null === v?t.sAjaxSource?f:b:v?f:b}function q(t, e){var a = function(t, a){return e[t] !== n?e[t]:e[a]}, r = G(t, e), o = a("sEcho", "draw"), i = a("iTotalRecords", "recordsTotal"), s = a("iTotalDisplayRecords", "recordsFiltered"); if (o){if (1 * o < t.iDraw)return; t.iDraw = 1 * o}L(t), t._iRecordsTotal = parseInt(i, 10), t._iRecordsDisplay = parseInt(s, 10); for (var l = 0, u = r.length; u > l; l++)D(t, r[l]); t.aiDisplay = t.aiDisplayMaster.slice(), t.bAjaxDataGet = !1, M(t), t._bInitComplete || lt(t, e), t.bAjaxDataGet = !0, pt(t, !1)}function G(t, e){var r = a.isPlainObject(t.ajax) && t.ajax.dataSrc !== n?t.ajax.dataSrc:t.sAjaxDataProp; return"data" === r?e.aaData || e[r]:"" !== r?I(r)(e):e}function $(t){var n = t.oClasses, r = t.sTableId, o = t.oLanguage, i = t.oPreviousSearch, s = t.aanFeatures, l = '<input type="search" class="' + n.sFilterInput + '"/>', u = o.sSearch; u = u.match(/_INPUT_/)?u.replace("_INPUT_", l):u + l; var c = a("<div/>", {id:s.f?null:r + "_filter", "class":n.sFilter}).append(a("<label/>").append(u)), f = function(){var e = (s.f, this.value?this.value:""); e != i.sSearch && (z(t, {sSearch:e, bRegex:i.bRegex, bSmart:i.bSmart, bCaseInsensitive:i.bCaseInsensitive}), t._iDisplayStart = 0, M(t))}, d = null !== t.searchDelay?t.searchDelay:"ssp" === Bt(t)?400:0, h = a("input", c).val(i.sSearch).attr("placeholder", o.sSearchPlaceholder).bind("keyup.DT search.DT input.DT paste.DT cut.DT", d?mt(f, d):f).bind("keypress.DT", function(t){return 13 == t.keyCode?!1:void 0}).attr("aria-controls", r); return a(t.nTable).on("search.dt.DT", function(n, a){if (t === a)try{h[0] !== e.activeElement && h.val(i.sSearch)} catch (r){}}), c[0]}function z(t, e, a){var r = t.oPreviousSearch, o = t.aoPreSearchCols, i = function(t){r.sSearch = t.sSearch, r.bRegex = t.bRegex, r.bSmart = t.bSmart, r.bCaseInsensitive = t.bCaseInsensitive}, s = function(t){return t.bEscapeRegex !== n?!t.bEscapeRegex:t.bRegex}; if (S(t), "ssp" != Bt(t)){Z(t, e.sSearch, a, s(e), e.bSmart, e.bCaseInsensitive), i(e); for (var l = 0; l < o.length; l++)Q(t, o[l].sSearch, l, s(o[l]), o[l].bSmart, o[l].bCaseInsensitive); Y(t)} else i(e); t.bFiltered = !0, Wt(t, null, "search", [t])}function Y(t){for (var e, n, r = qt.ext.search, o = t.aiDisplay, i = 0, s = r.length; s > i; i++){for (var l = [], u = 0, c = o.length; c > u; u++)n = o[u], e = t.aoData[n], r[i](t, e._aFilterData, n, e._aData, u) && l.push(n); o.length = 0, a.merge(o, l)}}function Q(t, e, n, a, r, o){if ("" !== e)for (var i, s = t.aiDisplay, l = K(e, a, r, o), u = s.length - 1; u >= 0; u--)i = t.aoData[s[u]]._aFilterData[n], l.test(i) || s.splice(u, 1)}function Z(t, e, n, a, r, o){var i, s, l, u = K(e, a, r, o), c = t.oPreviousSearch.sSearch, f = t.aiDisplayMaster; if (0 !== qt.ext.search.length && (n = !0), s = et(t), e.length <= 0)t.aiDisplay = f.slice(); else for ((s || n || c.length > e.length || 0 !== e.indexOf(c) || t.bSorted) && (t.aiDisplay = f.slice()), i = t.aiDisplay, l = i.length - 1; l >= 0; l--)u.test(t.aoData[i[l]]._sFilterRow) || i.splice(l, 1)}function K(t, e, n, r){if (t = e?t:tt(t), n){var o = a.map(t.match(/"[^"]+"|[^ ]+/g) || [""], function(t){if ('"' === t.charAt(0)){var e = t.match(/^"(.*)"$/); t = e?e[1]:t}return t.replace('"', "")}); t = "^(?=.*?" + o.join(")(?=.*?") + ").*$"}return new RegExp(t, r?"i":"")}function tt(t){return t.replace(ne, "\\$1")}function et(t){var e, n, a, r, o, i, s, l, u = t.aoColumns, c = qt.ext.type.search, f = !1; for (n = 0, r = t.aoData.length; r > n; n++)if (l = t.aoData[n], !l._aFilterData){for (i = [], a = 0, o = u.length; o > a; a++)e = u[a], e.bSearchable?(s = w(t, n, a, "filter"), c[e.sType] && (s = c[e.sType](s)), null === s && (s = ""), "string" != typeof s && s.toString && (s = s.toString())):s = "", s.indexOf && - 1 !== s.indexOf("&") && (me.innerHTML = s, s = De?me.textContent:me.innerText), s.replace && (s = s.replace(/[\r\n]/g, "")), i.push(s); l._aFilterData = i, l._sFilterRow = i.join(" "), f = !0}return f}function nt(t){return{search:t.sSearch, smart:t.bSmart, regex:t.bRegex, caseInsensitive:t.bCaseInsensitive}}function at(t){return{sSearch:t.search, bSmart:t.smart, bRegex:t.regex, bCaseInsensitive:t.caseInsensitive}}function rt(t){var e = t.sTableId, n = t.aanFeatures.i, r = a("<div/>", {"class":t.oClasses.sInfo, id:n?null:e + "_info"}); return n || (t.aoDrawCallback.push({fn:ot, sName:"information"}), r.attr("role", "status").attr("aria-live", "polite"), a(t.nTable).attr("aria-describedby", e + "_info")), r[0]}function ot(t){var e = t.aanFeatures.i; if (0 !== e.length){var n = t.oLanguage, r = t._iDisplayStart + 1, o = t.fnDisplayEnd(), i = t.fnRecordsTotal(), s = t.fnRecordsDisplay(), l = s?n.sInfo:n.sInfoEmpty; s !== i && (l += " " + n.sInfoFiltered), l += n.sInfoPostFix, l = it(t, l); var u = n.fnInfoCallback; null !== u && (l = u.call(t.oInstance, t, r, o, i, s, l)), a(e).html(l)}}function it(t, e){var n = t.fnFormatNumber, a = t._iDisplayStart + 1, r = t._iDisplayLength, o = t.fnRecordsDisplay(), i = - 1 === r; return e.replace(/_START_/g, n.call(t, a)).replace(/_END_/g, n.call(t, t.fnDisplayEnd())).replace(/_MAX_/g, n.call(t, t.fnRecordsTotal())).replace(/_TOTAL_/g, n.call(t, o)).replace(/_PAGE_/g, n.call(t, i?1:Math.ceil(a / r))).replace(/_PAGES_/g, n.call(t, i?1:Math.ceil(o / r)))}function st(t){var e, n, a, r = t.iInitDisplayStart, o = t.aoColumns, i = t.oFeatures, s = t.bDeferLoading; if (!t.bInitialised)return void setTimeout(function(){st(t)}, 200); for (U(t), k(t), O(t, t.aoHeader), O(t, t.aoFooter), pt(t, !0), i.bAutoWidth && St(t), e = 0, n = o.length; n > e; e++)a = o[e], a.sWidth && (a.nTh.style.width = Tt(a.sWidth)); Wt(t, null, "preInit", [t]), W(t); var l = Bt(t); ("ssp" != l || s) && ("ajax" == l?J(t, [], function(n){var a = G(t, n); for (e = 0; e < a.length; e++)D(t, a[e]); t.iInitDisplayStart = r, W(t), pt(t, !1), lt(t, n)}, t):(pt(t, !1), lt(t)))}function lt(t, e){t._bInitComplete = !0, (e || t.oInit.aaData) && h(t), Wt(t, "aoInitComplete", "init", [t, e])}function ut(t, e){var n = parseInt(e, 10); t._iDisplayLength = n, Ut(t), Wt(t, null, "length", [t, n])}function ct(t){for (var e = t.oClasses, n = t.sTableId, r = t.aLengthMenu, o = a.isArray(r[0]), i = o?r[0]:r, s = o?r[1]:r, l = a("<select/>", {name:n + "_length", "aria-controls":n, "class":e.sLengthSelect}), u = 0, c = i.length; c > u; u++)l[0][u] = new Option(s[u], i[u]); var f = a("<div><label/></div>").addClass(e.sLength); return t.aanFeatures.l || (f[0].id = n + "_length"), f.children().append(t.oLanguage.sLengthMenu.replace("_MENU_", l[0].outerHTML)), a("select", f).val(t._iDisplayLength).bind("change.DT", function(e){ut(t, a(this).val()), M(t)}), a(t.nTable).bind("length.dt.DT", function(e, n, r){t === n && a("select", f).val(r)}), f[0]}function ft(t){var e = t.sPaginationType, n = qt.ext.pager[e], r = "function" == typeof n, o = function(t){M(t)}, i = a("<div/>").addClass(t.oClasses.sPaging + e)[0], s = t.aanFeatures; return r || n.fnInit(t, i, o), s.p || (i.id = t.sTableId + "_paginate", t.aoDrawCallback.push({fn:function(t){if (r){var e, a, i = t._iDisplayStart, l = t._iDisplayLength, u = t.fnRecordsDisplay(), c = - 1 === l, f = c?0:Math.ceil(i / l), d = c?1:Math.ceil(u / l), h = n(f, d); for (e = 0, a = s.p.length; a > e; e++)Et(t, "pageButton")(t, s.p[e], e, h, f, d)} else n.fnUpdate(t, o)}, sName:"pagination"})), i}function dt(t, e, n){var a = t._iDisplayStart, r = t._iDisplayLength, o = t.fnRecordsDisplay(); 0 === o || - 1 === r?a = 0:"number" == typeof e?(a = e * r, a > o && (a = 0)):"first" == e?a = 0:"previous" == e?(a = r >= 0?a - r:0, 0 > a && (a = 0)):"next" == e?o > a + r && (a += r):"last" == e?a = Math.floor((o - 1) / r) * r:Ht(t, 0, "Unknown paging action: " + e, 5); var i = t._iDisplayStart !== a; return t._iDisplayStart = a, i && (Wt(t, null, "page", [t]), n && M(t)), i}function ht(t){return a("<div/>", {id:t.aanFeatures.r?null:t.sTableId + "_processing", "class":t.oClasses.sProcessing}).html(t.oLanguage.sProcessing).insertBefore(t.nTable)[0]}function pt(t, e){t.oFeatures.bProcessing && a(t.aanFeatures.r).css("display", e?"block":"none"), Wt(t, null, "processing", [t, e])}function gt(t){var e = a(t.nTable); e.attr("role", "grid"); var n = t.oScroll; if ("" === n.sX && "" === n.sY)return t.nTable; var r = n.sX, o = n.sY, i = t.oClasses, s = e.children("caption"), l = s.length?s[0]._captionSide:null, u = a(e[0].cloneNode(!1)), c = a(e[0].cloneNode(!1)), f = e.children("tfoot"), d = "<div/>", h = function(t){return t?Tt(t):null}; n.sX && "100%" === e.attr("width") && e.removeAttr("width"), f.length || (f = null); var p = a(d, {"class":i.sScrollWrapper}).append(a(d, {"class":i.sScrollHead}).css({overflow:"hidden", position:"relative", border:0, width:r?h(r):"100%"}).append(a(d, {"class":i.sScrollHeadInner}).css({"box-sizing":"content-box", width:n.sXInner || "100%"}).append(u.removeAttr("id").css("margin-left", 0).append("top" === l?s:null).append(e.children("thead"))))).append(a(d, {"class":i.sScrollBody}).css({position:"relative", overflow:"auto", width:h(r)}).append(e)); f && p.append(a(d, {"class":i.sScrollFoot}).css({overflow:"hidden", border:0, width:r?h(r):"100%"}).append(a(d, {"class":i.sScrollFootInner}).append(c.removeAttr("id").css("margin-left", 0).append("bottom" === l?s:null).append(e.children("tfoot"))))); var g = p.children(), b = g[0], v = g[1], S = f?g[2]:null; return r && a(v).on("scroll.DT", function(t){var e = this.scrollLeft; b.scrollLeft = e, f && (S.scrollLeft = e)}), a(v).css(o && n.bCollapse?"max-height":"height", o), t.nScrollHead = b, t.nScrollBody = v, t.nScrollFoot = S, t.aoDrawCallback.push({fn:bt, sName:"scrolling"}), p[0]}function bt(t){var e, n, r, o, i, s, l, u, c, f = t.oScroll, d = f.sX, h = f.sXInner, g = f.sY, b = f.iBarWidth, v = a(t.nScrollHead), S = v[0].style, m = v.children("div"), D = m[0].style, y = m.children("table"), _ = t.nScrollBody, T = a(_), w = _.style, C = a(t.nScrollFoot), x = C.children("div"), I = x.children("table"), A = a(t.nTHead), F = a(t.nTable), L = F[0], P = L.style, R = t.nTFoot?a(t.nTFoot):null, j = t.oBrowser, H = j.bScrollOversize, N = [], k = [], O = [], M = function(t){var e = t.style; e.paddingTop = "0", e.paddingBottom = "0", e.borderTopWidth = "0", e.borderBottomWidth = "0", e.height = 0}; F.children("thead, tfoot").remove(), i = A.clone().prependTo(F), e = A.find("tr"), r = i.find("tr"), i.find("th, td").removeAttr("tabindex"), R && (s = R.clone().prependTo(F), n = R.find("tr"), o = s.find("tr")), d || (w.width = "100%", v[0].style.width = "100%"), a.each(B(t, i), function(e, n){l = p(t, e), n.style.width = t.aoColumns[l].sWidth}), R && vt(function(t){t.style.width = ""}, o), c = F.outerWidth(), "" === d?(P.width = "100%", H && (F.find("tbody").height() > _.offsetHeight || "scroll" == T.css("overflow-y")) && (P.width = Tt(F.outerWidth() - b)), c = F.outerWidth()):"" !== h && (P.width = Tt(h), c = F.outerWidth()), vt(M, r), vt(function(t){O.push(t.innerHTML), N.push(Tt(a(t).css("width")))}, r), vt(function(t, e){t.style.width = N[e]}, e), a(r).height(0), R && (vt(M, o), vt(function(t){k.push(Tt(a(t).css("width")))}, o), vt(function(t, e){t.style.width = k[e]}, n), a(o).height(0)), vt(function(t, e){t.innerHTML = '<div class="dataTables_sizing" style="height:0;overflow:hidden;">' + O[e] + "</div>", t.style.width = N[e]}, r), R && vt(function(t, e){t.innerHTML = "", t.style.width = k[e]}, o), F.outerWidth() < c?(u = _.scrollHeight > _.offsetHeight || "scroll" == T.css("overflow-y")?c + b:c, H && (_.scrollHeight > _.offsetHeight || "scroll" == T.css("overflow-y")) && (P.width = Tt(u - b)), ("" === d || "" !== h) && Ht(t, 1, "Possible column misalignment", 6)):u = "100%", w.width = Tt(u), S.width = Tt(u), R && (t.nScrollFoot.style.width = Tt(u)), g || H && (w.height = Tt(L.offsetHeight + b)); var W = F.outerWidth(); y[0].style.width = Tt(W), D.width = Tt(W); var U = F.height() > _.clientHeight || "scroll" == T.css("overflow-y"), E = "padding" + (j.bScrollbarLeft?"Left":"Right"); D[E] = U?b + "px":"0px", R && (I[0].style.width = Tt(W), x[0].style.width = Tt(W), x[0].style[E] = U?b + "px":"0px"), T.scroll(), !t.bSorted && !t.bFiltered || t._drawHold || (_.scrollTop = 0)}function vt(t, e, n){for (var a, r, o = 0, i = 0, s = e.length; s > i; ){for (a = e[i].firstChild, r = n?n[i].firstChild:null; a; )1 === a.nodeType && (n?t(a, r, o):t(a, o), o++), a = a.nextSibling, r = n?r.nextSibling:null; i++}}function St(e){var n, r, o, i, s, l = e.nTable, u = e.aoColumns, c = e.oScroll, f = c.sY, d = c.sX, g = c.sXInner, S = u.length, m = v(e, "bVisible"), D = a("th", e.nTHead), y = l.getAttribute("width"), _ = l.parentNode, T = !1, w = e.oBrowser, C = w.bScrollOversize, x = l.style.width; for (x && - 1 !== x.indexOf("%") && (y = x), n = 0; n < m.length; n++)r = u[m[n]], null !== r.sWidth && (r.sWidth = Dt(r.sWidthOrig, _), T = !0); if (C || !T && !d && !f && S == b(e) && S == D.length)for (n = 0; S > n; n++){var I = p(e, n); I && (u[I].sWidth = Tt(D.eq(n).width()))} else{var A = a(l).clone().css("visibility", "hidden").removeAttr("id"); A.find("tbody tr").remove(); var F = a("<tr/>").appendTo(A.find("tbody")); for (A.find("thead, tfoot").remove(), A.append(a(e.nTHead).clone()).append(a(e.nTFoot).clone()), A.find("tfoot th, tfoot td").css("width", ""), D = B(e, A.find("thead")[0]), n = 0; n < m.length; n++)r = u[m[n]], D[n].style.width = null !== r.sWidthOrig && "" !== r.sWidthOrig?Tt(r.sWidthOrig):""; if (e.aoData.length)for (n = 0; n < m.length; n++)o = m[n], r = u[o], a(yt(e, o)).clone(!1).append(r.sContentPadding).appendTo(F); var L = a("<div/>").css(d || f?{position:"absolute", top:0, left:0, height:1, right:0, overflow:"hidden"}:{}).append(A).appendTo(_); if (d && g?A.width(g):d?(A.css("width", "auto"), A.width() < _.clientWidth && A.width(_.clientWidth)):f?A.width(_.clientWidth):y && A.width(y), d){var P = 0; for (n = 0; n < m.length; n++)r = u[m[n]], s = w.bBounding?D[n].getBoundingClientRect().width:a(D[n]).outerWidth(), P += null === r.sWidthOrig?s:parseInt(r.sWidth, 10) + s - a(D[n]).width(); A.width(Tt(P)), l.style.width = Tt(P)}for (n = 0; n < m.length; n++)r = u[m[n]], i = a(D[n]).width(), i && (r.sWidth = Tt(i)); l.style.width = Tt(A.css("width")), L.remove()}if (y && (l.style.width = Tt(y)), (y || d) && !e._reszEvt){var R = function(){a(t).bind("resize.DT-" + e.sInstance, mt(function(){h(e)}))}; C?setTimeout(R, 1e3):R(), e._reszEvt = !0}}function mt(t, e){var a, r, o = e !== n?e:200; return function(){var e = this, i = + new Date, s = arguments; a && a + o > i?(clearTimeout(r), r = setTimeout(function(){a = n, t.apply(e, s)}, o)):(a = i, t.apply(e, s))}}function Dt(t, n){if (!t)return 0; var r = a("<div/>").css("width", Tt(t)).appendTo(n || e.body), o = r[0].offsetWidth; return r.remove(), o}function yt(t, e){var n = _t(t, e); if (0 > n)return null; var r = t.aoData[n]; return r.nTr?r.anCells[e]:a("<td/>").html(w(t, n, e, "display"))[0]}function _t(t, e){for (var n, a = - 1, r = - 1, o = 0, i = t.aoData.length; i > o; o++)n = w(t, o, e, "display") + "", n = n.replace(ye, ""), n.length > a && (a = n.length, r = o); return r}function Tt(t){return null === t?"0px":"number" == typeof t?0 > t?"0px":t + "px":t.match(/\d$/)?t + "px":t}function wt(t){var e, r, o, i, s, l, u, c = [], f = t.aoColumns, d = t.aaSortingFixed, h = a.isPlainObject(d), p = [], g = function(t){t.length && !a.isArray(t[0])?p.push(t):a.merge(p, t)}; for (a.isArray(d) && g(d), h && d.pre && g(d.pre), g(t.aaSorting), h && d.post && g(d.post), e = 0; e < p.length; e++)for (u = p[e][0], i = f[u].aDataSort, r = 0, o = i.length; o > r; r++)s = i[r], l = f[s].sType || "string", p[e]._idx === n && (p[e]._idx = a.inArray(p[e][1], f[s].asSorting)), c.push({src:u, col:s, dir:p[e][1], index:p[e]._idx, type:l, formatter:qt.ext.type.order[l + "-pre"]}); return c}function Ct(t){var e, n, a, r, o, i = [], s = qt.ext.type.order, l = t.aoData, u = (t.aoColumns, 0), c = t.aiDisplayMaster; for (S(t), o = wt(t), e = 0, n = o.length; n > e; e++)r = o[e], r.formatter && u++, Lt(t, r.col); if ("ssp" != Bt(t) && 0 !== o.length){for (e = 0, a = c.length; a > e; e++)i[c[e]] = e; u === o.length?c.sort(function(t, e){var n, a, r, s, u, c = o.length, f = l[t]._aSortData, d = l[e]._aSortData; for (r = 0; c > r; r++)if (u = o[r], n = f[u.col], a = d[u.col], s = a > n? - 1:n > a?1:0, 0 !== s)return"asc" === u.dir?s: - s; return n = i[t], a = i[e], a > n? - 1:n > a?1:0}):c.sort(function(t, e){var n, a, r, u, c, f, d = o.length, h = l[t]._aSortData, p = l[e]._aSortData; for (r = 0; d > r; r++)if (c = o[r], n = h[c.col], a = p[c.col], f = s[c.type + "-" + c.dir] || s["string-" + c.dir], u = f(n, a), 0 !== u)return u; return n = i[t], a = i[e], a > n? - 1:n > a?1:0})}t.bSorted = !0}function xt(t){for (var e, n, a = t.aoColumns, r = wt(t), o = t.oLanguage.oAria, i = 0, s = a.length; s > i; i++){var l = a[i], u = l.asSorting, c = l.sTitle.replace(/<.*?>/g, ""), f = l.nTh;
2
- f.removeAttribute("aria-sort"), l.bSortable?(r.length > 0 && r[0].col == i?(f.setAttribute("aria-sort", "asc" == r[0].dir?"ascending":"descending"), n = u[r[0].index + 1] || u[0]):n = u[0], e = c + ("asc" === n?o.sSortAscending:o.sSortDescending)):e = c, f.setAttribute("aria-label", e)}}function It(t, e, r, o){var i, s = t.aoColumns[e], l = t.aaSorting, u = s.asSorting, c = function(t, e){var r = t._idx; return r === n && (r = a.inArray(t[1], u)), r + 1 < u.length?r + 1:e?null:0}; if ("number" == typeof l[0] && (l = t.aaSorting = [l]), r && t.oFeatures.bSortMulti){var f = a.inArray(e, ce(l, "0")); - 1 !== f?(i = c(l[f], !0), null === i && 1 === l.length && (i = 0), null === i?l.splice(f, 1):(l[f][1] = u[i], l[f]._idx = i)):(l.push([e, u[0], 0]), l[l.length - 1]._idx = 0)} else l.length && l[0][0] == e?(i = c(l[0]), l.length = 1, l[0][1] = u[i], l[0]._idx = i):(l.length = 0, l.push([e, u[0]]), l[0]._idx = 0); W(t), "function" == typeof o && o(t)}function At(t, e, n, a){var r = t.aoColumns[n]; Ot(e, {}, function(e){r.bSortable !== !1 && (t.oFeatures.bProcessing?(pt(t, !0), setTimeout(function(){It(t, n, e.shiftKey, a), "ssp" !== Bt(t) && pt(t, !1)}, 0)):It(t, n, e.shiftKey, a))})}function Ft(t){var e, n, r, o = t.aLastSort, i = t.oClasses.sSortColumn, s = wt(t), l = t.oFeatures; if (l.bSort && l.bSortClasses){for (e = 0, n = o.length; n > e; e++)r = o[e].src, a(ce(t.aoData, "anCells", r)).removeClass(i + (2 > e?e + 1:3)); for (e = 0, n = s.length; n > e; e++)r = s[e].src, a(ce(t.aoData, "anCells", r)).addClass(i + (2 > e?e + 1:3))}t.aLastSort = s}function Lt(t, e){var n, a = t.aoColumns[e], r = qt.ext.order[a.sSortDataType]; r && (n = r.call(t.oInstance, t, e, g(t, e))); for (var o, i, s = qt.ext.type.order[a.sType + "-pre"], l = 0, u = t.aoData.length; u > l; l++)o = t.aoData[l], o._aSortData || (o._aSortData = []), (!o._aSortData[e] || r) && (i = r?n[l]:w(t, l, e, "sort"), o._aSortData[e] = s?s(i):i)}function Pt(t){if (t.oFeatures.bStateSave && !t.bDestroying){var e = {time: + new Date, start:t._iDisplayStart, length:t._iDisplayLength, order:a.extend(!0, [], t.aaSorting), search:nt(t.oPreviousSearch), columns:a.map(t.aoColumns, function(e, n){return{visible:e.bVisible, search:nt(t.aoPreSearchCols[n])}})}; Wt(t, "aoStateSaveParams", "stateSaveParams", [t, e]), t.oSavedState = e, t.fnStateSaveCallback.call(t.oInstance, t, e)}}function Rt(t, e){var r, o, i = t.aoColumns; if (t.oFeatures.bStateSave){var s = t.fnStateLoadCallback.call(t.oInstance, t); if (s && s.time){var l = Wt(t, "aoStateLoadParams", "stateLoadParams", [t, s]); if ( - 1 === a.inArray(!1, l)){var u = t.iStateDuration; if (!(u > 0 && s.time < + new Date - 1e3 * u) && i.length === s.columns.length){for (t.oLoadedState = a.extend(!0, {}, s), s.start !== n && (t._iDisplayStart = s.start, t.iInitDisplayStart = s.start), s.length !== n && (t._iDisplayLength = s.length), s.order !== n && (t.aaSorting = [], a.each(s.order, function(e, n){t.aaSorting.push(n[0] >= i.length?[0, n[1]]:n)})), s.search !== n && a.extend(t.oPreviousSearch, at(s.search)), r = 0, o = s.columns.length; o > r; r++){var c = s.columns[r]; c.visible !== n && (i[r].bVisible = c.visible), c.search !== n && a.extend(t.aoPreSearchCols[r], at(c.search))}Wt(t, "aoStateLoaded", "stateLoaded", [t, s])}}}}}function jt(t){var e = qt.settings, n = a.inArray(t, ce(e, "nTable")); return - 1 !== n?e[n]:null}function Ht(e, n, a, r){if (a = "DataTables warning: " + (e?"table id=" + e.sTableId + " - ":"") + a, r && (a += ". For more information about this error, please see http://datatables.net/tn/" + r), n)t.console && console.log && console.log(a); else{var o = qt.ext, i = o.sErrMode || o.errMode; if (e && Wt(e, null, "error", [e, r, a]), "alert" == i)alert(a); else{if ("throw" == i)throw new Error(a); "function" == typeof i && i(e, r, a)}}}function Nt(t, e, r, o){return a.isArray(r)?void a.each(r, function(n, r){a.isArray(r)?Nt(t, e, r[0], r[1]):Nt(t, e, r)}):(o === n && (o = r), void(e[r] !== n && (t[o] = e[r])))}function kt(t, e, n){var r; for (var o in e)e.hasOwnProperty(o) && (r = e[o], a.isPlainObject(r)?(a.isPlainObject(t[o]) || (t[o] = {}), a.extend(!0, t[o], r)):n && "data" !== o && "aaData" !== o && a.isArray(r)?t[o] = r.slice():t[o] = r); return t}function Ot(t, e, n){a(t).bind("click.DT", e, function(e){t.blur(), n(e)}).bind("keypress.DT", e, function(t){13 === t.which && (t.preventDefault(), n(t))}).bind("selectstart.DT", function(){return!1})}function Mt(t, e, n, a){n && t[e].push({fn:n, sName:a})}function Wt(t, e, n, r){var o = []; if (e && (o = a.map(t[e].slice().reverse(), function(e, n){return e.fn.apply(t.oInstance, r)})), null !== n){var i = a.Event(n + ".dt"); a(t.nTable).trigger(i, r), o.push(i.result)}return o}function Ut(t){var e = t._iDisplayStart, n = t.fnDisplayEnd(), a = t._iDisplayLength; e >= n && (e = n - a), e -= e % a, ( - 1 === a || 0 > e) && (e = 0), t._iDisplayStart = e}function Et(t, e){var n = t.renderer, r = qt.ext.renderer[e]; return a.isPlainObject(n) && n[e]?r[n[e]] || r._:"string" == typeof n?r[n] || r._:r._}function Bt(t){return t.oFeatures.bServerSide?"ssp":t.ajax || t.sAjaxSource?"ajax":"dom"}function Jt(t, e){var n = [], a = Xe.numbers_length, r = Math.floor(a / 2); return a >= e?n = de(0, e):r >= t?(n = de(0, a - 2), n.push("ellipsis"), n.push(e - 1)):t >= e - 1 - r?(n = de(e - (a - 2), e), n.splice(0, 0, "ellipsis"), n.splice(0, 0, 0)):(n = de(t - r + 2, t + r - 1), n.push("ellipsis"), n.push(e - 1), n.splice(0, 0, "ellipsis"), n.splice(0, 0, 0)), n.DT_el = "span", n}function Xt(t){a.each({num:function(e){return Ve(e, t)}, "num-fmt":function(e){return Ve(e, t, ae)}, "html-num":function(e){return Ve(e, t, Kt)}, "html-num-fmt":function(e){return Ve(e, t, Kt, ae)}}, function(e, n){Gt.type.order[e + t + "-pre"] = n, e.match(/^html\-/) && (Gt.type.search[e + t] = Gt.type.search.html)})}function Vt(t){return function(){var e = [jt(this[qt.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments)); return qt.ext.internal[t].apply(this, e)}}var qt, Gt, $t, zt, Yt, Qt = {}, Zt = /[\r\n]/g, Kt = /<.*?>/g, te = /^[\w\+\-]/, ee = /[\w\+\-]$/, ne = new RegExp("(\\" + ["/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^", "-"].join("|\\") + ")", "g"), ae = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi, re = function(t){return t && t !== !0 && "-" !== t?!1:!0}, oe = function(t){var e = parseInt(t, 10); return!isNaN(e) && isFinite(t)?e:null}, ie = function(t, e){return Qt[e] || (Qt[e] = new RegExp(tt(e), "g")), "string" == typeof t && "." !== e?t.replace(/\./g, "").replace(Qt[e], "."):t}, se = function(t, e, n){var a = "string" == typeof t; return re(t)?!0:(e && a && (t = ie(t, e)), n && a && (t = t.replace(ae, "")), !isNaN(parseFloat(t)) && isFinite(t))}, le = function(t){return re(t) || "string" == typeof t}, ue = function(t, e, n){if (re(t))return!0; var a = le(t); return a && se(pe(t), e, n)?!0:null}, ce = function(t, e, a){var r = [], o = 0, i = t.length; if (a !== n)for (; i > o; o++)t[o] && t[o][e] && r.push(t[o][e][a]); else for (; i > o; o++)t[o] && r.push(t[o][e]); return r}, fe = function(t, e, a, r){var o = [], i = 0, s = e.length; if (r !== n)for (; s > i; i++)t[e[i]][a] && o.push(t[e[i]][a][r]); else for (; s > i; i++)o.push(t[e[i]][a]); return o}, de = function(t, e){var a, r = []; e === n?(e = 0, a = t):(a = e, e = t); for (var o = e; a > o; o++)r.push(o); return r}, he = function(t){for (var e = [], n = 0, a = t.length; a > n; n++)t[n] && e.push(t[n]); return e}, pe = function(t){return t.replace(Kt, "")}, ge = function(t){var e, n, a, r = [], o = t.length, i = 0; t:for (n = 0; o > n; n++){for (e = t[n], a = 0; i > a; a++)if (r[a] === e)continue t; r.push(e), i++}return r}, be = function(t, e, a){t[e] !== n && (t[a] = t[e])}, ve = /\[.*?\]$/, Se = /\(\)$/, me = a("<div>")[0], De = me.textContent !== n, ye = /<.*?>/g; qt = function(t){this.$ = function(t, e){return this.api(!0).$(t, e)}, this._ = function(t, e){return this.api(!0).rows(t, e).data()}, this.api = function(t){return new $t(t?jt(this[Gt.iApiIndex]):this)}, this.fnAddData = function(t, e){var r = this.api(!0), o = a.isArray(t) && (a.isArray(t[0]) || a.isPlainObject(t[0]))?r.rows.add(t):r.row.add(t); return(e === n || e) && r.draw(), o.flatten().toArray()}, this.fnAdjustColumnSizing = function(t){var e = this.api(!0).columns.adjust(), a = e.settings()[0], r = a.oScroll; t === n || t?e.draw(!1):("" !== r.sX || "" !== r.sY) && bt(a)}, this.fnClearTable = function(t){var e = this.api(!0).clear(); (t === n || t) && e.draw()}, this.fnClose = function(t){this.api(!0).row(t).child.hide()}, this.fnDeleteRow = function(t, e, a){var r = this.api(!0), o = r.rows(t), i = o.settings()[0], s = i.aoData[o[0][0]]; return o.remove(), e && e.call(this, i, s), (a === n || a) && r.draw(), s}, this.fnDestroy = function(t){this.api(!0).destroy(t)}, this.fnDraw = function(t){this.api(!0).draw(t)}, this.fnFilter = function(t, e, a, r, o, i){var s = this.api(!0); null === e || e === n?s.search(t, a, r, i):s.column(e).search(t, a, r, i), s.draw()}, this.fnGetData = function(t, e){var a = this.api(!0); if (t !== n){var r = t.nodeName?t.nodeName.toLowerCase():""; return e !== n || "td" == r || "th" == r?a.cell(t, e).data():a.row(t).data() || null}return a.data().toArray()}, this.fnGetNodes = function(t){var e = this.api(!0); return t !== n?e.row(t).node():e.rows().nodes().flatten().toArray()}, this.fnGetPosition = function(t){var e = this.api(!0), n = t.nodeName.toUpperCase(); if ("TR" == n)return e.row(t).index(); if ("TD" == n || "TH" == n){var a = e.cell(t).index(); return[a.row, a.columnVisible, a.column]}return null}, this.fnIsOpen = function(t){return this.api(!0).row(t).child.isShown()}, this.fnOpen = function(t, e, n){return this.api(!0).row(t).child(e, n).show().child()[0]}, this.fnPageChange = function(t, e){var a = this.api(!0).page(t); (e === n || e) && a.draw(!1)}, this.fnSetColumnVis = function(t, e, a){var r = this.api(!0).column(t).visible(e); (a === n || a) && r.columns.adjust().draw()}, this.fnSettings = function(){return jt(this[Gt.iApiIndex])}, this.fnSort = function(t){this.api(!0).order(t).draw()}, this.fnSortListener = function(t, e, n){this.api(!0).order.listener(t, e, n)}, this.fnUpdate = function(t, e, a, r, o){var i = this.api(!0); return a === n || null === a?i.row(e).data(t):i.cell(e, a).data(t), (o === n || o) && i.columns.adjust(), (r === n || r) && i.draw(), 0}, this.fnVersionCheck = Gt.fnVersionCheck; var e = this, r = t === n, c = this.length; r && (t = {}), this.oApi = this.internal = Gt.internal; for (var h in qt.ext.internal)h && (this[h] = Vt(h)); return this.each(function(){var h, p = {}, g = c > 1?kt(p, t, !0):t, b = 0, v = this.getAttribute("id"), S = !1, _ = qt.defaults, T = a(this); if ("table" != this.nodeName.toLowerCase())return void Ht(null, 0, "Non-table node initialisation (" + this.nodeName + ")", 2); s(_), l(_.column), o(_, _, !0), o(_.column, _.column, !0), o(_, a.extend(g, T.data())); var w = qt.settings; for (b = 0, h = w.length; h > b; b++){var C = w[b]; if (C.nTable == this || C.nTHead.parentNode == this || C.nTFoot && C.nTFoot.parentNode == this){var x = g.bRetrieve !== n?g.bRetrieve:_.bRetrieve, A = g.bDestroy !== n?g.bDestroy:_.bDestroy; if (r || x)return C.oInstance; if (A){C.oInstance.fnDestroy(); break}return void Ht(C, 0, "Cannot reinitialise DataTable", 3)}if (C.sTableId == this.id){w.splice(b, 1); break}}(null === v || "" === v) && (v = "DataTables_Table_" + qt.ext._unique++, this.id = v); var F = a.extend(!0, {}, qt.models.oSettings, {sDestroyWidth:T[0].style.width, sInstance:v, sTableId:v}); F.nTable = this, F.oApi = e.internal, F.oInit = g, w.push(F), F.oInstance = 1 === e.length?e:T.dataTable(), s(g), g.oLanguage && i(g.oLanguage), g.aLengthMenu && !g.iDisplayLength && (g.iDisplayLength = a.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]), g = kt(a.extend(!0, {}, _), g), Nt(F.oFeatures, g, ["bPaginate", "bLengthChange", "bFilter", "bSort", "bSortMulti", "bInfo", "bProcessing", "bAutoWidth", "bSortClasses", "bServerSide", "bDeferRender"]), Nt(F, g, ["asStripeClasses", "ajax", "fnServerData", "fnFormatNumber", "sServerMethod", "aaSorting", "aaSortingFixed", "aLengthMenu", "sPaginationType", "sAjaxSource", "sAjaxDataProp", "iStateDuration", "sDom", "bSortCellsTop", "iTabIndex", "fnStateLoadCallback", "fnStateSaveCallback", "renderer", "searchDelay", "rowId", ["iCookieDuration", "iStateDuration"], ["oSearch", "oPreviousSearch"], ["aoSearchCols", "aoPreSearchCols"], ["iDisplayLength", "_iDisplayLength"], ["bJQueryUI", "bJUI"]]), Nt(F.oScroll, g, [["sScrollX", "sX"], ["sScrollXInner", "sXInner"], ["sScrollY", "sY"], ["bScrollCollapse", "bCollapse"]]), Nt(F.oLanguage, g, "fnInfoCallback"), Mt(F, "aoDrawCallback", g.fnDrawCallback, "user"), Mt(F, "aoServerParams", g.fnServerParams, "user"), Mt(F, "aoStateSaveParams", g.fnStateSaveParams, "user"), Mt(F, "aoStateLoadParams", g.fnStateLoadParams, "user"), Mt(F, "aoStateLoaded", g.fnStateLoaded, "user"), Mt(F, "aoRowCallback", g.fnRowCallback, "user"), Mt(F, "aoRowCreatedCallback", g.fnCreatedRow, "user"), Mt(F, "aoHeaderCallback", g.fnHeaderCallback, "user"), Mt(F, "aoFooterCallback", g.fnFooterCallback, "user"), Mt(F, "aoInitComplete", g.fnInitComplete, "user"), Mt(F, "aoPreDrawCallback", g.fnPreDrawCallback, "user"), F.rowIdFn = I(g.rowId), u(F); var L = F.oClasses; if (g.bJQueryUI?(a.extend(L, qt.ext.oJUIClasses, g.oClasses), g.sDom === _.sDom && "lfrtip" === _.sDom && (F.sDom = '<"H"lfr>t<"F"ip>'), F.renderer?a.isPlainObject(F.renderer) && !F.renderer.header && (F.renderer.header = "jqueryui"):F.renderer = "jqueryui"):a.extend(L, qt.ext.classes, g.oClasses), T.addClass(L.sTable), F.iInitDisplayStart === n && (F.iInitDisplayStart = g.iDisplayStart, F._iDisplayStart = g.iDisplayStart), null !== g.iDeferLoading){F.bDeferLoading = !0; var P = a.isArray(g.iDeferLoading); F._iRecordsDisplay = P?g.iDeferLoading[0]:g.iDeferLoading, F._iRecordsTotal = P?g.iDeferLoading[1]:g.iDeferLoading}var R = F.oLanguage; a.extend(!0, R, g.oLanguage), "" !== R.sUrl && (a.ajax({dataType:"json", url:R.sUrl, success:function(t){i(t), o(_.oLanguage, t), a.extend(!0, R, t), st(F)}, error:function(){st(F)}}), S = !0), null === g.asStripeClasses && (F.asStripeClasses = [L.sStripeOdd, L.sStripeEven]); var j = F.asStripeClasses, H = T.children("tbody").find("tr").eq(0); - 1 !== a.inArray(!0, a.map(j, function(t, e){return H.hasClass(t)})) && (a("tbody tr", this).removeClass(j.join(" ")), F.asDestroyStripes = j.slice()); var N, k = [], O = this.getElementsByTagName("thead"); if (0 !== O.length && (E(F.aoHeader, O[0]), k = B(F)), null === g.aoColumns)for (N = [], b = 0, h = k.length; h > b; b++)N.push(null); else N = g.aoColumns; for (b = 0, h = N.length; h > b; b++)f(F, k?k[b]:null); if (m(F, g.aoColumnDefs, N, function(t, e){d(F, t, e)}), H.length){var M = function(t, e){return null !== t.getAttribute("data-" + e)?e:null}; a(H[0]).children("th, td").each(function(t, e){var a = F.aoColumns[t]; if (a.mData === t){var r = M(e, "sort") || M(e, "order"), o = M(e, "filter") || M(e, "search"); (null !== r || null !== o) && (a.mData = {_:t + ".display", sort:null !== r?t + ".@data-" + r:n, type:null !== r?t + ".@data-" + r:n, filter:null !== o?t + ".@data-" + o:n}, d(F, t))}})}var W = F.oFeatures; if (g.bStateSave && (W.bStateSave = !0, Rt(F, g), Mt(F, "aoDrawCallback", Pt, "state_save")), g.aaSorting === n){var U = F.aaSorting; for (b = 0, h = U.length; h > b; b++)U[b][1] = F.aoColumns[b].asSorting[0]}Ft(F), W.bSort && Mt(F, "aoDrawCallback", function(){if (F.bSorted){var t = wt(F), e = {}; a.each(t, function(t, n){e[n.src] = n.dir}), Wt(F, null, "order", [F, t, e]), xt(F)}}), Mt(F, "aoDrawCallback", function(){(F.bSorted || "ssp" === Bt(F) || W.bDeferRender) && Ft(F)}, "sc"); var J = T.children("caption").each(function(){this._captionSide = T.css("caption-side")}), X = T.children("thead"); 0 === X.length && (X = a("<thead/>").appendTo(this)), F.nTHead = X[0]; var V = T.children("tbody"); 0 === V.length && (V = a("<tbody/>").appendTo(this)), F.nTBody = V[0]; var q = T.children("tfoot"); if (0 === q.length && J.length > 0 && ("" !== F.oScroll.sX || "" !== F.oScroll.sY) && (q = a("<tfoot/>").appendTo(this)), 0 === q.length || 0 === q.children().length?T.addClass(L.sNoFooter):q.length > 0 && (F.nTFoot = q[0], E(F.aoFooter, F.nTFoot)), g.aaData)for (b = 0; b < g.aaData.length; b++)D(F, g.aaData[b]); else(F.bDeferLoading || "dom" == Bt(F)) && y(F, a(F.nTBody).children("tr")); F.aiDisplay = F.aiDisplayMaster.slice(), F.bInitialised = !0, S === !1 && st(F)}), e = null, this}; var _e = [], Te = Array.prototype, we = function(t){var e, n, r = qt.settings, o = a.map(r, function(t, e){return t.nTable}); return t?t.nTable && t.oApi?[t]:t.nodeName && "table" === t.nodeName.toLowerCase()?(e = a.inArray(t, o), - 1 !== e?[r[e]]:null):t && "function" == typeof t.settings?t.settings().toArray():("string" == typeof t?n = a(t):t instanceof a && (n = t), n?n.map(function(t){return e = a.inArray(this, o), - 1 !== e?r[e]:null}).toArray():void 0):[]}; $t = function(t, e){if (!(this instanceof $t))return new $t(t, e); var n = [], r = function(t){var e = we(t); e && (n = n.concat(e))}; if (a.isArray(t))for (var o = 0, i = t.length; i > o; o++)r(t[o]); else r(t); this.context = ge(n), e && a.merge(this, e), this.selector = {rows:null, cols:null, opts:null}, $t.extend(this, this, _e)}, qt.Api = $t, a.extend($t.prototype, {any:function(){return 0 !== this.count()}, concat:Te.concat, context:[], count:function(){return this.flatten().length}, each:function(t){for (var e = 0, n = this.length; n > e; e++)t.call(this, this[e], e, this); return this}, eq:function(t){var e = this.context; return e.length > t?new $t(e[t], this[t]):null}, filter:function(t){var e = []; if (Te.filter)e = Te.filter.call(this, t, this); else for (var n = 0, a = this.length; a > n; n++)t.call(this, this[n], n, this) && e.push(this[n]); return new $t(this.context, e)}, flatten:function(){var t = []; return new $t(this.context, t.concat.apply(t, this.toArray()))}, join:Te.join, indexOf:Te.indexOf || function(t, e){for (var n = e || 0, a = this.length; a > n; n++)if (this[n] === t)return n; return - 1}, iterator:function(t, e, a, r){var o, i, s, l, u, c, f, d, h = [], p = this.context, g = this.selector; for ("string" == typeof t && (r = a, a = e, e = t, t = !1), i = 0, s = p.length; s > i; i++){var b = new $t(p[i]); if ("table" === e)o = a.call(b, p[i], i), o !== n && h.push(o); else if ("columns" === e || "rows" === e)o = a.call(b, p[i], this[i], i), o !== n && h.push(o); else if ("column" === e || "column-rows" === e || "row" === e || "cell" === e)for (f = this[i], "column-rows" === e && (c = Le(p[i], g.opts)), l = 0, u = f.length; u > l; l++)d = f[l], o = "cell" === e?a.call(b, p[i], d.row, d.column, i, l):a.call(b, p[i], d, i, l, c), o !== n && h.push(o)}if (h.length || r){var v = new $t(p, t?h.concat.apply([], h):h), S = v.selector; return S.rows = g.rows, S.cols = g.cols, S.opts = g.opts, v}return this}, lastIndexOf:Te.lastIndexOf || function(t, e){return this.indexOf.apply(this.toArray.reverse(), arguments)}, length:0, map:function(t){var e = []; if (Te.map)e = Te.map.call(this, t, this); else for (var n = 0, a = this.length; a > n; n++)e.push(t.call(this, this[n], n)); return new $t(this.context, e)}, pluck:function(t){return this.map(function(e){return e[t]})}, pop:Te.pop, push:Te.push, reduce:Te.reduce || function(t, e){return c(this, t, e, 0, this.length, 1)}, reduceRight:Te.reduceRight || function(t, e){return c(this, t, e, this.length - 1, - 1, - 1)}, reverse:Te.reverse, selector:null, shift:Te.shift, sort:Te.sort, splice:Te.splice, toArray:function(){return Te.slice.call(this)}, to$:function(){return a(this)}, toJQuery:function(){return a(this)}, unique:function(){return new $t(this.context, ge(this))}, unshift:Te.unshift}), $t.extend = function(t, e, n){if (n.length && e && (e instanceof $t || e.__dt_wrapper)){var r, o, i, s = function(t, e, n){return function(){var a = e.apply(t, arguments); return $t.extend(a, a, n.methodExt), a}}; for (r = 0, o = n.length; o > r; r++)i = n[r], e[i.name] = "function" == typeof i.val?s(t, i.val, i):a.isPlainObject(i.val)?{}:i.val, e[i.name].__dt_wrapper = !0, $t.extend(t, e[i.name], i.propExt)}}, $t.register = zt = function(t, e){if (a.isArray(t))for (var n = 0, r = t.length; r > n; n++)$t.register(t[n], e); else{var o, i, s, l, u = t.split("."), c = _e, f = function(t, e){for (var n = 0, a = t.length; a > n; n++)if (t[n].name === e)return t[n]; return null}; for (o = 0, i = u.length; i > o; o++){l = - 1 !== u[o].indexOf("()"), s = l?u[o].replace("()", ""):u[o]; var d = f(c, s); d || (d = {name:s, val:{}, methodExt:[], propExt:[]}, c.push(d)), o === i - 1?d.val = e:c = l?d.methodExt:d.propExt}}}, $t.registerPlural = Yt = function(t, e, r){$t.register(t, r), $t.register(e, function(){var t = r.apply(this, arguments); return t === this?this:t instanceof $t?t.length?a.isArray(t[0])?new $t(t.context, t[0]):t[0]:n:t})}; var Ce = function(t, e){if ("number" == typeof t)return[e[t]]; var n = a.map(e, function(t, e){return t.nTable}); return a(n).filter(t).map(function(t){var r = a.inArray(this, n); return e[r]}).toArray()}; zt("tables()", function(t){return t?new $t(Ce(t, this.context)):this}), zt("table()", function(t){var e = this.tables(t), n = e.context; return n.length?new $t(n[0]):e}), Yt("tables().nodes()", "table().node()", function(){return this.iterator("table", function(t){return t.nTable}, 1)}), Yt("tables().body()", "table().body()", function(){return this.iterator("table", function(t){return t.nTBody}, 1)}), Yt("tables().header()", "table().header()", function(){return this.iterator("table", function(t){return t.nTHead}, 1)}), Yt("tables().footer()", "table().footer()", function(){return this.iterator("table", function(t){return t.nTFoot}, 1)}), Yt("tables().containers()", "table().container()", function(){return this.iterator("table", function(t){return t.nTableWrapper}, 1)}), zt("draw()", function(t){return this.iterator("table", function(e){"page" === t?M(e):("string" == typeof t && (t = "full-hold" === t?!1:!0), W(e, t === !1))})}), zt("page()", function(t){return t === n?this.page.info().page:this.iterator("table", function(e){dt(e, t)})}), zt("page.info()", function(t){if (0 === this.context.length)return n; var e = this.context[0], a = e._iDisplayStart, r = e._iDisplayLength, o = e.fnRecordsDisplay(), i = - 1 === r; return{page:i?0:Math.floor(a / r), pages:i?1:Math.ceil(o / r), start:a, end:e.fnDisplayEnd(), length:r, recordsTotal:e.fnRecordsTotal(), recordsDisplay:o, serverSide:"ssp" === Bt(e)}}), zt("page.len()", function(t){return t === n?0 !== this.context.length?this.context[0]._iDisplayLength:n:this.iterator("table", function(e){ut(e, t)})}); var xe = function(t, e, n){if (n){var a = new $t(t); a.one("draw", function(){n(a.ajax.json())})}if ("ssp" == Bt(t))W(t, e); else{pt(t, !0); var r = t.jqXHR; r && 4 !== r.readyState && r.abort(), J(t, [], function(n){L(t); for (var a = G(t, n), r = 0, o = a.length; o > r; r++)D(t, a[r]); W(t, e), pt(t, !1)})}}; zt("ajax.json()", function(){var t = this.context; return t.length > 0?t[0].json:void 0}), zt("ajax.params()", function(){var t = this.context; return t.length > 0?t[0].oAjaxData:void 0}), zt("ajax.reload()", function(t, e){return this.iterator("table", function(n){xe(n, e === !1, t)})}), zt("ajax.url()", function(t){var e = this.context; return t === n?0 === e.length?n:(e = e[0], e.ajax?a.isPlainObject(e.ajax)?e.ajax.url:e.ajax:e.sAjaxSource):this.iterator("table", function(e){a.isPlainObject(e.ajax)?e.ajax.url = t:e.ajax = t})}), zt("ajax.url().load()", function(t, e){return this.iterator("table", function(n){xe(n, e === !1, t)})}); var Ie = function(t, e, r, o, i){var s, l, u, c, f, d, h = [], p = typeof e; for (e && "string" !== p && "function" !== p && e.length !== n || (e = [e]), u = 0, c = e.length; c > u; u++)for (l = e[u] && e[u].split?e[u].split(","):[e[u]], f = 0, d = l.length; d > f; f++)s = r("string" == typeof l[f]?a.trim(l[f]):l[f]), s && s.length && (h = h.concat(s)); var g = Gt.selector[t]; if (g.length)for (u = 0, c = g.length; c > u; u++)h = g[u](o, i, h); return ge(h)}, Ae = function(t){return t || (t = {}), t.filter && t.search === n && (t.search = t.filter), a.extend({search:"none", order:"current", page:"all"}, t)}, Fe = function(t){for (var e = 0, n = t.length; n > e; e++)if (t[e].length > 0)return t[0] = t[e], t[0].length = 1, t.length = 1, t.context = [t.context[e]], t; return t.length = 0, t}, Le = function(t, e){var n, r, o, i = [], s = t.aiDisplay, l = t.aiDisplayMaster, u = e.search, c = e.order, f = e.page; if ("ssp" == Bt(t))return"removed" === u?[]:de(0, l.length); if ("current" == f)for (n = t._iDisplayStart, r = t.fnDisplayEnd(); r > n; n++)i.push(s[n]); else if ("current" == c || "applied" == c)i = "none" == u?l.slice():"applied" == u?s.slice():a.map(l, function(t, e){return - 1 === a.inArray(t, s)?t:null}); else if ("index" == c || "original" == c)for (n = 0, r = t.aoData.length; r > n; n++)"none" == u?i.push(n):(o = a.inArray(n, s), ( - 1 === o && "removed" == u || o >= 0 && "applied" == u) && i.push(n)); return i}, Pe = function(t, e, r){var o = function(e){var o = oe(e); if (null !== o && !r)return[o]; var i = Le(t, r); if (null !== o && - 1 !== a.inArray(o, i))return[o]; if (!e)return i; if ("function" == typeof e)return a.map(i, function(n){var a = t.aoData[n]; return e(n, a._aData, a.nTr)?n:null}); var s = he(fe(t.aoData, i, "nTr")); if (e.nodeName && - 1 !== a.inArray(e, s))return[e._DT_RowIndex]; if ("string" == typeof e && "#" === e.charAt(0)){var l = t.aIds[e.replace(/^#/, "")]; if (l !== n)return[l.idx]}return a(s).filter(e).map(function(){return this._DT_RowIndex}).toArray()}; return Ie("row", e, o, t, r)}; zt("rows()", function(t, e){t === n?t = "":a.isPlainObject(t) && (e = t, t = ""), e = Ae(e); var r = this.iterator("table", function(n){return Pe(n, t, e)}, 1); return r.selector.rows = t, r.selector.opts = e, r}), zt("rows().nodes()", function(){return this.iterator("row", function(t, e){return t.aoData[e].nTr || n}, 1)}), zt("rows().data()", function(){return this.iterator(!0, "rows", function(t, e){return fe(t.aoData, e, "_aData")}, 1)}), Yt("rows().cache()", "row().cache()", function(t){return this.iterator("row", function(e, n){var a = e.aoData[n]; return"search" === t?a._aFilterData:a._aSortData}, 1)}), Yt("rows().invalidate()", "row().invalidate()", function(t){return this.iterator("row", function(e, n){R(e, n, t)})}), Yt("rows().indexes()", "row().index()", function(){return this.iterator("row", function(t, e){return e}, 1)}), Yt("rows().ids()", "row().id()", function(t){for (var e = [], n = this.context, a = 0, r = n.length; r > a; a++)for (var o = 0, i = this[a].length; i > o; o++){var s = n[a].rowIdFn(n[a].aoData[this[a][o]]._aData); e.push((t === !0?"#":"") + s)}return new $t(n, e)}), Yt("rows().remove()", "row().remove()", function(){var t = this; return this.iterator("row", function(e, a, r){var o = e.aoData, i = o[a]; o.splice(a, 1); for (var s = 0, l = o.length; l > s; s++)null !== o[s].nTr && (o[s].nTr._DT_RowIndex = s); P(e.aiDisplayMaster, a), P(e.aiDisplay, a), P(t[r], a, !1), Ut(e); var u = e.rowIdFn(i._aData); u !== n && delete e.aIds[u]}), this.iterator("table", function(t){for (var e = 0, n = t.aoData.length; n > e; e++)t.aoData[e].idx = e}), this}), zt("rows.add()", function(t){var e = this.iterator("table", function(e){var n, a, r, o = []; for (a = 0, r = t.length; r > a; a++)n = t[a], n.nodeName && "TR" === n.nodeName.toUpperCase()?o.push(y(e, n)[0]):o.push(D(e, n)); return o}, 1), n = this.rows( - 1); return n.pop(), a.merge(n, e), n}), zt("row()", function(t, e){return Fe(this.rows(t, e))}), zt("row().data()", function(t){var e = this.context; return t === n?e.length && this.length?e[0].aoData[this[0]]._aData:n:(e[0].aoData[this[0]]._aData = t, R(e[0], this[0], "data"), this)}), zt("row().node()", function(){var t = this.context; return t.length && this.length?t[0].aoData[this[0]].nTr || null:null}), zt("row.add()", function(t){t instanceof a && t.length && (t = t[0]); var e = this.iterator("table", function(e){return t.nodeName && "TR" === t.nodeName.toUpperCase()?y(e, t)[0]:D(e, t)}); return this.row(e[0])}); var Re = function(t, e, n, r){var o = [], i = function(e, n){if (a.isArray(e) || e instanceof a)for (var r = 0, s = e.length; s > r; r++)i(e[r], n); else if (e.nodeName && "tr" === e.nodeName.toLowerCase())o.push(e); else{var l = a("<tr><td/></tr>").addClass(n); a("td", l).addClass(n).html(e)[0].colSpan = b(t), o.push(l[0])}}; i(n, r), e._details && e._details.remove(), e._details = a(o), e._detailsShow && e._details.insertAfter(e.nTr)}, je = function(t, e){var a = t.context; if (a.length){var r = a[0].aoData[e !== n?e:t[0]]; r && r._details && (r._details.remove(), r._detailsShow = n, r._details = n)}}, He = function(t, e){var n = t.context; if (n.length && t.length){var a = n[0].aoData[t[0]]; a._details && (a._detailsShow = e, e?a._details.insertAfter(a.nTr):a._details.detach(), Ne(n[0]))}}, Ne = function(t){var e = new $t(t), n = ".dt.DT_details", a = "draw" + n, r = "column-visibility" + n, o = "destroy" + n, i = t.aoData; e.off(a + " " + r + " " + o), ce(i, "_details").length > 0 && (e.on(a, function(n, a){t === a && e.rows({page:"current"}).eq(0).each(function(t){var e = i[t]; e._detailsShow && e._details.insertAfter(e.nTr)})}), e.on(r, function(e, n, a, r){if (t === n)for (var o, s = b(n), l = 0, u = i.length; u > l; l++)o = i[l], o._details && o._details.children("td[colspan]").attr("colspan", s)}), e.on(o, function(n, a){if (t === a)for (var r = 0, o = i.length; o > r; r++)i[r]._details && je(e, r)}))}, ke = "", Oe = ke + "row().child", Me = Oe + "()"; zt(Me, function(t, e){var a = this.context; return t === n?a.length && this.length?a[0].aoData[this[0]]._details:n:(t === !0?this.child.show():t === !1?je(this):a.length && this.length && Re(a[0], a[0].aoData[this[0]], t, e), this)}), zt([Oe + ".show()", Me + ".show()"], function(t){return He(this, !0), this}), zt([Oe + ".hide()", Me + ".hide()"], function(){return He(this, !1), this}), zt([Oe + ".remove()", Me + ".remove()"], function(){return je(this), this}), zt(Oe + ".isShown()", function(){var t = this.context; return t.length && this.length?t[0].aoData[this[0]]._detailsShow || !1:!1}); var We = /^(.+):(name|visIdx|visible)$/, Ue = function(t, e, n, a, r){for (var o = [], i = 0, s = r.length; s > i; i++)o.push(w(t, r[i], e)); return o}, Ee = function(t, e, n){var r = t.aoColumns, o = ce(r, "sName"), i = ce(r, "nTh"), s = function(e){var s = oe(e); if ("" === e)return de(r.length); if (null !== s)return[s >= 0?s:r.length + s]; if ("function" == typeof e){var l = Le(t, n); return a.map(r, function(n, a){return e(a, Ue(t, a, 0, 0, l), i[a])?a:null})}var u = "string" == typeof e?e.match(We):""; if (!u)return a(i).filter(e).map(function(){return a.inArray(this, i)}).toArray(); switch (u[2]){case"visIdx":case"visible":var c = parseInt(u[1], 10); if (0 > c){var f = a.map(r, function(t, e){return t.bVisible?e:null}); return[f[f.length + c]]}return[p(t, c)]; case"name":return a.map(o, function(t, e){return t === u[1]?e:null})}}; return Ie("column", e, s, t, n)}, Be = function(t, e, r, o){var i, s, l, u, c = t.aoColumns, f = c[e], d = t.aoData; if (r === n)return f.bVisible; if (f.bVisible !== r){if (r){var p = a.inArray(!0, ce(c, "bVisible"), e + 1); for (s = 0, l = d.length; l > s; s++)u = d[s].nTr, i = d[s].anCells, u && u.insertBefore(i[e], i[p] || null)} else a(ce(t.aoData, "anCells", e)).detach(); f.bVisible = r, O(t, t.aoHeader), O(t, t.aoFooter), (o === n || o) && (h(t), (t.oScroll.sX || t.oScroll.sY) && bt(t)), Wt(t, null, "column-visibility", [t, e, r]), Pt(t)}}; zt("columns()", function(t, e){t === n?t = "":a.isPlainObject(t) && (e = t, t = ""), e = Ae(e); var r = this.iterator("table", function(n){return Ee(n, t, e)}, 1); return r.selector.cols = t, r.selector.opts = e, r}), Yt("columns().header()", "column().header()", function(t, e){return this.iterator("column", function(t, e){return t.aoColumns[e].nTh}, 1)}), Yt("columns().footer()", "column().footer()", function(t, e){return this.iterator("column", function(t, e){return t.aoColumns[e].nTf}, 1)}), Yt("columns().data()", "column().data()", function(){return this.iterator("column-rows", Ue, 1)}), Yt("columns().dataSrc()", "column().dataSrc()", function(){return this.iterator("column", function(t, e){return t.aoColumns[e].mData}, 1)}), Yt("columns().cache()", "column().cache()", function(t){return this.iterator("column-rows", function(e, n, a, r, o){return fe(e.aoData, o, "search" === t?"_aFilterData":"_aSortData", n)}, 1)}), Yt("columns().nodes()", "column().nodes()", function(){return this.iterator("column-rows", function(t, e, n, a, r){return fe(t.aoData, r, "anCells", e)}, 1)}), Yt("columns().visible()", "column().visible()", function(t, e){return this.iterator("column", function(a, r){return t === n?a.aoColumns[r].bVisible:void Be(a, r, t, e)})}), Yt("columns().indexes()", "column().index()", function(t){return this.iterator("column", function(e, n){return"visible" === t?g(e, n):n}, 1)}), zt("columns.adjust()", function(){return this.iterator("table", function(t){h(t)}, 1)}), zt("column.index()", function(t, e){if (0 !== this.context.length){var n = this.context[0]; if ("fromVisible" === t || "toData" === t)return p(n, e); if ("fromData" === t || "toVisible" === t)return g(n, e)}}), zt("column()", function(t, e){return Fe(this.columns(t, e))}); var Je = function(t, e, r){var o, i, s, l, u, c, f, d = t.aoData, h = Le(t, r), p = he(fe(d, h, "anCells")), g = a([].concat.apply([], p)), b = t.aoColumns.length, v = function(e){var r = "function" == typeof e; if (null === e || e === n || r){for (i = [], s = 0, l = h.length; l > s; s++)for (o = h[s], u = 0; b > u; u++)c = {row:o, column:u}, r?(f = d[o], e(c, w(t, o, u), f.anCells?f.anCells[u]:null) && i.push(c)):i.push(c); return i}return a.isPlainObject(e)?[e]:g.filter(e).map(function(t, e){if (e.parentNode)o = e.parentNode._DT_RowIndex; else for (t = 0, l = d.length; l > t; t++)if ( - 1 !== a.inArray(e, d[t].anCells)){o = t; break}return{row:o, column:a.inArray(e, d[o].anCells)}}).toArray()}; return Ie("cell", e, v, t, r)}; zt("cells()", function(t, e, r){if (a.isPlainObject(t) && (t.row === n?(r = t, t = null):(r = e, e = null)), a.isPlainObject(e) && (r = e, e = null), null === e || e === n)return this.iterator("table", function(e){return Je(e, t, Ae(r))}); var o, i, s, l, u, c = this.columns(e, r), f = this.rows(t, r), d = this.iterator("table", function(t, e){for (o = [], i = 0, s = f[e].length; s > i; i++)for (l = 0, u = c[e].length; u > l; l++)o.push({row:f[e][i], column:c[e][l]}); return o}, 1); return a.extend(d.selector, {cols:e, rows:t, opts:r}), d}), Yt("cells().nodes()", "cell().node()", function(){return this.iterator("cell", function(t, e, a){var r = t.aoData[e].anCells; return r?r[a]:n}, 1)}), zt("cells().data()", function(){return this.iterator("cell", function(t, e, n){return w(t, e, n)}, 1)}), Yt("cells().cache()", "cell().cache()", function(t){return t = "search" === t?"_aFilterData":"_aSortData", this.iterator("cell", function(e, n, a){return e.aoData[n][t][a]}, 1)}), Yt("cells().render()", "cell().render()", function(t){return this.iterator("cell", function(e, n, a){return w(e, n, a, t)}, 1)}), Yt("cells().indexes()", "cell().index()", function(){return this.iterator("cell", function(t, e, n){return{row:e, column:n, columnVisible:g(t, n)}}, 1)}), Yt("cells().invalidate()", "cell().invalidate()", function(t){return this.iterator("cell", function(e, n, a){R(e, n, t, a)})}), zt("cell()", function(t, e, n){return Fe(this.cells(t, e, n))}), zt("cell().data()", function(t){var e = this.context, a = this[0]; return t === n?e.length && a.length?w(e[0], a[0].row, a[0].column):n:(C(e[0], a[0].row, a[0].column, t), R(e[0], a[0].row, "data", a[0].column), this)}), zt("order()", function(t, e){var r = this.context; return t === n?0 !== r.length?r[0].aaSorting:n:("number" == typeof t?t = [[t, e]]:a.isArray(t[0]) || (t = Array.prototype.slice.call(arguments)), this.iterator("table", function(e){e.aaSorting = t.slice()}))}), zt("order.listener()", function(t, e, n){return this.iterator("table", function(a){
3
  At(a, t, e, n)})}), zt(["columns().order()", "column().order()"], function(t){var e = this; return this.iterator("table", function(n, r){var o = []; a.each(e[r], function(e, n){o.push([n, t])}), n.aaSorting = o})}), zt("search()", function(t, e, r, o){var i = this.context; return t === n?0 !== i.length?i[0].oPreviousSearch.sSearch:n:this.iterator("table", function(n){n.oFeatures.bFilter && z(n, a.extend({}, n.oPreviousSearch, {sSearch:t + "", bRegex:null === e?!1:e, bSmart:null === r?!0:r, bCaseInsensitive:null === o?!0:o}), 1)})}), Yt("columns().search()", "column().search()", function(t, e, r, o){return this.iterator("column", function(i, s){var l = i.aoPreSearchCols; return t === n?l[s].sSearch:void(i.oFeatures.bFilter && (a.extend(l[s], {sSearch:t + "", bRegex:null === e?!1:e, bSmart:null === r?!0:r, bCaseInsensitive:null === o?!0:o}), z(i, i.oPreviousSearch, 1)))})}), zt("state()", function(){return this.context.length?this.context[0].oSavedState:null}), zt("state.clear()", function(){return this.iterator("table", function(t){t.fnStateSaveCallback.call(t.oInstance, t, {})})}), zt("state.loaded()", function(){return this.context.length?this.context[0].oLoadedState:null}), zt("state.save()", function(){return this.iterator("table", function(t){Pt(t)})}), qt.versionCheck = qt.fnVersionCheck = function(t){for (var e, n, a = qt.version.split("."), r = t.split("."), o = 0, i = r.length; i > o; o++)if (e = parseInt(a[o], 10) || 0, n = parseInt(r[o], 10) || 0, e !== n)return e > n; return!0}, qt.isDataTable = qt.fnIsDataTable = function(t){var e = a(t).get(0), n = !1; return a.each(qt.settings, function(t, r){var o = r.nScrollHead?a("table", r.nScrollHead)[0]:null, i = r.nScrollFoot?a("table", r.nScrollFoot)[0]:null; (r.nTable === e || o === e || i === e) && (n = !0)}), n}, qt.tables = qt.fnTables = function(t){var e = !1; a.isPlainObject(t) && (e = t.api, t = t.visible); var n = a.map(qt.settings, function(e){return!t || t && a(e.nTable).is(":visible")?e.nTable:void 0}); return e?new $t(n):n}, qt.util = {throttle:mt, escapeRegex:tt}, qt.camelToHungarian = o, zt("$()", function(t, e){var n = this.rows(e).nodes(), r = a(n); return a([].concat(r.filter(t).toArray(), r.find(t).toArray()))}), a.each(["on", "one", "off"], function(t, e){zt(e + "()", function(){var t = Array.prototype.slice.call(arguments); t[0].match(/\.dt\b/) || (t[0] += ".dt"); var n = a(this.tables().nodes()); return n[e].apply(n, t), this})}), zt("clear()", function(){return this.iterator("table", function(t){L(t)})}), zt("settings()", function(){return new $t(this.context, this.context)}), zt("init()", function(){var t = this.context; return t.length?t[0].oInit:null}), zt("data()", function(){return this.iterator("table", function(t){return ce(t.aoData, "_aData")}).flatten()}), zt("destroy()", function(e){return e = e || !1, this.iterator("table", function(n){var r, o = n.nTableWrapper.parentNode, i = n.oClasses, s = n.nTable, l = n.nTBody, u = n.nTHead, c = n.nTFoot, f = a(s), d = a(l), h = a(n.nTableWrapper), p = a.map(n.aoData, function(t){return t.nTr}); n.bDestroying = !0, Wt(n, "aoDestroyCallback", "destroy", [n]), e || new $t(n).columns().visible(!0), h.unbind(".DT").find(":not(tbody *)").unbind(".DT"), a(t).unbind(".DT-" + n.sInstance), s != u.parentNode && (f.children("thead").detach(), f.append(u)), c && s != c.parentNode && (f.children("tfoot").detach(), f.append(c)), n.aaSorting = [], n.aaSortingFixed = [], Ft(n), a(p).removeClass(n.asStripeClasses.join(" ")), a("th, td", u).removeClass(i.sSortable + " " + i.sSortableAsc + " " + i.sSortableDesc + " " + i.sSortableNone), n.bJUI && (a("th span." + i.sSortIcon + ", td span." + i.sSortIcon, u).detach(), a("th, td", u).each(function(){var t = a("div." + i.sSortJUIWrapper, this); a(this).append(t.contents()), t.detach()})), d.children().detach(), d.append(p); var g = e?"remove":"detach"; f[g](), h[g](), !e && o && (o.insertBefore(s, n.nTableReinsertBefore), f.css("width", n.sDestroyWidth).removeClass(i.sTable), r = n.asDestroyStripes.length, r && d.children().each(function(t){a(this).addClass(n.asDestroyStripes[t % r])})); var b = a.inArray(n, qt.settings); - 1 !== b && qt.settings.splice(b, 1)})}), a.each(["column", "row", "cell"], function(t, e){zt(e + "s().every()", function(t){return this.iterator(e, function(a, r, o, i, s){t.call(new $t(a)[e](r, "cell" === e?o:n), r, o, i, s)})})}), zt("i18n()", function(t, e, r){var o = this.context[0], i = I(t)(o.oLanguage); return i === n && (i = e), r !== n && a.isPlainObject(i) && (i = i[r] !== n?i[r]:i._), i.replace("%d", r)}), qt.version = "1.10.9", qt.settings = [], qt.models = {}, qt.models.oSearch = {bCaseInsensitive:!0, sSearch:"", bRegex:!1, bSmart:!0}, qt.models.oRow = {nTr:null, anCells:null, _aData:[], _aSortData:null, _aFilterData:null, _sFilterRow:null, _sRowStripe:"", src:null, idx: - 1}, qt.models.oColumn = {idx:null, aDataSort:null, asSorting:null, bSearchable:null, bSortable:null, bVisible:null, _sManualType:null, _bAttrSrc:!1, fnCreatedCell:null, fnGetData:null, fnSetData:null, mData:null, mRender:null, nTh:null, nTf:null, sClass:null, sContentPadding:null, sDefaultContent:null, sName:null, sSortDataType:"std", sSortingClass:null, sSortingClassJUI:null, sTitle:null, sType:null, sWidth:null, sWidthOrig:null}, qt.defaults = {aaData:null, aaSorting:[[0, "asc"]], aaSortingFixed:[], ajax:null, aLengthMenu:[10, 25, 50, 100], aoColumns:null, aoColumnDefs:null, aoSearchCols:[], asStripeClasses:null, bAutoWidth:!0, bDeferRender:!1, bDestroy:!1, bFilter:!0, bInfo:!0, bJQueryUI:!1, bLengthChange:!0, bPaginate:!0, bProcessing:!1, bRetrieve:!1, bScrollCollapse:!1, bServerSide:!1, bSort:!0, bSortMulti:!0, bSortCellsTop:!1, bSortClasses:!0, bStateSave:!1, fnCreatedRow:null, fnDrawCallback:null, fnFooterCallback:null, fnFormatNumber:function(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g, this.oLanguage.sThousands)}, fnHeaderCallback:null, fnInfoCallback:null, fnInitComplete:null, fnPreDrawCallback:null, fnRowCallback:null, fnServerData:null, fnServerParams:null, fnStateLoadCallback:function(t){try{return JSON.parse(( - 1 === t.iStateDuration?sessionStorage:localStorage).getItem("DataTables_" + t.sInstance + "_" + location.pathname))} catch (e){}}, fnStateLoadParams:null, fnStateLoaded:null, fnStateSaveCallback:function(t, e){try{( - 1 === t.iStateDuration?sessionStorage:localStorage).setItem("DataTables_" + t.sInstance + "_" + location.pathname, JSON.stringify(e))} catch (n){}}, fnStateSaveParams:null, iStateDuration:7200, iDeferLoading:null, iDisplayLength:10, iDisplayStart:0, iTabIndex:0, oClasses:{}, oLanguage:{oAria:{sSortAscending:": activate to sort column ascending", sSortDescending:": activate to sort column descending"}, oPaginate:{sFirst:"First", sLast:"Last", sNext:"Next", sPrevious:"Previous"}, sEmptyTable:"No data available in table", sInfo:"Showing _START_ to _END_ of _TOTAL_ entries", sInfoEmpty:"Showing 0 to 0 of 0 entries", sInfoFiltered:"(filtered from _MAX_ total entries)", sInfoPostFix:"", sDecimal:"", sThousands:",", sLengthMenu:"Show _MENU_ entries", sLoadingRecords:"Loading...", sProcessing:"Processing...", sSearch:"Search:", sSearchPlaceholder:"", sUrl:"", sZeroRecords:"No matching records found"}, oSearch:a.extend({}, qt.models.oSearch), sAjaxDataProp:"data", sAjaxSource:null, sDom:"lfrtip", searchDelay:null, sPaginationType:"simple_numbers", sScrollX:"", sScrollXInner:"", sScrollY:"", sServerMethod:"GET", renderer:null, rowId:"DT_RowId"}, r(qt.defaults), qt.defaults.column = {aDataSort:null, iDataSort: - 1, asSorting:["asc", "desc"], bSearchable:!0, bSortable:!0, bVisible:!0, fnCreatedCell:null, mData:null, mRender:null, sCellType:"td", sClass:"", sContentPadding:"", sDefaultContent:null, sName:"", sSortDataType:"std", sTitle:null, sType:null, sWidth:null}, r(qt.defaults.column), qt.models.oSettings = {oFeatures:{bAutoWidth:null, bDeferRender:null, bFilter:null, bInfo:null, bLengthChange:null, bPaginate:null, bProcessing:null, bServerSide:null, bSort:null, bSortMulti:null, bSortClasses:null, bStateSave:null}, oScroll:{bCollapse:null, iBarWidth:0, sX:null, sXInner:null, sY:null}, oLanguage:{fnInfoCallback:null}, oBrowser:{bScrollOversize:!1, bScrollbarLeft:!1, bBounding:!1, barWidth:0}, ajax:null, aanFeatures:[], aoData:[], aiDisplay:[], aiDisplayMaster:[], aIds:{}, aoColumns:[], aoHeader:[], aoFooter:[], oPreviousSearch:{}, aoPreSearchCols:[], aaSorting:null, aaSortingFixed:[], asStripeClasses:null, asDestroyStripes:[], sDestroyWidth:0, aoRowCallback:[], aoHeaderCallback:[], aoFooterCallback:[], aoDrawCallback:[], aoRowCreatedCallback:[], aoPreDrawCallback:[], aoInitComplete:[], aoStateSaveParams:[], aoStateLoadParams:[], aoStateLoaded:[], sTableId:"", nTable:null, nTHead:null, nTFoot:null, nTBody:null, nTableWrapper:null, bDeferLoading:!1, bInitialised:!1, aoOpenRows:[], sDom:null, searchDelay:null, sPaginationType:"two_button", iStateDuration:0, aoStateSave:[], aoStateLoad:[], oSavedState:null, oLoadedState:null, sAjaxSource:null, sAjaxDataProp:null, bAjaxDataGet:!0, jqXHR:null, json:n, oAjaxData:n, fnServerData:null, aoServerParams:[], sServerMethod:null, fnFormatNumber:null, aLengthMenu:null, iDraw:0, bDrawing:!1, iDrawError: - 1, _iDisplayLength:10, _iDisplayStart:0, _iRecordsTotal:0, _iRecordsDisplay:0, bJUI:null, oClasses:{}, bFiltered:!1, bSorted:!1, bSortCellsTop:null, oInit:null, aoDestroyCallback:[], fnRecordsTotal:function(){return"ssp" == Bt(this)?1 * this._iRecordsTotal:this.aiDisplayMaster.length}, fnRecordsDisplay:function(){return"ssp" == Bt(this)?1 * this._iRecordsDisplay:this.aiDisplay.length}, fnDisplayEnd:function(){var t = this._iDisplayLength, e = this._iDisplayStart, n = e + t, a = this.aiDisplay.length, r = this.oFeatures, o = r.bPaginate; return r.bServerSide?o === !1 || - 1 === t?e + a:Math.min(e + t, this._iRecordsDisplay):!o || n > a || - 1 === t?a:n}, oInstance:null, sInstance:null, iTabIndex:0, nScrollHead:null, nScrollFoot:null, aLastSort:[], oPlugins:{}, rowIdFn:null, rowId:null}, qt.ext = Gt = {buttons:{}, classes:{}, errMode:"alert", feature:[], search:[], selector:{cell:[], column:[], row:[]}, internal:{}, legacy:{ajax:null}, pager:{}, renderer:{pageButton:{}, header:{}}, order:{}, type:{detect:[], search:{}, order:{}}, _unique:0, fnVersionCheck:qt.fnVersionCheck, iApiIndex:0, oJUIClasses:{}, sVersion:qt.version}, a.extend(Gt, {afnFiltering:Gt.search, aTypes:Gt.type.detect, ofnSearch:Gt.type.search, oSort:Gt.type.order, afnSortData:Gt.order, aoFeatures:Gt.feature, oApi:Gt.internal, oStdClasses:Gt.classes, oPagination:Gt.pager}), a.extend(qt.ext.classes, {sTable:"dataTable", sNoFooter:"no-footer", sPageButton:"paginate_button", sPageButtonActive:"current", sPageButtonDisabled:"disabled", sStripeOdd:"odd", sStripeEven:"even", sRowEmpty:"dataTables_empty", sWrapper:"dataTables_wrapper", sFilter:"dataTables_filter", sInfo:"dataTables_info", sPaging:"dataTables_paginate paging_", sLength:"dataTables_length", sProcessing:"dataTables_processing", sSortAsc:"sorting_asc", sSortDesc:"sorting_desc", sSortable:"sorting", sSortableAsc:"sorting_asc_disabled", sSortableDesc:"sorting_desc_disabled", sSortableNone:"sorting_disabled", sSortColumn:"sorting_", sFilterInput:"", sLengthSelect:"", sScrollWrapper:"dataTables_scroll", sScrollHead:"dataTables_scrollHead", sScrollHeadInner:"dataTables_scrollHeadInner", sScrollBody:"dataTables_scrollBody", sScrollFoot:"dataTables_scrollFoot", sScrollFootInner:"dataTables_scrollFootInner", sHeaderTH:"", sFooterTH:"", sSortJUIAsc:"", sSortJUIDesc:"", sSortJUI:"", sSortJUIAscAllowed:"", sSortJUIDescAllowed:"", sSortJUIWrapper:"", sSortIcon:"", sJUIHeader:"", sJUIFooter:""}), function(){var t = ""; t = ""; var e = t + "ui-state-default", n = t + "css_right ui-icon ui-icon-", r = t + "fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix"; a.extend(qt.ext.oJUIClasses, qt.ext.classes, {sPageButton:"fg-button ui-button " + e, sPageButtonActive:"ui-state-disabled", sPageButtonDisabled:"ui-state-disabled", sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_", sSortAsc:e + " sorting_asc", sSortDesc:e + " sorting_desc", sSortable:e + " sorting", sSortableAsc:e + " sorting_asc_disabled", sSortableDesc:e + " sorting_desc_disabled", sSortableNone:e + " sorting_disabled", sSortJUIAsc:n + "triangle-1-n", sSortJUIDesc:n + "triangle-1-s", sSortJUI:n + "carat-2-n-s", sSortJUIAscAllowed:n + "carat-1-n", sSortJUIDescAllowed:n + "carat-1-s", sSortJUIWrapper:"DataTables_sort_wrapper", sSortIcon:"DataTables_sort_icon", sScrollHead:"dataTables_scrollHead " + e, sScrollFoot:"dataTables_scrollFoot " + e, sHeaderTH:e, sFooterTH:e, sJUIHeader:r + " ui-corner-tl ui-corner-tr", sJUIFooter:r + " ui-corner-bl ui-corner-br"})}(); var Xe = qt.ext.pager; a.extend(Xe, {simple:function(t, e){return["previous", "next"]}, full:function(t, e){return["first", "previous", "next", "last"]}, numbers:function(t, e){return[Jt(t, e)]}, simple_numbers:function(t, e){return["previous", Jt(t, e), "next"]}, full_numbers:function(t, e){return["first", "previous", Jt(t, e), "next", "last"]}, _numbers:Jt, numbers_length:7}), a.extend(!0, qt.ext.renderer, {pageButton:{_:function(t, n, r, o, i, s){var l, u, c, f = t.oClasses, d = t.oLanguage.oPaginate, h = 0, p = function(e, n){var o, c, g, b, v = function(e){dt(t, e.data.action, !0)}; for (o = 0, c = n.length; c > o; o++)if (b = n[o], a.isArray(b)){var S = a("<" + (b.DT_el || "div") + "/>").appendTo(e); p(S, b)} else{switch (l = null, u = "", b){case"ellipsis":e.append('<span class="ellipsis">&#x2026;</span>'); break; case"first":l = d.sFirst, u = b + (i > 0?"":" " + f.sPageButtonDisabled); break; case"previous":l = d.sPrevious, u = b + (i > 0?"":" " + f.sPageButtonDisabled); break; case"next":l = d.sNext, u = b + (s - 1 > i?"":" " + f.sPageButtonDisabled); break; case"last":l = d.sLast, u = b + (s - 1 > i?"":" " + f.sPageButtonDisabled); break; default:l = b + 1, u = i === b?f.sPageButtonActive:""}null !== l && (g = a("<a>", {"class":f.sPageButton + " " + u, "aria-controls":t.sTableId, "data-dt-idx":h, tabindex:t.iTabIndex, id:0 === r && "string" == typeof b?t.sTableId + "_" + b:null}).html(l).appendTo(e), Ot(g, {action:b}, v), h++)}}; try{c = a(n).find(e.activeElement).data("dt-idx")} catch (g){}p(a(n).empty(), o), c && a(n).find("[data-dt-idx=" + c + "]").focus()}}}), a.extend(qt.ext.type.detect, [function(t, e){var n = e.oLanguage.sDecimal; return se(t, n)?"num" + n:null}, function(t, e){if (t && !(t instanceof Date) && (!te.test(t) || !ee.test(t)))return null; var n = Date.parse(t); return null !== n && !isNaN(n) || re(t)?"date":null}, function(t, e){var n = e.oLanguage.sDecimal; return se(t, n, !0)?"num-fmt" + n:null}, function(t, e){var n = e.oLanguage.sDecimal; return ue(t, n)?"html-num" + n:null}, function(t, e){var n = e.oLanguage.sDecimal; return ue(t, n, !0)?"html-num-fmt" + n:null}, function(t, e){return re(t) || "string" == typeof t && - 1 !== t.indexOf("<")?"html":null}]), a.extend(qt.ext.type.search, {html:function(t){return re(t)?t:"string" == typeof t?t.replace(Zt, " ").replace(Kt, ""):""}, string:function(t){return re(t)?t:"string" == typeof t?t.replace(Zt, " "):t}}); var Ve = function(t, e, n, a){return 0 === t || t && "-" !== t?(e && (t = ie(t, e)), t.replace && (n && (t = t.replace(n, "")), a && (t = t.replace(a, ""))), 1 * t): - (1 / 0)}; return a.extend(Gt.type.order, {"date-pre":function(t){return Date.parse(t) || 0}, "html-pre":function(t){return re(t)?"":t.replace?t.replace(/<.*?>/g, "").toLowerCase():t + ""}, "string-pre":function(t){return re(t)?"":"string" == typeof t?t.toLowerCase():t.toString?t.toString():""}, "string-asc":function(t, e){return e > t? - 1:t > e?1:0}, "string-desc":function(t, e){return e > t?1:t > e? - 1:0}}), Xt(""), a.extend(!0, qt.ext.renderer, {header:{_:function(t, e, n, r){a(t.nTable).on("order.dt.DT", function(a, o, i, s){if (t === o){var l = n.idx; e.removeClass(n.sSortingClass + " " + r.sSortAsc + " " + r.sSortDesc).addClass("asc" == s[l]?r.sSortAsc:"desc" == s[l]?r.sSortDesc:n.sSortingClass)}})}, jqueryui:function(t, e, n, r){a("<div/>").addClass(r.sSortJUIWrapper).append(e.contents()).append(a("<span/>").addClass(r.sSortIcon + " " + n.sSortingClassJUI)).appendTo(e), a(t.nTable).on("order.dt.DT", function(a, o, i, s){if (t === o){var l = n.idx; e.removeClass(r.sSortAsc + " " + r.sSortDesc).addClass("asc" == s[l]?r.sSortAsc:"desc" == s[l]?r.sSortDesc:n.sSortingClass), e.find("span." + r.sSortIcon).removeClass(r.sSortJUIAsc + " " + r.sSortJUIDesc + " " + r.sSortJUI + " " + r.sSortJUIAscAllowed + " " + r.sSortJUIDescAllowed).addClass("asc" == s[l]?r.sSortJUIAsc:"desc" == s[l]?r.sSortJUIDesc:n.sSortingClassJUI)}})}}}), qt.render = {number:function(t, e, n, a, r){return{display:function(o){if ("number" != typeof o && "string" != typeof o)return o; var i = 0 > o?"-":""; o = Math.abs(parseFloat(o)); var s = parseInt(o, 10), l = n?e + (o - s).toFixed(n).substring(2):""; return i + (a || "") + s.toString().replace(/\B(?=(\d{3})+(?!\d))/g, t) + l + (r || "")}}}}, a.extend(qt.ext.internal, {_fnExternApiFunc:Vt, _fnBuildAjax:J, _fnAjaxUpdate:X, _fnAjaxParameters:V, _fnAjaxUpdateDraw:q, _fnAjaxDataSrc:G, _fnAddColumn:f, _fnColumnOptions:d, _fnAdjustColumnSizing:h, _fnVisibleToColumnIndex:p, _fnColumnIndexToVisible:g, _fnVisbleColumns:b, _fnGetColumns:v, _fnColumnTypes:S, _fnApplyColumnDefs:m, _fnHungarianMap:r, _fnCamelToHungarian:o, _fnLanguageCompat:i, _fnBrowserDetect:u, _fnAddData:D, _fnAddTr:y, _fnNodeToDataIndex:_, _fnNodeToColumnIndex:T, _fnGetCellData:w, _fnSetCellData:C, _fnSplitObjNotation:x, _fnGetObjectDataFn:I, _fnSetObjectDataFn:A, _fnGetDataMaster:F, _fnClearTable:L, _fnDeleteIndex:P, _fnInvalidate:R, _fnGetRowElements:j, _fnCreateTr:H, _fnBuildHead:k, _fnDrawHead:O, _fnDraw:M, _fnReDraw:W, _fnAddOptionsHtml:U, _fnDetectHeader:E, _fnGetUniqueThs:B, _fnFeatureHtmlFilter:$, _fnFilterComplete:z, _fnFilterCustom:Y, _fnFilterColumn:Q, _fnFilter:Z, _fnFilterCreateSearch:K, _fnEscapeRegex:tt, _fnFilterData:et, _fnFeatureHtmlInfo:rt, _fnUpdateInfo:ot, _fnInfoMacros:it, _fnInitialise:st, _fnInitComplete:lt, _fnLengthChange:ut, _fnFeatureHtmlLength:ct, _fnFeatureHtmlPaginate:ft, _fnPageChange:dt, _fnFeatureHtmlProcessing:ht, _fnProcessingDisplay:pt, _fnFeatureHtmlTable:gt, _fnScrollDraw:bt, _fnApplyToChildren:vt, _fnCalculateColumnWidths:St, _fnThrottle:mt, _fnConvertToWidth:Dt, _fnGetWidestNode:yt, _fnGetMaxLenString:_t, _fnStringToCss:Tt, _fnSortFlatten:wt, _fnSort:Ct, _fnSortAria:xt, _fnSortListener:It, _fnSortAttachListener:At, _fnSortingClasses:Ft, _fnSortData:Lt, _fnSaveState:Pt, _fnLoadState:Rt, _fnSettingsFromNode:jt, _fnLog:Ht, _fnMap:Nt, _fnBindAction:Ot, _fnCallbackReg:Mt, _fnCallbackFire:Wt, _fnLengthOverflow:Ut, _fnRenderer:Et, _fnDataSource:Bt, _fnRowAttributes:N, _fnCalculateEnd:function(){}}), a.fn.dataTable = qt, a.fn.dataTableSettings = qt.settings, a.fn.dataTableExt = qt.ext, a.fn.DataTable = function(t){return a(this).dataTable(t).api()}, a.each(qt, function(t, e){a.fn.DataTable[t] = e}), a.fn.dataTable})}(window, document), function(t, e, n){var a = function(t, n){"use strict"; t.extend(!0, n.defaults, {dom:"<'row'<'col-sm-5'><'col-sm-4'f><'col-sm-3'l>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>", renderer:"bootstrap"}), t.extend(n.ext.classes, {sWrapper:"dataTables_wrapper form-inline dt-bootstrap", sFilterInput:"form-control input-sm", sLengthSelect:"form-control input-sm"}), n.ext.renderer.pageButton.bootstrap = function(a, r, o, i, s, l){var u, c, f, d = new n.Api(a), h = a.oClasses, p = a.oLanguage.oPaginate, g = 0, b = function(e, n){var r, i, f, v, S = function(e){e.preventDefault(), t(e.currentTarget).hasClass("disabled") || d.page(e.data.action).draw("page")}; for (r = 0, i = n.length; i > r; r++)if (v = n[r], t.isArray(v))b(e, v); else{switch (u = "", c = "", v){case"ellipsis":u = "&hellip;", c = "disabled"; break; case"first":u = p.sFirst, c = v + (s > 0?"":" disabled"); break; case"previous":u = p.sPrevious, c = v + (s > 0?"":" disabled"); break; case"next":u = p.sNext, c = v + (l - 1 > s?"":" disabled"); break; case"last":u = p.sLast, c = v + (l - 1 > s?"":" disabled"); break; default:u = v + 1, c = s === v?"active":""}u && (f = t("<li>", {"class":h.sPageButton + " " + c, id:0 === o && "string" == typeof v?a.sTableId + "_" + v:null}).append(t("<a>", {href:"#", "aria-controls":a.sTableId, "data-dt-idx":g, tabindex:a.iTabIndex}).html(u)).appendTo(e), a.oApi._fnBindAction(f, {action:v}, S), g++)}}; try{f = t(r).find(e.activeElement).data("dt-idx")} catch (v){}b(t(r).empty().html('<ul class="pagination"/>').children("ul"), i), f && t(r).find("[data-dt-idx=" + f + "]").focus()}, n.TableTools && (t.extend(!0, n.TableTools.classes, {container:"DTTT btn-group", buttons:{normal:"btn btn-default", disabled:"disabled"}, collection:{container:"DTTT_dropdown dropdown-menu", buttons:{normal:"", disabled:"disabled"}}, print:{info:"DTTT_print_info"}, select:{row:"active"}}), t.extend(!0, n.TableTools.DEFAULTS.oTags, {collection:{container:"ul", button:"li", liner:"a"}}))}; "function" == typeof define && define.amd?define(["jquery", "datatables"], a):"object" == typeof exports?a(require("jquery"), require("datatables")):jQuery && a(jQuery, jQuery.fn.dataTable)}(window, document);
1
  !function(t, e, n){!function(t){"use strict"; "function" == typeof define && define.amd?define("datatables", ["jquery"], t):"object" == typeof exports?module.exports = t(require("jquery")):jQuery && !jQuery.fn.dataTable && t(jQuery)}(function(a){"use strict"; function r(t){var e, n, o = "a aa ai ao as b fn i m o s ", i = {}; a.each(t, function(a, s){e = a.match(/^([^A-Z]+?)([A-Z])/), e && - 1 !== o.indexOf(e[1] + " ") && (n = a.replace(e[0], e[2].toLowerCase()), i[n] = a, "o" === e[1] && r(t[a]))}), t._hungarianMap = i}function o(t, e, i){t._hungarianMap || r(t); var s; a.each(e, function(r, l){s = t._hungarianMap[r], s === n || !i && e[s] !== n || ("o" === s.charAt(0)?(e[s] || (e[s] = {}), a.extend(!0, e[s], e[r]), o(t[s], e[s], i)):e[s] = e[r])})}function i(t){var e = qt.defaults.oLanguage, n = t.sZeroRecords; !t.sEmptyTable && n && "No data available in table" === e.sEmptyTable && Nt(t, t, "sZeroRecords", "sEmptyTable"), !t.sLoadingRecords && n && "Loading..." === e.sLoadingRecords && Nt(t, t, "sZeroRecords", "sLoadingRecords"), t.sInfoThousands && (t.sThousands = t.sInfoThousands); var a = t.sDecimal; a && Xt(a)}function s(t){be(t, "ordering", "bSort"), be(t, "orderMulti", "bSortMulti"), be(t, "orderClasses", "bSortClasses"), be(t, "orderCellsTop", "bSortCellsTop"), be(t, "order", "aaSorting"), be(t, "orderFixed", "aaSortingFixed"), be(t, "paging", "bPaginate"), be(t, "pagingType", "sPaginationType"), be(t, "pageLength", "iDisplayLength"), be(t, "searching", "bFilter"), "boolean" == typeof t.sScrollX && (t.sScrollX = t.sScrollX?"100%":""); var e = t.aoSearchCols; if (e)for (var n = 0, a = e.length; a > n; n++)e[n] && o(qt.models.oSearch, e[n])}function l(t){be(t, "orderable", "bSortable"), be(t, "orderData", "aDataSort"), be(t, "orderSequence", "asSorting"), be(t, "orderDataType", "sortDataType"); var e = t.aDataSort; e && !a.isArray(e) && (t.aDataSort = [e])}function u(t){if (!qt.__browser){var e = {}; qt.__browser = e; var n = a("<div/>").css({position:"fixed", top:0, left:0, height:1, width:1, overflow:"hidden"}).append(a("<div/>").css({position:"absolute", top:1, left:1, width:100, overflow:"scroll"}).append(a("<div/>").css({width:"100%", height:10}))).appendTo("body"), r = n.children(), o = r.children(); e.barWidth = r[0].offsetWidth - r[0].clientWidth, e.bScrollOversize = 100 === o[0].offsetWidth && 100 !== r[0].clientWidth, e.bScrollbarLeft = 1 !== Math.round(o.offset().left), e.bBounding = n[0].getBoundingClientRect().width?!0:!1, n.remove()}a.extend(t.oBrowser, qt.__browser), t.oScroll.iBarWidth = qt.__browser.barWidth}function c(t, e, a, r, o, i){var s, l = r, u = !1; for (a !== n && (s = a, u = !0); l !== o; )t.hasOwnProperty(l) && (s = u?e(s, t[l], l, t):t[l], u = !0, l += i); return s}function f(t, n){var r = qt.defaults.column, o = t.aoColumns.length, i = a.extend({}, qt.models.oColumn, r, {nTh:n?n:e.createElement("th"), sTitle:r.sTitle?r.sTitle:n?n.innerHTML:"", aDataSort:r.aDataSort?r.aDataSort:[o], mData:r.mData?r.mData:o, idx:o}); t.aoColumns.push(i); var s = t.aoPreSearchCols; s[o] = a.extend({}, qt.models.oSearch, s[o]), d(t, o, a(n).data())}function d(t, e, r){var i = t.aoColumns[e], s = t.oClasses, u = a(i.nTh); if (!i.sWidthOrig){i.sWidthOrig = u.attr("width") || null; var c = (u.attr("style") || "").match(/width:\s*(\d+[pxem%]+)/); c && (i.sWidthOrig = c[1])}r !== n && null !== r && (l(r), o(qt.defaults.column, r), r.mDataProp === n || r.mData || (r.mData = r.mDataProp), r.sType && (i._sManualType = r.sType), r.className && !r.sClass && (r.sClass = r.className), a.extend(i, r), Nt(i, r, "sWidth", "sWidthOrig"), r.iDataSort !== n && (i.aDataSort = [r.iDataSort]), Nt(i, r, "aDataSort")); var f = i.mData, d = I(f), h = i.mRender?I(i.mRender):null, p = function(t){return"string" == typeof t && - 1 !== t.indexOf("@")}; i._bAttrSrc = a.isPlainObject(f) && (p(f.sort) || p(f.type) || p(f.filter)), i.fnGetData = function(t, e, a){var r = d(t, e, n, a); return h && e?h(r, e, t, a):r}, i.fnSetData = function(t, e, n){return A(f)(t, e, n)}, "number" != typeof f && (t._rowReadObject = !0), t.oFeatures.bSort || (i.bSortable = !1, u.addClass(s.sSortableNone)); var g = - 1 !== a.inArray("asc", i.asSorting), b = - 1 !== a.inArray("desc", i.asSorting); i.bSortable && (g || b)?g && !b?(i.sSortingClass = s.sSortableAsc, i.sSortingClassJUI = s.sSortJUIAscAllowed):!g && b?(i.sSortingClass = s.sSortableDesc, i.sSortingClassJUI = s.sSortJUIDescAllowed):(i.sSortingClass = s.sSortable, i.sSortingClassJUI = s.sSortJUI):(i.sSortingClass = s.sSortableNone, i.sSortingClassJUI = "")}function h(t){if (t.oFeatures.bAutoWidth !== !1){var e = t.aoColumns; St(t); for (var n = 0, a = e.length; a > n; n++)e[n].nTh.style.width = e[n].sWidth}var r = t.oScroll; ("" !== r.sY || "" !== r.sX) && bt(t), Wt(t, null, "column-sizing", [t])}function p(t, e){var n = v(t, "bVisible"); return"number" == typeof n[e]?n[e]:null}function g(t, e){var n = v(t, "bVisible"), r = a.inArray(e, n); return - 1 !== r?r:null}function b(t){return v(t, "bVisible").length}function v(t, e){var n = []; return a.map(t.aoColumns, function(t, a){t[e] && n.push(a)}), n}function S(t){var e, a, r, o, i, s, l, u, c, f = t.aoColumns, d = t.aoData, h = qt.ext.type.detect; for (e = 0, a = f.length; a > e; e++)if (l = f[e], c = [], !l.sType && l._sManualType)l.sType = l._sManualType; else if (!l.sType){for (r = 0, o = h.length; o > r; r++){for (i = 0, s = d.length; s > i && (c[i] === n && (c[i] = w(t, i, e, "type")), u = h[r](c[i], t), u || r === h.length - 1) && "html" !== u; i++); if (u){l.sType = u; break}}l.sType || (l.sType = "string")}}function m(t, e, r, o){var i, s, l, u, c, d, h, p = t.aoColumns; if (e)for (i = e.length - 1; i >= 0; i--){h = e[i]; var g = h.targets !== n?h.targets:h.aTargets; for (a.isArray(g) || (g = [g]), l = 0, u = g.length; u > l; l++)if ("number" == typeof g[l] && g[l] >= 0){for (; p.length <= g[l]; )f(t); o(g[l], h)} else if ("number" == typeof g[l] && g[l] < 0)o(p.length + g[l], h); else if ("string" == typeof g[l])for (c = 0, d = p.length; d > c; c++)("_all" == g[l] || a(p[c].nTh).hasClass(g[l])) && o(c, h)}if (r)for (i = 0, s = r.length; s > i; i++)o(i, r[i])}function D(t, e, r, o){var i = t.aoData.length, s = a.extend(!0, {}, qt.models.oRow, {src:r?"dom":"data", idx:i}); s._aData = e, t.aoData.push(s); for (var l = t.aoColumns, u = 0, c = l.length; c > u; u++)l[u].sType = null; t.aiDisplayMaster.push(i); var f = t.rowIdFn(e); return f !== n && (t.aIds[f] = s), (r || !t.oFeatures.bDeferRender) && H(t, i, r, o), i}function y(t, e){var n; return e instanceof a || (e = a(e)), e.map(function(e, a){return n = j(t, a), D(t, n.data, a, n.cells)})}function _(t, e){return e._DT_RowIndex !== n?e._DT_RowIndex:null}function T(t, e, n){return a.inArray(n, t.aoData[e].anCells)}function w(t, e, a, r){var o = t.iDraw, i = t.aoColumns[a], s = t.aoData[e]._aData, l = i.sDefaultContent, u = i.fnGetData(s, r, {settings:t, row:e, col:a}); if (u === n)return t.iDrawError != o && null === l && (Ht(t, 0, "Requested unknown parameter " + ("function" == typeof i.mData?"{function}":"'" + i.mData + "'") + " for row " + e, 4), t.iDrawError = o), l; if (u !== s && null !== u || null === l){if ("function" == typeof u)return u.call(s)} else u = l; return null === u && "display" == r?"":u}function C(t, e, n, a){var r = t.aoColumns[n], o = t.aoData[e]._aData; r.fnSetData(o, a, {settings:t, row:e, col:n})}function x(t){return a.map(t.match(/(\\.|[^\.])+/g) || [""], function(t){return t.replace(/\\./g, ".")})}function I(t){if (a.isPlainObject(t)){var e = {}; return a.each(t, function(t, n){n && (e[t] = I(n))}), function(t, a, r, o){var i = e[a] || e._; return i !== n?i(t, a, r, o):t}}if (null === t)return function(t){return t}; if ("function" == typeof t)return function(e, n, a, r){return t(e, n, a, r)}; if ("string" != typeof t || - 1 === t.indexOf(".") && - 1 === t.indexOf("[") && - 1 === t.indexOf("("))return function(e, n){return e[t]}; var r = function(t, e, o){var i, s, l, u; if ("" !== o)for (var c = x(o), f = 0, d = c.length; d > f; f++){if (i = c[f].match(ve), s = c[f].match(Se), i){if (c[f] = c[f].replace(ve, ""), "" !== c[f] && (t = t[c[f]]), l = [], c.splice(0, f + 1), u = c.join("."), a.isArray(t))for (var h = 0, p = t.length; p > h; h++)l.push(r(t[h], e, u)); var g = i[0].substring(1, i[0].length - 1); t = "" === g?l:l.join(g); break}if (s)c[f] = c[f].replace(Se, ""), t = t[c[f]](); else{if (null === t || t[c[f]] === n)return n; t = t[c[f]]}}return t}; return function(e, n){return r(e, n, t)}}function A(t){if (a.isPlainObject(t))return A(t._); if (null === t)return function(){}; if ("function" == typeof t)return function(e, n, a){t(e, "set", n, a)}; if ("string" != typeof t || - 1 === t.indexOf(".") && - 1 === t.indexOf("[") && - 1 === t.indexOf("("))return function(e, n){e[t] = n}; var e = function(t, r, o){for (var i, s, l, u, c, f = x(o), d = f[f.length - 1], h = 0, p = f.length - 1; p > h; h++){if (s = f[h].match(ve), l = f[h].match(Se), s){if (f[h] = f[h].replace(ve, ""), t[f[h]] = [], i = f.slice(), i.splice(0, h + 1), c = i.join("."), a.isArray(r))for (var g = 0, b = r.length; b > g; g++)u = {}, e(u, r[g], c), t[f[h]].push(u); else t[f[h]] = r; return}l && (f[h] = f[h].replace(Se, ""), t = t[f[h]](r)), (null === t[f[h]] || t[f[h]] === n) && (t[f[h]] = {}), t = t[f[h]]}d.match(Se)?t = t[d.replace(Se, "")](r):t[d.replace(ve, "")] = r}; return function(n, a){return e(n, a, t)}}function F(t){return ce(t.aoData, "_aData")}function L(t){t.aoData.length = 0, t.aiDisplayMaster.length = 0, t.aiDisplay.length = 0, t.aIds = {}}function P(t, e, a){for (var r = - 1, o = 0, i = t.length; i > o; o++)t[o] == e?r = o:t[o] > e && t[o]--; - 1 != r && a === n && t.splice(r, 1)}function R(t, e, a, r){var o, i, s = t.aoData[e], l = function(n, a){for (; n.childNodes.length; )n.removeChild(n.firstChild); n.innerHTML = w(t, e, a, "display")}; if ("dom" !== a && (a && "auto" !== a || "dom" !== s.src)){var u = s.anCells; if (u)if (r !== n)l(u[r], r); else for (o = 0, i = u.length; i > o; o++)l(u[o], o)} else s._aData = j(t, s, r, r === n?n:s._aData).data; s._aSortData = null, s._aFilterData = null; var c = t.aoColumns; if (r !== n)c[r].sType = null; else{for (o = 0, i = c.length; i > o; o++)c[o].sType = null; N(t, s)}}function j(t, e, r, o){var i, s, l, u = [], c = e.firstChild, f = 0, d = t.aoColumns, h = t._rowReadObject; o = o !== n?o:h?{}:[]; var p = function(t, e){if ("string" == typeof t){var n = t.indexOf("@"); if ( - 1 !== n){var a = t.substring(n + 1), r = A(t); r(o, e.getAttribute(a))}}}, g = function(t){if (r === n || r === f)if (s = d[f], l = a.trim(t.innerHTML), s && s._bAttrSrc){var e = A(s.mData._); e(o, l), p(s.mData.sort, t), p(s.mData.type, t), p(s.mData.filter, t)} else h?(s._setter || (s._setter = A(s.mData)), s._setter(o, l)):o[f] = l; f++}; if (c)for (; c; )i = c.nodeName.toUpperCase(), ("TD" == i || "TH" == i) && (g(c), u.push(c)), c = c.nextSibling; else{u = e.anCells; for (var b = 0, v = u.length; v > b; b++)g(u[b])}var S = c?e:e.nTr; if (S){var m = S.getAttribute("id"); m && A(t.rowId)(o, m)}return{data:o, cells:u}}function H(t, n, a, r){var o, i, s, l, u, c = t.aoData[n], f = c._aData, d = []; if (null === c.nTr){for (o = a || e.createElement("tr"), c.nTr = o, c.anCells = d, o._DT_RowIndex = n, N(t, c), l = 0, u = t.aoColumns.length; u > l; l++)s = t.aoColumns[l], i = a?r[l]:e.createElement(s.sCellType), d.push(i), (!a || s.mRender || s.mData !== l) && (i.innerHTML = w(t, n, l, "display")), s.sClass && (i.className += " " + s.sClass), s.bVisible && !a?o.appendChild(i):!s.bVisible && a && i.parentNode.removeChild(i), s.fnCreatedCell && s.fnCreatedCell.call(t.oInstance, i, w(t, n, l), f, n, l); Wt(t, "aoRowCreatedCallback", null, [o, f, n])}c.nTr.setAttribute("role", "row")}function N(t, e){var n = e.nTr, r = e._aData; if (n){var o = t.rowIdFn(r); if (o && (n.id = o), r.DT_RowClass){var i = r.DT_RowClass.split(" "); e.__rowc = e.__rowc?ge(e.__rowc.concat(i)):i, a(n).removeClass(e.__rowc.join(" ")).addClass(r.DT_RowClass)}r.DT_RowAttr && a(n).attr(r.DT_RowAttr), r.DT_RowData && a(n).data(r.DT_RowData)}}function k(t){var e, n, r, o, i, s = t.nTHead, l = t.nTFoot, u = 0 === a("th, td", s).length, c = t.oClasses, f = t.aoColumns; for (u && (o = a("<tr/>").appendTo(s)), e = 0, n = f.length; n > e; e++)i = f[e], r = a(i.nTh).addClass(i.sClass), u && r.appendTo(o), t.oFeatures.bSort && (r.addClass(i.sSortingClass), i.bSortable !== !1 && (r.attr("tabindex", t.iTabIndex).attr("aria-controls", t.sTableId), At(t, i.nTh, e))), i.sTitle != r[0].innerHTML && r.html(i.sTitle), Et(t, "header")(t, r, i, c); if (u && E(t.aoHeader, s), a(s).find(">tr").attr("role", "row"), a(s).find(">tr>th, >tr>td").addClass(c.sHeaderTH), a(l).find(">tr>th, >tr>td").addClass(c.sFooterTH), null !== l){var d = t.aoFooter[0]; for (e = 0, n = d.length; n > e; e++)i = f[e], i.nTf = d[e].cell, i.sClass && a(i.nTf).addClass(i.sClass)}}function O(t, e, r){var o, i, s, l, u, c, f, d, h, p = [], g = [], b = t.aoColumns.length; if (e){for (r === n && (r = !1), o = 0, i = e.length; i > o; o++){for (p[o] = e[o].slice(), p[o].nTr = e[o].nTr, s = b - 1; s >= 0; s--)t.aoColumns[s].bVisible || r || p[o].splice(s, 1); g.push([])}for (o = 0, i = p.length; i > o; o++){if (f = p[o].nTr)for (; c = f.firstChild; )f.removeChild(c); for (s = 0, l = p[o].length; l > s; s++)if (d = 1, h = 1, g[o][s] === n){for (f.appendChild(p[o][s].cell), g[o][s] = 1; p[o + d] !== n && p[o][s].cell == p[o + d][s].cell; )g[o + d][s] = 1, d++; for (; p[o][s + h] !== n && p[o][s].cell == p[o][s + h].cell; ){for (u = 0; d > u; u++)g[o + u][s + h] = 1; h++}a(p[o][s].cell).attr("rowspan", d).attr("colspan", h)}}}}function M(t){var e = Wt(t, "aoPreDrawCallback", "preDraw", [t]); if ( - 1 !== a.inArray(!1, e))return void pt(t, !1); var r = [], o = 0, i = t.asStripeClasses, s = i.length, l = (t.aoOpenRows.length, t.oLanguage), u = t.iInitDisplayStart, c = "ssp" == Bt(t), f = t.aiDisplay; t.bDrawing = !0, u !== n && - 1 !== u && (t._iDisplayStart = c?u:u >= t.fnRecordsDisplay()?0:u, t.iInitDisplayStart = - 1); var d = t._iDisplayStart, h = t.fnDisplayEnd(); if (t.bDeferLoading)t.bDeferLoading = !1, t.iDraw++, pt(t, !1); else if (c){if (!t.bDestroying && !X(t))return} else t.iDraw++; if (0 !== f.length)for (var p = c?0:d, g = c?t.aoData.length:h, v = p; g > v; v++){var S = f[v], m = t.aoData[S]; null === m.nTr && H(t, S); var D = m.nTr; if (0 !== s){var y = i[o % s]; m._sRowStripe != y && (a(D).removeClass(m._sRowStripe).addClass(y), m._sRowStripe = y)}Wt(t, "aoRowCallback", null, [D, m._aData, o, v]), r.push(D), o++} else{var _ = l.sZeroRecords; 1 == t.iDraw && "ajax" == Bt(t)?_ = l.sLoadingRecords:l.sEmptyTable && 0 === t.fnRecordsTotal() && (_ = l.sEmptyTable), r[0] = a("<tr/>", {"class":s?i[0]:""}).append(a("<td />", {valign:"top", colSpan:b(t), "class":t.oClasses.sRowEmpty}).html(_))[0]}Wt(t, "aoHeaderCallback", "header", [a(t.nTHead).children("tr")[0], F(t), d, h, f]), Wt(t, "aoFooterCallback", "footer", [a(t.nTFoot).children("tr")[0], F(t), d, h, f]); var T = a(t.nTBody); T.children().detach(), T.append(a(r)), Wt(t, "aoDrawCallback", "draw", [t]), t.bSorted = !1, t.bFiltered = !1, t.bDrawing = !1}function W(t, e){var n = t.oFeatures, a = n.bSort, r = n.bFilter; a && Ct(t), r?z(t, t.oPreviousSearch):t.aiDisplay = t.aiDisplayMaster.slice(), e !== !0 && (t._iDisplayStart = 0), t._drawHold = e, M(t), t._drawHold = !1}function U(t){var e = t.oClasses, n = a(t.nTable), r = a("<div/>").insertBefore(n), o = t.oFeatures, i = a("<div/>", {id:t.sTableId + "_wrapper", "class":e.sWrapper + (t.nTFoot?"":" " + e.sNoFooter)}); t.nHolding = r[0], t.nTableWrapper = i[0], t.nTableReinsertBefore = t.nTable.nextSibling; for (var s, l, u, c, f, d, h = t.sDom.split(""), p = 0; p < h.length; p++){if (s = null, l = h[p], "<" == l){if (u = a("<div/>")[0], c = h[p + 1], "'" == c || '"' == c){for (f = "", d = 2; h[p + d] != c; )f += h[p + d], d++; if ("H" == f?f = e.sJUIHeader:"F" == f && (f = e.sJUIFooter), - 1 != f.indexOf(".")){var g = f.split("."); u.id = g[0].substr(1, g[0].length - 1), u.className = g[1]} else"#" == f.charAt(0)?u.id = f.substr(1, f.length - 1):u.className = f; p += d}i.append(u), i = a(u)} else if (">" == l)i = i.parent(); else if ("l" == l && o.bPaginate && o.bLengthChange)s = ct(t); else if ("f" == l && o.bFilter)s = $(t); else if ("r" == l && o.bProcessing)s = ht(t); else if ("t" == l)s = gt(t); else if ("i" == l && o.bInfo)s = rt(t); else if ("p" == l && o.bPaginate)s = ft(t); else if (0 !== qt.ext.feature.length)for (var b = qt.ext.feature, v = 0, S = b.length; S > v; v++)if (l == b[v].cFeature){s = b[v].fnInit(t); break}if (s){var m = t.aanFeatures; m[l] || (m[l] = []), m[l].push(s), i.append(s)}}r.replaceWith(i), t.nHolding = null}function E(t, e){var n, r, o, i, s, l, u, c, f, d, h, p = a(e).children("tr"), g = function(t, e, n){for (var a = t[e]; a[n]; )n++; return n}; for (t.splice(0, t.length), o = 0, l = p.length; l > o; o++)t.push([]); for (o = 0, l = p.length; l > o; o++)for (n = p[o], c = 0, r = n.firstChild; r; ){if ("TD" == r.nodeName.toUpperCase() || "TH" == r.nodeName.toUpperCase())for (f = 1 * r.getAttribute("colspan"), d = 1 * r.getAttribute("rowspan"), f = f && 0 !== f && 1 !== f?f:1, d = d && 0 !== d && 1 !== d?d:1, u = g(t, o, c), h = 1 === f?!0:!1, s = 0; f > s; s++)for (i = 0; d > i; i++)t[o + i][u + s] = {cell:r, unique:h}, t[o + i].nTr = n; r = r.nextSibling}}function B(t, e, n){var a = []; n || (n = t.aoHeader, e && (n = [], E(n, e))); for (var r = 0, o = n.length; o > r; r++)for (var i = 0, s = n[r].length; s > i; i++)!n[r][i].unique || a[i] && t.bSortCellsTop || (a[i] = n[r][i].cell); return a}function J(t, e, n){if (Wt(t, "aoServerParams", "serverParams", [e]), e && a.isArray(e)){var r = {}, o = /(.*?)\[\]$/; a.each(e, function(t, e){var n = e.name.match(o); if (n){var a = n[0]; r[a] || (r[a] = []), r[a].push(e.value)} else r[e.name] = e.value}), e = r}var i, s = t.ajax, l = t.oInstance, u = function(e){Wt(t, null, "xhr", [t, e, t.jqXHR]), n(e)}; if (a.isPlainObject(s) && s.data){i = s.data; var c = a.isFunction(i)?i(e, t):i; e = a.isFunction(i) && c?c:a.extend(!0, e, c), delete s.data}var f = {data:e, success:function(e){var n = e.error || e.sError; n && Ht(t, 0, n), t.json = e, u(e)}, dataType:"json", cache:!1, type:t.sServerMethod, error:function(e, n, r){var o = Wt(t, null, "xhr", [t, null, t.jqXHR]); - 1 === a.inArray(!0, o) && ("parsererror" == n?Ht(t, 0, "Invalid JSON response", 1):4 === e.readyState && Ht(t, 0, "Ajax error", 7)), pt(t, !1)}}; t.oAjaxData = e, Wt(t, null, "preXhr", [t, e]), t.fnServerData?t.fnServerData.call(l, t.sAjaxSource, a.map(e, function(t, e){return{name:e, value:t}}), u, t):t.sAjaxSource || "string" == typeof s?t.jqXHR = a.ajax(a.extend(f, {url:s || t.sAjaxSource})):a.isFunction(s)?t.jqXHR = s.call(l, e, u, t):(t.jqXHR = a.ajax(a.extend(f, s)), s.data = i)}function X(t){return t.bAjaxDataGet?(t.iDraw++, pt(t, !0), J(t, V(t), function(e){q(t, e)}), !1):!0}function V(t){var e, n, r, o, i = t.aoColumns, s = i.length, l = t.oFeatures, u = t.oPreviousSearch, c = t.aoPreSearchCols, f = [], d = wt(t), h = t._iDisplayStart, p = l.bPaginate !== !1?t._iDisplayLength: - 1, g = function(t, e){f.push({name:t, value:e})}; g("sEcho", t.iDraw), g("iColumns", s), g("sColumns", ce(i, "sName").join(",")), g("iDisplayStart", h), g("iDisplayLength", p); var b = {draw:t.iDraw, columns:[], order:[], start:h, length:p, search:{value:u.sSearch, regex:u.bRegex}}; for (e = 0; s > e; e++)r = i[e], o = c[e], n = "function" == typeof r.mData?"function":r.mData, b.columns.push({data:n, name:r.sName, searchable:r.bSearchable, orderable:r.bSortable, search:{value:o.sSearch, regex:o.bRegex}}), g("mDataProp_" + e, n), l.bFilter && (g("sSearch_" + e, o.sSearch), g("bRegex_" + e, o.bRegex), g("bSearchable_" + e, r.bSearchable)), l.bSort && g("bSortable_" + e, r.bSortable); l.bFilter && (g("sSearch", u.sSearch), g("bRegex", u.bRegex)), l.bSort && (a.each(d, function(t, e){b.order.push({column:e.col, dir:e.dir}), g("iSortCol_" + t, e.col), g("sSortDir_" + t, e.dir)}), g("iSortingCols", d.length)); var v = qt.ext.legacy.ajax; return null === v?t.sAjaxSource?f:b:v?f:b}function q(t, e){var a = function(t, a){return e[t] !== n?e[t]:e[a]}, r = G(t, e), o = a("sEcho", "draw"), i = a("iTotalRecords", "recordsTotal"), s = a("iTotalDisplayRecords", "recordsFiltered"); if (o){if (1 * o < t.iDraw)return; t.iDraw = 1 * o}L(t), t._iRecordsTotal = parseInt(i, 10), t._iRecordsDisplay = parseInt(s, 10); for (var l = 0, u = r.length; u > l; l++)D(t, r[l]); t.aiDisplay = t.aiDisplayMaster.slice(), t.bAjaxDataGet = !1, M(t), t._bInitComplete || lt(t, e), t.bAjaxDataGet = !0, pt(t, !1)}function G(t, e){var r = a.isPlainObject(t.ajax) && t.ajax.dataSrc !== n?t.ajax.dataSrc:t.sAjaxDataProp; return"data" === r?e.aaData || e[r]:"" !== r?I(r)(e):e}function $(t){var n = t.oClasses, r = t.sTableId, o = t.oLanguage, i = t.oPreviousSearch, s = t.aanFeatures, l = '<input type="search" class="' + n.sFilterInput + '"/>', u = o.sSearch; u = u.match(/_INPUT_/)?u.replace("_INPUT_", l):u + l; var c = a("<div/>", {id:s.f?null:r + "_filter", "class":n.sFilter}).append(a("<label/>").append(u)), f = function(){var e = (s.f, this.value?this.value:""); e != i.sSearch && (z(t, {sSearch:e, bRegex:i.bRegex, bSmart:i.bSmart, bCaseInsensitive:i.bCaseInsensitive}), t._iDisplayStart = 0, M(t))}, d = null !== t.searchDelay?t.searchDelay:"ssp" === Bt(t)?400:0, h = a("input", c).val(i.sSearch).attr("placeholder", o.sSearchPlaceholder).bind("keyup.DT search.DT input.DT paste.DT cut.DT", d?mt(f, d):f).bind("keypress.DT", function(t){return 13 == t.keyCode?!1:void 0}).attr("aria-controls", r); return a(t.nTable).on("search.dt.DT", function(n, a){if (t === a)try{h[0] !== e.activeElement && h.val(i.sSearch)} catch (r){}}), c[0]}function z(t, e, a){var r = t.oPreviousSearch, o = t.aoPreSearchCols, i = function(t){r.sSearch = t.sSearch, r.bRegex = t.bRegex, r.bSmart = t.bSmart, r.bCaseInsensitive = t.bCaseInsensitive}, s = function(t){return t.bEscapeRegex !== n?!t.bEscapeRegex:t.bRegex}; if (S(t), "ssp" != Bt(t)){Z(t, e.sSearch, a, s(e), e.bSmart, e.bCaseInsensitive), i(e); for (var l = 0; l < o.length; l++)Q(t, o[l].sSearch, l, s(o[l]), o[l].bSmart, o[l].bCaseInsensitive); Y(t)} else i(e); t.bFiltered = !0, Wt(t, null, "search", [t])}function Y(t){for (var e, n, r = qt.ext.search, o = t.aiDisplay, i = 0, s = r.length; s > i; i++){for (var l = [], u = 0, c = o.length; c > u; u++)n = o[u], e = t.aoData[n], r[i](t, e._aFilterData, n, e._aData, u) && l.push(n); o.length = 0, a.merge(o, l)}}function Q(t, e, n, a, r, o){if ("" !== e)for (var i, s = t.aiDisplay, l = K(e, a, r, o), u = s.length - 1; u >= 0; u--)i = t.aoData[s[u]]._aFilterData[n], l.test(i) || s.splice(u, 1)}function Z(t, e, n, a, r, o){var i, s, l, u = K(e, a, r, o), c = t.oPreviousSearch.sSearch, f = t.aiDisplayMaster; if (0 !== qt.ext.search.length && (n = !0), s = et(t), e.length <= 0)t.aiDisplay = f.slice(); else for ((s || n || c.length > e.length || 0 !== e.indexOf(c) || t.bSorted) && (t.aiDisplay = f.slice()), i = t.aiDisplay, l = i.length - 1; l >= 0; l--)u.test(t.aoData[i[l]]._sFilterRow) || i.splice(l, 1)}function K(t, e, n, r){if (t = e?t:tt(t), n){var o = a.map(t.match(/"[^"]+"|[^ ]+/g) || [""], function(t){if ('"' === t.charAt(0)){var e = t.match(/^"(.*)"$/); t = e?e[1]:t}return t.replace('"', "")}); t = "^(?=.*?" + o.join(")(?=.*?") + ").*$"}return new RegExp(t, r?"i":"")}function tt(t){return t.replace(ne, "\\$1")}function et(t){var e, n, a, r, o, i, s, l, u = t.aoColumns, c = qt.ext.type.search, f = !1; for (n = 0, r = t.aoData.length; r > n; n++)if (l = t.aoData[n], !l._aFilterData){for (i = [], a = 0, o = u.length; o > a; a++)e = u[a], e.bSearchable?(s = w(t, n, a, "filter"), c[e.sType] && (s = c[e.sType](s)), null === s && (s = ""), "string" != typeof s && s.toString && (s = s.toString())):s = "", s.indexOf && - 1 !== s.indexOf("&") && (me.innerHTML = s, s = De?me.textContent:me.innerText), s.replace && (s = s.replace(/[\r\n]/g, "")), i.push(s); l._aFilterData = i, l._sFilterRow = i.join(" "), f = !0}return f}function nt(t){return{search:t.sSearch, smart:t.bSmart, regex:t.bRegex, caseInsensitive:t.bCaseInsensitive}}function at(t){return{sSearch:t.search, bSmart:t.smart, bRegex:t.regex, bCaseInsensitive:t.caseInsensitive}}function rt(t){var e = t.sTableId, n = t.aanFeatures.i, r = a("<div/>", {"class":t.oClasses.sInfo, id:n?null:e + "_info"}); return n || (t.aoDrawCallback.push({fn:ot, sName:"information"}), r.attr("role", "status").attr("aria-live", "polite"), a(t.nTable).attr("aria-describedby", e + "_info")), r[0]}function ot(t){var e = t.aanFeatures.i; if (0 !== e.length){var n = t.oLanguage, r = t._iDisplayStart + 1, o = t.fnDisplayEnd(), i = t.fnRecordsTotal(), s = t.fnRecordsDisplay(), l = s?n.sInfo:n.sInfoEmpty; s !== i && (l += " " + n.sInfoFiltered), l += n.sInfoPostFix, l = it(t, l); var u = n.fnInfoCallback; null !== u && (l = u.call(t.oInstance, t, r, o, i, s, l)), a(e).html(l)}}function it(t, e){var n = t.fnFormatNumber, a = t._iDisplayStart + 1, r = t._iDisplayLength, o = t.fnRecordsDisplay(), i = - 1 === r; return e.replace(/_START_/g, n.call(t, a)).replace(/_END_/g, n.call(t, t.fnDisplayEnd())).replace(/_MAX_/g, n.call(t, t.fnRecordsTotal())).replace(/_TOTAL_/g, n.call(t, o)).replace(/_PAGE_/g, n.call(t, i?1:Math.ceil(a / r))).replace(/_PAGES_/g, n.call(t, i?1:Math.ceil(o / r)))}function st(t){var e, n, a, r = t.iInitDisplayStart, o = t.aoColumns, i = t.oFeatures, s = t.bDeferLoading; if (!t.bInitialised)return void setTimeout(function(){st(t)}, 200); for (U(t), k(t), O(t, t.aoHeader), O(t, t.aoFooter), pt(t, !0), i.bAutoWidth && St(t), e = 0, n = o.length; n > e; e++)a = o[e], a.sWidth && (a.nTh.style.width = Tt(a.sWidth)); Wt(t, null, "preInit", [t]), W(t); var l = Bt(t); ("ssp" != l || s) && ("ajax" == l?J(t, [], function(n){var a = G(t, n); for (e = 0; e < a.length; e++)D(t, a[e]); t.iInitDisplayStart = r, W(t), pt(t, !1), lt(t, n)}, t):(pt(t, !1), lt(t)))}function lt(t, e){t._bInitComplete = !0, (e || t.oInit.aaData) && h(t), Wt(t, "aoInitComplete", "init", [t, e])}function ut(t, e){var n = parseInt(e, 10); t._iDisplayLength = n, Ut(t), Wt(t, null, "length", [t, n])}function ct(t){for (var e = t.oClasses, n = t.sTableId, r = t.aLengthMenu, o = a.isArray(r[0]), i = o?r[0]:r, s = o?r[1]:r, l = a("<select/>", {name:n + "_length", "aria-controls":n, "class":e.sLengthSelect}), u = 0, c = i.length; c > u; u++)l[0][u] = new Option(s[u], i[u]); var f = a("<div><label/></div>").addClass(e.sLength); return t.aanFeatures.l || (f[0].id = n + "_length"), f.children().append(t.oLanguage.sLengthMenu.replace("_MENU_", l[0].outerHTML)), a("select", f).val(t._iDisplayLength).bind("change.DT", function(e){ut(t, a(this).val()), M(t)}), a(t.nTable).bind("length.dt.DT", function(e, n, r){t === n && a("select", f).val(r)}), f[0]}function ft(t){var e = t.sPaginationType, n = qt.ext.pager[e], r = "function" == typeof n, o = function(t){M(t)}, i = a("<div/>").addClass(t.oClasses.sPaging + e)[0], s = t.aanFeatures; return r || n.fnInit(t, i, o), s.p || (i.id = t.sTableId + "_paginate", t.aoDrawCallback.push({fn:function(t){if (r){var e, a, i = t._iDisplayStart, l = t._iDisplayLength, u = t.fnRecordsDisplay(), c = - 1 === l, f = c?0:Math.ceil(i / l), d = c?1:Math.ceil(u / l), h = n(f, d); for (e = 0, a = s.p.length; a > e; e++)Et(t, "pageButton")(t, s.p[e], e, h, f, d)} else n.fnUpdate(t, o)}, sName:"pagination"})), i}function dt(t, e, n){var a = t._iDisplayStart, r = t._iDisplayLength, o = t.fnRecordsDisplay(); 0 === o || - 1 === r?a = 0:"number" == typeof e?(a = e * r, a > o && (a = 0)):"first" == e?a = 0:"previous" == e?(a = r >= 0?a - r:0, 0 > a && (a = 0)):"next" == e?o > a + r && (a += r):"last" == e?a = Math.floor((o - 1) / r) * r:Ht(t, 0, "Unknown paging action: " + e, 5); var i = t._iDisplayStart !== a; return t._iDisplayStart = a, i && (Wt(t, null, "page", [t]), n && M(t)), i}function ht(t){return a("<div/>", {id:t.aanFeatures.r?null:t.sTableId + "_processing", "class":t.oClasses.sProcessing}).html(t.oLanguage.sProcessing).insertBefore(t.nTable)[0]}function pt(t, e){t.oFeatures.bProcessing && a(t.aanFeatures.r).css("display", e?"block":"none"), Wt(t, null, "processing", [t, e])}function gt(t){var e = a(t.nTable); e.attr("role", "grid"); var n = t.oScroll; if ("" === n.sX && "" === n.sY)return t.nTable; var r = n.sX, o = n.sY, i = t.oClasses, s = e.children("caption"), l = s.length?s[0]._captionSide:null, u = a(e[0].cloneNode(!1)), c = a(e[0].cloneNode(!1)), f = e.children("tfoot"), d = "<div/>", h = function(t){return t?Tt(t):null}; n.sX && "100%" === e.attr("width") && e.removeAttr("width"), f.length || (f = null); var p = a(d, {"class":i.sScrollWrapper}).append(a(d, {"class":i.sScrollHead}).css({overflow:"hidden", position:"relative", border:0, width:r?h(r):"100%"}).append(a(d, {"class":i.sScrollHeadInner}).css({"box-sizing":"content-box", width:n.sXInner || "100%"}).append(u.removeAttr("id").css("margin-left", 0).append("top" === l?s:null).append(e.children("thead"))))).append(a(d, {"class":i.sScrollBody}).css({position:"relative", overflow:"auto", width:h(r)}).append(e)); f && p.append(a(d, {"class":i.sScrollFoot}).css({overflow:"hidden", border:0, width:r?h(r):"100%"}).append(a(d, {"class":i.sScrollFootInner}).append(c.removeAttr("id").css("margin-left", 0).append("bottom" === l?s:null).append(e.children("tfoot"))))); var g = p.children(), b = g[0], v = g[1], S = f?g[2]:null; return r && a(v).on("scroll.DT", function(t){var e = this.scrollLeft; b.scrollLeft = e, f && (S.scrollLeft = e)}), a(v).css(o && n.bCollapse?"max-height":"height", o), t.nScrollHead = b, t.nScrollBody = v, t.nScrollFoot = S, t.aoDrawCallback.push({fn:bt, sName:"scrolling"}), p[0]}function bt(t){var e, n, r, o, i, s, l, u, c, f = t.oScroll, d = f.sX, h = f.sXInner, g = f.sY, b = f.iBarWidth, v = a(t.nScrollHead), S = v[0].style, m = v.children("div"), D = m[0].style, y = m.children("table"), _ = t.nScrollBody, T = a(_), w = _.style, C = a(t.nScrollFoot), x = C.children("div"), I = x.children("table"), A = a(t.nTHead), F = a(t.nTable), L = F[0], P = L.style, R = t.nTFoot?a(t.nTFoot):null, j = t.oBrowser, H = j.bScrollOversize, N = [], k = [], O = [], M = function(t){var e = t.style; e.paddingTop = "0", e.paddingBottom = "0", e.borderTopWidth = "0", e.borderBottomWidth = "0", e.height = 0}; F.children("thead, tfoot").remove(), i = A.clone().prependTo(F), e = A.find("tr"), r = i.find("tr"), i.find("th, td").removeAttr("tabindex"), R && (s = R.clone().prependTo(F), n = R.find("tr"), o = s.find("tr")), d || (w.width = "100%", v[0].style.width = "100%"), a.each(B(t, i), function(e, n){l = p(t, e), n.style.width = t.aoColumns[l].sWidth}), R && vt(function(t){t.style.width = ""}, o), c = F.outerWidth(), "" === d?(P.width = "100%", H && (F.find("tbody").height() > _.offsetHeight || "scroll" == T.css("overflow-y")) && (P.width = Tt(F.outerWidth() - b)), c = F.outerWidth()):"" !== h && (P.width = Tt(h), c = F.outerWidth()), vt(M, r), vt(function(t){O.push(t.innerHTML), N.push(Tt(a(t).css("width")))}, r), vt(function(t, e){t.style.width = N[e]}, e), a(r).height(0), R && (vt(M, o), vt(function(t){k.push(Tt(a(t).css("width")))}, o), vt(function(t, e){t.style.width = k[e]}, n), a(o).height(0)), vt(function(t, e){t.innerHTML = '<div class="dataTables_sizing" style="height:0;overflow:hidden;">' + O[e] + "</div>", t.style.width = N[e]}, r), R && vt(function(t, e){t.innerHTML = "", t.style.width = k[e]}, o), F.outerWidth() < c?(u = _.scrollHeight > _.offsetHeight || "scroll" == T.css("overflow-y")?c + b:c, H && (_.scrollHeight > _.offsetHeight || "scroll" == T.css("overflow-y")) && (P.width = Tt(u - b)), ("" === d || "" !== h) && Ht(t, 1, "Possible column misalignment", 6)):u = "100%", w.width = Tt(u), S.width = Tt(u), R && (t.nScrollFoot.style.width = Tt(u)), g || H && (w.height = Tt(L.offsetHeight + b)); var W = F.outerWidth(); y[0].style.width = Tt(W), D.width = Tt(W); var U = F.height() > _.clientHeight || "scroll" == T.css("overflow-y"), E = "padding" + (j.bScrollbarLeft?"Left":"Right"); D[E] = U?b + "px":"0px", R && (I[0].style.width = Tt(W), x[0].style.width = Tt(W), x[0].style[E] = U?b + "px":"0px"), T.scroll(), !t.bSorted && !t.bFiltered || t._drawHold || (_.scrollTop = 0)}function vt(t, e, n){for (var a, r, o = 0, i = 0, s = e.length; s > i; ){for (a = e[i].firstChild, r = n?n[i].firstChild:null; a; )1 === a.nodeType && (n?t(a, r, o):t(a, o), o++), a = a.nextSibling, r = n?r.nextSibling:null; i++}}function St(e){var n, r, o, i, s, l = e.nTable, u = e.aoColumns, c = e.oScroll, f = c.sY, d = c.sX, g = c.sXInner, S = u.length, m = v(e, "bVisible"), D = a("th", e.nTHead), y = l.getAttribute("width"), _ = l.parentNode, T = !1, w = e.oBrowser, C = w.bScrollOversize, x = l.style.width; for (x && - 1 !== x.indexOf("%") && (y = x), n = 0; n < m.length; n++)r = u[m[n]], null !== r.sWidth && (r.sWidth = Dt(r.sWidthOrig, _), T = !0); if (C || !T && !d && !f && S == b(e) && S == D.length)for (n = 0; S > n; n++){var I = p(e, n); I && (u[I].sWidth = Tt(D.eq(n).width()))} else{var A = a(l).clone().css("visibility", "hidden").removeAttr("id"); A.find("tbody tr").remove(); var F = a("<tr/>").appendTo(A.find("tbody")); for (A.find("thead, tfoot").remove(), A.append(a(e.nTHead).clone()).append(a(e.nTFoot).clone()), A.find("tfoot th, tfoot td").css("width", ""), D = B(e, A.find("thead")[0]), n = 0; n < m.length; n++)r = u[m[n]], D[n].style.width = null !== r.sWidthOrig && "" !== r.sWidthOrig?Tt(r.sWidthOrig):""; if (e.aoData.length)for (n = 0; n < m.length; n++)o = m[n], r = u[o], a(yt(e, o)).clone(!1).append(r.sContentPadding).appendTo(F); var L = a("<div/>").css(d || f?{position:"absolute", top:0, left:0, height:1, right:0, overflow:"hidden"}:{}).append(A).appendTo(_); if (d && g?A.width(g):d?(A.css("width", "auto"), A.width() < _.clientWidth && A.width(_.clientWidth)):f?A.width(_.clientWidth):y && A.width(y), d){var P = 0; for (n = 0; n < m.length; n++)r = u[m[n]], s = w.bBounding?D[n].getBoundingClientRect().width:a(D[n]).outerWidth(), P += null === r.sWidthOrig?s:parseInt(r.sWidth, 10) + s - a(D[n]).width(); A.width(Tt(P)), l.style.width = Tt(P)}for (n = 0; n < m.length; n++)r = u[m[n]], i = a(D[n]).width(), i && (r.sWidth = Tt(i)); l.style.width = Tt(A.css("width")), L.remove()}if (y && (l.style.width = Tt(y)), (y || d) && !e._reszEvt){var R = function(){a(t).bind("resize.DT-" + e.sInstance, mt(function(){h(e)}))}; C?setTimeout(R, 1e3):R(), e._reszEvt = !0}}function mt(t, e){var a, r, o = e !== n?e:200; return function(){var e = this, i = + new Date, s = arguments; a && a + o > i?(clearTimeout(r), r = setTimeout(function(){a = n, t.apply(e, s)}, o)):(a = i, t.apply(e, s))}}function Dt(t, n){if (!t)return 0; var r = a("<div/>").css("width", Tt(t)).appendTo(n || e.body), o = r[0].offsetWidth; return r.remove(), o}function yt(t, e){var n = _t(t, e); if (0 > n)return null; var r = t.aoData[n]; return r.nTr?r.anCells[e]:a("<td/>").html(w(t, n, e, "display"))[0]}function _t(t, e){for (var n, a = - 1, r = - 1, o = 0, i = t.aoData.length; i > o; o++)n = w(t, o, e, "display") + "", n = n.replace(ye, ""), n.length > a && (a = n.length, r = o); return r}function Tt(t){return null === t?"0px":"number" == typeof t?0 > t?"0px":t + "px":t.match(/\d$/)?t + "px":t}function wt(t){var e, r, o, i, s, l, u, c = [], f = t.aoColumns, d = t.aaSortingFixed, h = a.isPlainObject(d), p = [], g = function(t){t.length && !a.isArray(t[0])?p.push(t):a.merge(p, t)}; for (a.isArray(d) && g(d), h && d.pre && g(d.pre), g(t.aaSorting), h && d.post && g(d.post), e = 0; e < p.length; e++)for (u = p[e][0], i = f[u].aDataSort, r = 0, o = i.length; o > r; r++)s = i[r], l = f[s].sType || "string", p[e]._idx === n && (p[e]._idx = a.inArray(p[e][1], f[s].asSorting)), c.push({src:u, col:s, dir:p[e][1], index:p[e]._idx, type:l, formatter:qt.ext.type.order[l + "-pre"]}); return c}function Ct(t){var e, n, a, r, o, i = [], s = qt.ext.type.order, l = t.aoData, u = (t.aoColumns, 0), c = t.aiDisplayMaster; for (S(t), o = wt(t), e = 0, n = o.length; n > e; e++)r = o[e], r.formatter && u++, Lt(t, r.col); if ("ssp" != Bt(t) && 0 !== o.length){for (e = 0, a = c.length; a > e; e++)i[c[e]] = e; u === o.length?c.sort(function(t, e){var n, a, r, s, u, c = o.length, f = l[t]._aSortData, d = l[e]._aSortData; for (r = 0; c > r; r++)if (u = o[r], n = f[u.col], a = d[u.col], s = a > n? - 1:n > a?1:0, 0 !== s)return"asc" === u.dir?s: - s; return n = i[t], a = i[e], a > n? - 1:n > a?1:0}):c.sort(function(t, e){var n, a, r, u, c, f, d = o.length, h = l[t]._aSortData, p = l[e]._aSortData; for (r = 0; d > r; r++)if (c = o[r], n = h[c.col], a = p[c.col], f = s[c.type + "-" + c.dir] || s["string-" + c.dir], u = f(n, a), 0 !== u)return u; return n = i[t], a = i[e], a > n? - 1:n > a?1:0})}t.bSorted = !0}function xt(t){for (var e, n, a = t.aoColumns, r = wt(t), o = t.oLanguage.oAria, i = 0, s = a.length; s > i; i++){var l = a[i], u = l.asSorting, c = l.sTitle.replace(/<.*?>/g, ""), f = l.nTh;
2
+ f.removeAttribute("aria-sort"), l.bSortable?(r.length > 0 && r[0].col == i?(f.setAttribute("aria-sort", "asc" == r[0].dir?"ascending":"descending"), n = u[r[0].index + 1] || u[0]):n = u[0], e = c + ("asc" === n?o.sSortAscending:o.sSortDescending)):e = c, f.setAttribute("aria-label", e)}}function It(t, e, r, o){var i, s = t.aoColumns[e], l = t.aaSorting, u = s.asSorting, c = function(t, e){var r = t._idx; return r === n && (r = a.inArray(t[1], u)), r + 1 < u.length?r + 1:e?null:0}; if ("number" == typeof l[0] && (l = t.aaSorting = [l]), r && t.oFeatures.bSortMulti){var f = a.inArray(e, ce(l, "0")); - 1 !== f?(i = c(l[f], !0), null === i && 1 === l.length && (i = 0), null === i?l.splice(f, 1):(l[f][1] = u[i], l[f]._idx = i)):(l.push([e, u[0], 0]), l[l.length - 1]._idx = 0)} else l.length && l[0][0] == e?(i = c(l[0]), l.length = 1, l[0][1] = u[i], l[0]._idx = i):(l.length = 0, l.push([e, u[0]]), l[0]._idx = 0); W(t), "function" == typeof o && o(t)}function At(t, e, n, a){var r = t.aoColumns[n]; Ot(e, {}, function(e){r.bSortable !== !1 && (t.oFeatures.bProcessing?(pt(t, !0), setTimeout(function(){It(t, n, e.shiftKey, a), "ssp" !== Bt(t) && pt(t, !1)}, 0)):It(t, n, e.shiftKey, a))})}function Ft(t){var e, n, r, o = t.aLastSort, i = t.oClasses.sSortColumn, s = wt(t), l = t.oFeatures; if (l.bSort && l.bSortClasses){for (e = 0, n = o.length; n > e; e++)r = o[e].src, a(ce(t.aoData, "anCells", r)).removeClass(i + (2 > e?e + 1:3)); for (e = 0, n = s.length; n > e; e++)r = s[e].src, a(ce(t.aoData, "anCells", r)).addClass(i + (2 > e?e + 1:3))}t.aLastSort = s}function Lt(t, e){var n, a = t.aoColumns[e], r = qt.ext.order[a.sSortDataType]; r && (n = r.call(t.oInstance, t, e, g(t, e))); for (var o, i, s = qt.ext.type.order[a.sType + "-pre"], l = 0, u = t.aoData.length; u > l; l++)o = t.aoData[l], o._aSortData || (o._aSortData = []), (!o._aSortData[e] || r) && (i = r?n[l]:w(t, l, e, "sort"), o._aSortData[e] = s?s(i):i)}function Pt(t){if (t.oFeatures.bStateSave && !t.bDestroying){var e = {time: + new Date, start:t._iDisplayStart, length:t._iDisplayLength, order:a.extend(!0, [], t.aaSorting), search:nt(t.oPreviousSearch), columns:a.map(t.aoColumns, function(e, n){return{visible:e.bVisible, search:nt(t.aoPreSearchCols[n])}})}; Wt(t, "aoStateSaveParams", "stateSaveParams", [t, e]), t.oSavedState = e, t.fnStateSaveCallback.call(t.oInstance, t, e)}}function Rt(t, e){var r, o, i = t.aoColumns; if (t.oFeatures.bStateSave){var s = t.fnStateLoadCallback.call(t.oInstance, t); if (s && s.time){var l = Wt(t, "aoStateLoadParams", "stateLoadParams", [t, s]); if ( - 1 === a.inArray(!1, l)){var u = t.iStateDuration; if (!(u > 0 && s.time < + new Date - 1e3 * u) && i.length === s.columns.length){for (t.oLoadedState = a.extend(!0, {}, s), s.start !== n && (t._iDisplayStart = s.start, t.iInitDisplayStart = s.start), s.length !== n && (t._iDisplayLength = s.length), s.order !== n && (t.aaSorting = [], a.each(s.order, function(e, n){t.aaSorting.push(n[0] >= i.length?[0, n[1]]:n)})), s.search !== n && a.extend(t.oPreviousSearch, at(s.search)), r = 0, o = s.columns.length; o > r; r++){var c = s.columns[r]; c.visible !== n && (i[r].bVisible = c.visible), c.search !== n && a.extend(t.aoPreSearchCols[r], at(c.search))}Wt(t, "aoStateLoaded", "stateLoaded", [t, s])}}}}}function jt(t){var e = qt.settings, n = a.inArray(t, ce(e, "nTable")); return - 1 !== n?e[n]:null}function Ht(e, n, a, r){if (a = "DataTables warning: " + (e?"table id=" + e.sTableId + " - ":"") + a, r && (a += ". For more information about this error, please see http://datatables.net/tn/" + r), n)t.console && console.log && console.log(a); else{var o = qt.ext, i = o.sErrMode || o.errMode; if (e && Wt(e, null, "error", [e, r, a]), "alert" == i)alert(a); else{if ("throw" == i)throw new Error(a); "function" == typeof i && i(e, r, a)}}}function Nt(t, e, r, o){return a.isArray(r)?void a.each(r, function(n, r){a.isArray(r)?Nt(t, e, r[0], r[1]):Nt(t, e, r)}):(o === n && (o = r), void(e[r] !== n && (t[o] = e[r])))}function kt(t, e, n){var r; for (var o in e)e.hasOwnProperty(o) && (r = e[o], a.isPlainObject(r)?(a.isPlainObject(t[o]) || (t[o] = {}), a.extend(!0, t[o], r)):n && "data" !== o && "aaData" !== o && a.isArray(r)?t[o] = r.slice():t[o] = r); return t}function Ot(t, e, n){a(t).bind("click.DT", e, function(e){t.blur(), n(e)}).bind("keypress.DT", e, function(t){13 === t.which && (t.preventDefault(), n(t))}).bind("selectstart.DT", function(){return!1})}function Mt(t, e, n, a){n && t[e].push({fn:n, sName:a})}function Wt(t, e, n, r){var o = []; if (e && (o = a.map(t[e].slice().reverse(), function(e, n){return e.fn.apply(t.oInstance, r)})), null !== n){var i = a.Event(n + ".dt"); a(t.nTable).trigger(i, r), o.push(i.result)}return o}function Ut(t){var e = t._iDisplayStart, n = t.fnDisplayEnd(), a = t._iDisplayLength; e >= n && (e = n - a), e -= e % a, ( - 1 === a || 0 > e) && (e = 0), t._iDisplayStart = e}function Et(t, e){var n = t.renderer, r = qt.ext.renderer[e]; return a.isPlainObject(n) && n[e]?r[n[e]] || r._:"string" == typeof n?r[n] || r._:r._}function Bt(t){return t.oFeatures.bServerSide?"ssp":t.ajax || t.sAjaxSource?"ajax":"dom"}function Jt(t, e){var n = [], a = Xe.numbers_length, r = Math.floor(a / 2); return a >= e?n = de(0, e):r >= t?(n = de(0, a - 2), n.push("ellipsis"), n.push(e - 1)):t >= e - 1 - r?(n = de(e - (a - 2), e), n.splice(0, 0, "ellipsis"), n.splice(0, 0, 0)):(n = de(t - r + 2, t + r - 1), n.push("ellipsis"), n.push(e - 1), n.splice(0, 0, "ellipsis"), n.splice(0, 0, 0)), n.DT_el = "span", n}function Xt(t){a.each({num:function(e){return Ve(e, t)}, "num-fmt":function(e){return Ve(e, t, ae)}, "html-num":function(e){return Ve(e, t, Kt)}, "html-num-fmt":function(e){return Ve(e, t, Kt, ae)}}, function(e, n){Gt.type.order[e + t + "-pre"] = n, e.match(/^html\-/) && (Gt.type.search[e + t] = Gt.type.search.html)})}function Vt(t){return function(){var e = [jt(this[qt.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments)); return qt.ext.internal[t].apply(this, e)}}var qt, Gt, $t, zt, Yt, Qt = {}, Zt = /[\r\n]/g, Kt = /<.*?>/g, te = /^[\w\+\-]/, ee = /[\w\+\-]$/, ne = new RegExp("(\\" + ["/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^", "-"].join("|\\") + ")", "g"), ae = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi, re = function(t){return t && t !== !0 && "-" !== t?!1:!0}, oe = function(t){var e = parseInt(t, 10); return!isNaN(e) && isFinite(t)?e:null}, ie = function(t, e){return Qt[e] || (Qt[e] = new RegExp(tt(e), "g")), "string" == typeof t && "." !== e?t.replace(/\./g, "").replace(Qt[e], "."):t}, se = function(t, e, n){var a = "string" == typeof t; return re(t)?!0:(e && a && (t = ie(t, e)), n && a && (t = t.replace(ae, "")), !isNaN(parseFloat(t)) && isFinite(t))}, le = function(t){return re(t) || "string" == typeof t}, ue = function(t, e, n){if (re(t))return!0; var a = le(t); return a && se(pe(t), e, n)?!0:null}, ce = function(t, e, a){var r = [], o = 0, i = t.length; if (a !== n)for (; i > o; o++)t[o] && t[o][e] && r.push(t[o][e][a]); else for (; i > o; o++)t[o] && r.push(t[o][e]); return r}, fe = function(t, e, a, r){var o = [], i = 0, s = e.length; if (r !== n)for (; s > i; i++)t[e[i]][a] && o.push(t[e[i]][a][r]); else for (; s > i; i++)o.push(t[e[i]][a]); return o}, de = function(t, e){var a, r = []; e === n?(e = 0, a = t):(a = e, e = t); for (var o = e; a > o; o++)r.push(o); return r}, he = function(t){for (var e = [], n = 0, a = t.length; a > n; n++)t[n] && e.push(t[n]); return e}, pe = function(t){return t.replace(Kt, "")}, ge = function(t){var e, n, a, r = [], o = t.length, i = 0; t:for (n = 0; o > n; n++){for (e = t[n], a = 0; i > a; a++)if (r[a] === e)continue t; r.push(e), i++}return r}, be = function(t, e, a){t[e] !== n && (t[a] = t[e])}, ve = /\[.*?\]$/, Se = /\(\)$/, me = a("<div>")[0], De = me.textContent !== n, ye = /<.*?>/g; qt = function(t){this.$ = function(t, e){return this.api(!0).$(t, e)}, this._ = function(t, e){return this.api(!0).rows(t, e).data()}, this.api = function(t){return new $t(t?jt(this[Gt.iApiIndex]):this)}, this.fnAddData = function(t, e){var r = this.api(!0), o = a.isArray(t) && (a.isArray(t[0]) || a.isPlainObject(t[0]))?r.rows.add(t):r.row.add(t); return(e === n || e) && r.draw(), o.flatten().toArray()}, this.fnAdjustColumnSizing = function(t){var e = this.api(!0).columns.adjust(), a = e.settings()[0], r = a.oScroll; t === n || t?e.draw(!1):("" !== r.sX || "" !== r.sY) && bt(a)}, this.fnClearTable = function(t){var e = this.api(!0).clear(); (t === n || t) && e.draw()}, this.fnClose = function(t){this.api(!0).row(t).child.hide()}, this.fnDeleteRow = function(t, e, a){var r = this.api(!0), o = r.rows(t), i = o.settings()[0], s = i.aoData[o[0][0]]; return o.remove(), e && e.call(this, i, s), (a === n || a) && r.draw(), s}, this.fnDestroy = function(t){this.api(!0).destroy(t)}, this.fnDraw = function(t){this.api(!0).draw(t)}, this.fnFilter = function(t, e, a, r, o, i){var s = this.api(!0); null === e || e === n?s.search(t, a, r, i):s.column(e).search(t, a, r, i), s.draw()}, this.fnGetData = function(t, e){var a = this.api(!0); if (t !== n){var r = t.nodeName?t.nodeName.toLowerCase():""; return e !== n || "td" == r || "th" == r?a.cell(t, e).data():a.row(t).data() || null}return a.data().toArray()}, this.fnGetNodes = function(t){var e = this.api(!0); return t !== n?e.row(t).node():e.rows().nodes().flatten().toArray()}, this.fnGetPosition = function(t){var e = this.api(!0), n = t.nodeName.toUpperCase(); if ("TR" == n)return e.row(t).index(); if ("TD" == n || "TH" == n){var a = e.cell(t).index(); return[a.row, a.columnVisible, a.column]}return null}, this.fnIsOpen = function(t){return this.api(!0).row(t).child.isShown()}, this.fnOpen = function(t, e, n){return this.api(!0).row(t).child(e, n).show().child()[0]}, this.fnPageChange = function(t, e){var a = this.api(!0).page(t); (e === n || e) && a.draw(!1)}, this.fnSetColumnVis = function(t, e, a){var r = this.api(!0).column(t).visible(e); (a === n || a) && r.columns.adjust().draw()}, this.fnSettings = function(){return jt(this[Gt.iApiIndex])}, this.fnSort = function(t){this.api(!0).order(t).draw()}, this.fnSortListener = function(t, e, n){this.api(!0).order.listener(t, e, n)}, this.fnUpdate = function(t, e, a, r, o){var i = this.api(!0); return a === n || null === a?i.row(e).data(t):i.cell(e, a).data(t), (o === n || o) && i.columns.adjust(), (r === n || r) && i.draw(), 0}, this.fnVersionCheck = Gt.fnVersionCheck; var e = this, r = t === n, c = this.length; r && (t = {}), this.oApi = this.internal = Gt.internal; for (var h in qt.ext.internal)h && (this[h] = Vt(h)); return this.each(function(){var h, p = {}, g = c > 1?kt(p, t, !0):t, b = 0, v = this.getAttribute("id"), S = !1, _ = qt.defaults, T = a(this); if ("table" != this.nodeName.toLowerCase())return void Ht(null, 0, "Non-table node initialisation (" + this.nodeName + ")", 2); s(_), l(_.column), o(_, _, !0), o(_.column, _.column, !0), o(_, a.extend(g, T.data())); var w = qt.settings; for (b = 0, h = w.length; h > b; b++){var C = w[b]; if (C.nTable == this || C.nTHead.parentNode == this || C.nTFoot && C.nTFoot.parentNode == this){var x = g.bRetrieve !== n?g.bRetrieve:_.bRetrieve, A = g.bDestroy !== n?g.bDestroy:_.bDestroy; if (r || x)return C.oInstance; if (A){C.oInstance.fnDestroy(); break}return void Ht(C, 0, "Cannot reinitialise DataTable", 3)}if (C.sTableId == this.id){w.splice(b, 1); break}}(null === v || "" === v) && (v = "DataTables_Table_" + qt.ext._unique++, this.id = v); var F = a.extend(!0, {}, qt.models.oSettings, {sDestroyWidth:T[0].style.width, sInstance:v, sTableId:v}); F.nTable = this, F.oApi = e.internal, F.oInit = g, w.push(F), F.oInstance = 1 === e.length?e:T.dataTable(), s(g), g.oLanguage && i(g.oLanguage), g.aLengthMenu && !g.iDisplayLength && (g.iDisplayLength = a.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]), g = kt(a.extend(!0, {}, _), g), Nt(F.oFeatures, g, ["bPaginate", "bLengthChange", "bFilter", "bSort", "bSortMulti", "bInfo", "bProcessing", "bAutoWidth", "bSortClasses", "bServerSide", "bDeferRender"]), Nt(F, g, ["asStripeClasses", "ajax", "fnServerData", "fnFormatNumber", "sServerMethod", "aaSorting", "aaSortingFixed", "aLengthMenu", "sPaginationType", "sAjaxSource", "sAjaxDataProp", "iStateDuration", "sDom", "bSortCellsTop", "iTabIndex", "fnStateLoadCallback", "fnStateSaveCallback", "renderer", "searchDelay", "rowId", ["iCookieDuration", "iStateDuration"], ["oSearch", "oPreviousSearch"], ["aoSearchCols", "aoPreSearchCols"], ["iDisplayLength", "_iDisplayLength"], ["bJQueryUI", "bJUI"]]), Nt(F.oScroll, g, [["sScrollX", "sX"], ["sScrollXInner", "sXInner"], ["sScrollY", "sY"], ["bScrollCollapse", "bCollapse"]]), Nt(F.oLanguage, g, "fnInfoCallback"), Mt(F, "aoDrawCallback", g.fnDrawCallback, "user"), Mt(F, "aoServerParams", g.fnServerParams, "user"), Mt(F, "aoStateSaveParams", g.fnStateSaveParams, "user"), Mt(F, "aoStateLoadParams", g.fnStateLoadParams, "user"), Mt(F, "aoStateLoaded", g.fnStateLoaded, "user"), Mt(F, "aoRowCallback", g.fnRowCallback, "user"), Mt(F, "aoRowCreatedCallback", g.fnCreatedRow, "user"), Mt(F, "aoHeaderCallback", g.fnHeaderCallback, "user"), Mt(F, "aoFooterCallback", g.fnFooterCallback, "user"), Mt(F, "aoInitComplete", g.fnInitComplete, "user"), Mt(F, "aoPreDrawCallback", g.fnPreDrawCallback, "user"), F.rowIdFn = I(g.rowId), u(F); var L = F.oClasses; if (g.bJQueryUI?(a.extend(L, qt.ext.oJUIClasses, g.oClasses), g.sDom === _.sDom && "lfrtip" === _.sDom && (F.sDom = '<"H"lfr>t<"F"ip>'), F.renderer?a.isPlainObject(F.renderer) && !F.renderer.header && (F.renderer.header = "jqueryui"):F.renderer = "jqueryui"):a.extend(L, qt.ext.classes, g.oClasses), T.addClass(L.sTable), F.iInitDisplayStart === n && (F.iInitDisplayStart = g.iDisplayStart, F._iDisplayStart = g.iDisplayStart), null !== g.iDeferLoading){F.bDeferLoading = !0; var P = a.isArray(g.iDeferLoading); F._iRecordsDisplay = P?g.iDeferLoading[0]:g.iDeferLoading, F._iRecordsTotal = P?g.iDeferLoading[1]:g.iDeferLoading}var R = F.oLanguage; a.extend(!0, R, g.oLanguage), "" !== R.sUrl && (a.ajax({dataType:"json", url:R.sUrl, success:function(t){i(t), o(_.oLanguage, t), a.extend(!0, R, t), st(F)}, error:function(){st(F)}}), S = !0), null === g.asStripeClasses && (F.asStripeClasses = [L.sStripeOdd, L.sStripeEven]); var j = F.asStripeClasses, H = T.children("tbody").find("tr").eq(0); - 1 !== a.inArray(!0, a.map(j, function(t, e){return H.hasClass(t)})) && (a("tbody tr", this).removeClass(j.join(" ")), F.asDestroyStripes = j.slice()); var N, k = [], O = this.getElementsByTagName("thead"); if (0 !== O.length && (E(F.aoHeader, O[0]), k = B(F)), null === g.aoColumns)for (N = [], b = 0, h = k.length; h > b; b++)N.push(null); else N = g.aoColumns; for (b = 0, h = N.length; h > b; b++)f(F, k?k[b]:null); if (m(F, g.aoColumnDefs, N, function(t, e){d(F, t, e)}), H.length){var M = function(t, e){return null !== t.getAttribute("data-" + e)?e:null}; a(H[0]).children("th, td").each(function(t, e){var a = F.aoColumns[t]; if (a.mData === t){var r = M(e, "sort") || M(e, "order"), o = M(e, "filter") || M(e, "search"); (null !== r || null !== o) && (a.mData = {_:t + ".display", sort:null !== r?t + ".@data-" + r:n, type:null !== r?t + ".@data-" + r:n, filter:null !== o?t + ".@data-" + o:n}, d(F, t))}})}var W = F.oFeatures; if (g.bStateSave && (W.bStateSave = !0, Rt(F, g), Mt(F, "aoDrawCallback", Pt, "state_save")), g.aaSorting === n){var U = F.aaSorting; for (b = 0, h = U.length; h > b; b++)U[b][1] = F.aoColumns[b].asSorting[0]}Ft(F), W.bSort && Mt(F, "aoDrawCallback", function(){if (F.bSorted){var t = wt(F), e = {}; a.each(t, function(t, n){e[n.src] = n.dir}), Wt(F, null, "order", [F, t, e]), xt(F)}}), Mt(F, "aoDrawCallback", function(){(F.bSorted || "ssp" === Bt(F) || W.bDeferRender) && Ft(F)}, "sc"); var J = T.children("caption").each(function(){this._captionSide = T.css("caption-side")}), X = T.children("thead"); 0 === X.length && (X = a("<thead/>").appendTo(this)), F.nTHead = X[0]; var V = T.children("tbody"); 0 === V.length && (V = a("<tbody/>").appendTo(this)), F.nTBody = V[0]; var q = T.children("tfoot"); if (0 === q.length && J.length > 0 && ("" !== F.oScroll.sX || "" !== F.oScroll.sY) && (q = a("<tfoot/>").appendTo(this)), 0 === q.length || 0 === q.children().length?T.addClass(L.sNoFooter):q.length > 0 && (F.nTFoot = q[0], E(F.aoFooter, F.nTFoot)), g.aaData)for (b = 0; b < g.aaData.length; b++)D(F, g.aaData[b]); else(F.bDeferLoading || "dom" == Bt(F)) && y(F, a(F.nTBody).children("tr")); F.aiDisplay = F.aiDisplayMaster.slice(), F.bInitialised = !0, S === !1 && st(F)}), e = null, this}; var _e = [], Te = Array.prototype, we = function(t){var e, n, r = qt.settings, o = a.map(r, function(t, e){return t.nTable}); return t?t.nTable && t.oApi?[t]:t.nodeName && "table" === t.nodeName.toLowerCase()?(e = a.inArray(t, o), - 1 !== e?[r[e]]:null):t && "function" == typeof t.settings?t.settings().toArray():("string" == typeof t?n = a(t):t instanceof a && (n = t), n?n.map(function(t){return e = a.inArray(this, o), - 1 !== e?r[e]:null}).toArray():void 0):[]}; $t = function(t, e){if (!(this instanceof $t))return new $t(t, e); var n = [], r = function(t){var e = we(t); e && (n = n.concat(e))}; if (a.isArray(t))for (var o = 0, i = t.length; i > o; o++)r(t[o]); else r(t); this.context = ge(n), e && a.merge(this, e), this.selector = {rows:null, cols:null, opts:null}, $t.extend(this, this, _e)}, qt.Api = $t, a.extend($t.prototype, {any:function(){return 0 !== this.count()}, concat:Te.concat, context:[], count:function(){return this.flatten().length}, each:function(t){for (var e = 0, n = this.length; n > e; e++)t.call(this, this[e], e, this); return this}, eq:function(t){var e = this.context; return e.length > t?new $t(e[t], this[t]):null}, filter:function(t){var e = []; if (Te.filter)e = Te.filter.call(this, t, this); else for (var n = 0, a = this.length; a > n; n++)t.call(this, this[n], n, this) && e.push(this[n]); return new $t(this.context, e)}, flatten:function(){var t = []; return new $t(this.context, t.concat.apply(t, this.toArray()))}, join:Te.join, indexOf:Te.indexOf || function(t, e){for (var n = e || 0, a = this.length; a > n; n++)if (this[n] === t)return n; return - 1}, iterator:function(t, e, a, r){var o, i, s, l, u, c, f, d, h = [], p = this.context, g = this.selector; for ("string" == typeof t && (r = a, a = e, e = t, t = !1), i = 0, s = p.length; s > i; i++){var b = new $t(p[i]); if ("table" === e)o = a.call(b, p[i], i), o !== n && h.push(o); else if ("columns" === e || "rows" === e)o = a.call(b, p[i], this[i], i), o !== n && h.push(o); else if ("column" === e || "column-rows" === e || "row" === e || "cell" === e)for (f = this[i], "column-rows" === e && (c = Le(p[i], g.opts)), l = 0, u = f.length; u > l; l++)d = f[l], o = "cell" === e?a.call(b, p[i], d.row, d.column, i, l):a.call(b, p[i], d, i, l, c), o !== n && h.push(o)}if (h.length || r){var v = new $t(p, t?h.concat.apply([], h):h), S = v.selector; return S.rows = g.rows, S.cols = g.cols, S.opts = g.opts, v}return this}, lastIndexOf:Te.lastIndexOf || function(t, e){return this.indexOf.apply(this.toArray.reverse(), arguments)}, length:0, map:function(t){var e = []; if (Te.map)e = Te.map.call(this, t, this); else for (var n = 0, a = this.length; a > n; n++)e.push(t.call(this, this[n], n)); return new $t(this.context, e)}, pluck:function(t){return this.map(function(e){return e[t]})}, pop:Te.pop, push:Te.push, reduce:Te.reduce || function(t, e){return c(this, t, e, 0, this.length, 1)}, reduceRight:Te.reduceRight || function(t, e){return c(this, t, e, this.length - 1, - 1, - 1)}, reverse:Te.reverse, selector:null, shift:Te.shift, sort:Te.sort, splice:Te.splice, toArray:function(){return Te.slice.call(this)}, to$:function(){return a(this)}, toJQuery:function(){return a(this)}, unique:function(){return new $t(this.context, ge(this))}, unshift:Te.unshift}), $t.extend = function(t, e, n){if (n.length && e && (e instanceof $t || e.__dt_wrapper)){var r, o, i, s = function(t, e, n){return function(){var a = e.apply(t, arguments); return $t.extend(a, a, n.methodExt), a}}; for (r = 0, o = n.length; o > r; r++)i = n[r], e[i.name] = "function" == typeof i.val?s(t, i.val, i):a.isPlainObject(i.val)?{}:i.val, e[i.name].__dt_wrapper = !0, $t.extend(t, e[i.name], i.propExt)}}, $t.register = zt = function(t, e){if (a.isArray(t))for (var n = 0, r = t.length; r > n; n++)$t.register(t[n], e); else{var o, i, s, l, u = t.split("."), c = _e, f = function(t, e){for (var n = 0, a = t.length; a > n; n++)if (t[n].name === e)return t[n]; return null}; for (o = 0, i = u.length; i > o; o++){l = - 1 !== u[o].indexOf("()"), s = l?u[o].replace("()", ""):u[o]; var d = f(c, s); d || (d = {name:s, val:{}, methodExt:[], propExt:[]}, c.push(d)), o === i - 1?d.val = e:c = l?d.methodExt:d.propExt}}}, $t.registerPlural = Yt = function(t, e, r){$t.register(t, r), $t.register(e, function(){var t = r.apply(this, arguments); return t === this?this:t instanceof $t?t.length?a.isArray(t[0])?new $t(t.context, t[0]):t[0]:n:t})}; var Ce = function(t, e){if ("number" == typeof t)return[e[t]]; var n = a.map(e, function(t, e){return t.nTable}); return a(n).filter(t).map(function(t){var r = a.inArray(this, n); return e[r]}).toArray()}; zt("tables()", function(t){return t?new $t(Ce(t, this.context)):this}), zt("table()", function(t){var e = this.tables(t), n = e.context; return n.length?new $t(n[0]):e}), Yt("tables().nodes()", "table().node()", function(){return this.iterator("table", function(t){return t.nTable}, 1)}), Yt("tables().body()", "table().body()", function(){return this.iterator("table", function(t){return t.nTBody}, 1)}), Yt("tables().header()", "table().header()", function(){return this.iterator("table", function(t){return t.nTHead}, 1)}), Yt("tables().footer()", "table().footer()", function(){return this.iterator("table", function(t){return t.nTFoot}, 1)}), Yt("tables().containers()", "table().container()", function(){return this.iterator("table", function(t){return t.nTableWrapper}, 1)}), zt("draw()", function(t){return this.iterator("table", function(e){"page" === t?M(e):("string" == typeof t && (t = "full-hold" === t?!1:!0), W(e, t === !1))})}), zt("page()", function(t){return t === n?this.page.info().page:this.iterator("table", function(e){dt(e, t)})}), zt("page.info()", function(t){if (0 === this.context.length)return n; var e = this.context[0], a = e._iDisplayStart, r = e._iDisplayLength, o = e.fnRecordsDisplay(), i = - 1 === r; return{page:i?0:Math.floor(a / r), pages:i?1:Math.ceil(o / r), start:a, end:e.fnDisplayEnd(), length:r, recordsTotal:e.fnRecordsTotal(), recordsDisplay:o, serverSide:"ssp" === Bt(e)}}), zt("page.len()", function(t){return t === n?0 !== this.context.length?this.context[0]._iDisplayLength:n:this.iterator("table", function(e){ut(e, t)})}); var xe = function(t, e, n){if (n){var a = new $t(t); a.one("draw", function(){n(a.ajax.json())})}if ("ssp" == Bt(t))W(t, e); else{pt(t, !0); var r = t.jqXHR; r && 4 !== r.readyState && r.abort(), J(t, [], function(n){L(t); for (var a = G(t, n), r = 0, o = a.length; o > r; r++)D(t, a[r]); W(t, e), pt(t, !1)})}}; zt("ajax.json()", function(){var t = this.context; return t.length > 0?t[0].json:void 0}), zt("ajax.params()", function(){var t = this.context; return t.length > 0?t[0].oAjaxData:void 0}), zt("ajax.reload()", function(t, e){return this.iterator("table", function(n){xe(n, e === !1, t)})}), zt("ajax.url()", function(t){var e = this.context; return t === n?0 === e.length?n:(e = e[0], e.ajax?a.isPlainObject(e.ajax)?e.ajax.url:e.ajax:e.sAjaxSource):this.iterator("table", function(e){a.isPlainObject(e.ajax)?e.ajax.url = t:e.ajax = t})}), zt("ajax.url().load()", function(t, e){return this.iterator("table", function(n){xe(n, e === !1, t)})}); var Ie = function(t, e, r, o, i){var s, l, u, c, f, d, h = [], p = typeof e; for (e && "string" !== p && "function" !== p && e.length !== n || (e = [e]), u = 0, c = e.length; c > u; u++)for (l = e[u] && e[u].split?e[u].split(","):[e[u]], f = 0, d = l.length; d > f; f++)s = r("string" == typeof l[f]?a.trim(l[f]):l[f]), s && s.length && (h = h.concat(s)); var g = Gt.selector[t]; if (g.length)for (u = 0, c = g.length; c > u; u++)h = g[u](o, i, h); return ge(h)}, Ae = function(t){return t || (t = {}), t.filter && t.search === n && (t.search = t.filter), a.extend({search:"none", order:"current", page:"all"}, t)}, Fe = function(t){for (var e = 0, n = t.length; n > e; e++)if (t[e].length > 0)return t[0] = t[e], t[0].length = 1, t.length = 1, t.context = [t.context[e]], t; return t.length = 0, t}, Le = function(t, e){var n, r, o, i = [], s = t.aiDisplay, l = t.aiDisplayMaster, u = e.search, c = e.order, f = e.page; if ("ssp" == Bt(t))return"removed" === u?[]:de(0, l.length); if ("current" == f)for (n = t._iDisplayStart, r = t.fnDisplayEnd(); r > n; n++)i.push(s[n]); else if ("current" == c || "applied" == c)i = "none" == u?l.slice():"applied" == u?s.slice():a.map(l, function(t, e){return - 1 === a.inArray(t, s)?t:null}); else if ("index" == c || "original" == c)for (n = 0, r = t.aoData.length; r > n; n++)"none" == u?i.push(n):(o = a.inArray(n, s), ( - 1 === o && "removed" == u || o >= 0 && "applied" == u) && i.push(n)); return i}, Pe = function(t, e, r){var o = function(e){var o = oe(e); if (null !== o && !r)return[o]; var i = Le(t, r); if (null !== o && - 1 !== a.inArray(o, i))return[o]; if (!e)return i; if ("function" == typeof e)return a.map(i, function(n){var a = t.aoData[n]; return e(n, a._aData, a.nTr)?n:null}); var s = he(fe(t.aoData, i, "nTr")); if (e.nodeName && - 1 !== a.inArray(e, s))return[e._DT_RowIndex]; if ("string" == typeof e && "#" === e.charAt(0)){var l = t.aIds[e.replace(/^#/, "")]; if (l !== n)return[l.idx]}return a(s).filter(e).map(function(){return this._DT_RowIndex}).toArray()}; return Ie("row", e, o, t, r)}; zt("rows()", function(t, e){t === n?t = "":a.isPlainObject(t) && (e = t, t = ""), e = Ae(e); var r = this.iterator("table", function(n){return Pe(n, t, e)}, 1); return r.selector.rows = t, r.selector.opts = e, r}), zt("rows().nodes()", function(){return this.iterator("row", function(t, e){return t.aoData[e].nTr || n}, 1)}), zt("rows().data()", function(){return this.iterator(!0, "rows", function(t, e){return fe(t.aoData, e, "_aData")}, 1)}), Yt("rows().cache()", "row().cache()", function(t){return this.iterator("row", function(e, n){var a = e.aoData[n]; return"search" === t?a._aFilterData:a._aSortData}, 1)}), Yt("rows().invalidate()", "row().invalidate()", function(t){return this.iterator("row", function(e, n){R(e, n, t)})}), Yt("rows().indexes()", "row().index()", function(){return this.iterator("row", function(t, e){return e}, 1)}), Yt("rows().ids()", "row().id()", function(t){for (var e = [], n = this.context, a = 0, r = n.length; r > a; a++)for (var o = 0, i = this[a].length; i > o; o++){var s = n[a].rowIdFn(n[a].aoData[this[a][o]]._aData); e.push((t === !0?"#":"") + s)}return new $t(n, e)}), Yt("rows().remove()", "row().remove()", function(){var t = this; return this.iterator("row", function(e, a, r){var o = e.aoData, i = o[a]; o.splice(a, 1); for (var s = 0, l = o.length; l > s; s++)null !== o[s].nTr && (o[s].nTr._DT_RowIndex = s); P(e.aiDisplayMaster, a), P(e.aiDisplay, a), P(t[r], a, !1), Ut(e); var u = e.rowIdFn(i._aData); u !== n && delete e.aIds[u]}), this.iterator("table", function(t){for (var e = 0, n = t.aoData.length; n > e; e++)t.aoData[e].idx = e}), this}), zt("rows.add()", function(t){var e = this.iterator("table", function(e){var n, a, r, o = []; for (a = 0, r = t.length; r > a; a++)n = t[a], n.nodeName && "TR" === n.nodeName.toUpperCase()?o.push(y(e, n)[0]):o.push(D(e, n)); return o}, 1), n = this.rows( - 1); return n.pop(), a.merge(n, e), n}), zt("row()", function(t, e){return Fe(this.rows(t, e))}), zt("row().data()", function(t){var e = this.context; return t === n?e.length && this.length?e[0].aoData[this[0]]._aData:n:(e[0].aoData[this[0]]._aData = t, R(e[0], this[0], "data"), this)}), zt("row().node()", function(){var t = this.context; return t.length && this.length?t[0].aoData[this[0]].nTr || null:null}), zt("row.add()", function(t){t instanceof a && t.length && (t = t[0]); var e = this.iterator("table", function(e){return t.nodeName && "TR" === t.nodeName.toUpperCase()?y(e, t)[0]:D(e, t)}); return this.row(e[0])}); var Re = function(t, e, n, r){var o = [], i = function(e, n){if (a.isArray(e) || e instanceof a)for (var r = 0, s = e.length; s > r; r++)i(e[r], n); else if (e.nodeName && "tr" === e.nodeName.toLowerCase())o.push(e); else{var l = a("<tr><td/></tr>").addClass(n); a("td", l).addClass(n).html(e)[0].colSpan = b(t), o.push(l[0])}}; i(n, r), e._details && e._details.remove(), e._details = a(o), e._detailsShow && e._details.insertAfter(e.nTr)}, je = function(t, e){var a = t.context; if (a.length){var r = a[0].aoData[e !== n?e:t[0]]; r && r._details && (r._details.remove(), r._detailsShow = n, r._details = n)}}, He = function(t, e){var n = t.context; if (n.length && t.length){var a = n[0].aoData[t[0]]; a._details && (a._detailsShow = e, e?a._details.insertAfter(a.nTr):a._details.detach(), Ne(n[0]))}}, Ne = function(t){var e = new $t(t), n = ".dt.DT_details", a = "draw" + n, r = "column-visibility" + n, o = "destroy" + n, i = t.aoData; e.off(a + " " + r + " " + o), ce(i, "_details").length > 0 && (e.on(a, function(n, a){t === a && e.rows({page:"current"}).eq(0).each(function(t){var e = i[t]; e._detailsShow && e._details.insertAfter(e.nTr)})}), e.on(r, function(e, n, a, r){if (t === n)for (var o, s = b(n), l = 0, u = i.length; u > l; l++)o = i[l], o._details && o._details.children("td[colspan]").attr("colspan", s)}), e.on(o, function(n, a){if (t === a)for (var r = 0, o = i.length; o > r; r++)i[r]._details && je(e, r)}))}, ke = "", Oe = ke + "row().child", Me = Oe + "()"; zt(Me, function(t, e){var a = this.context; return t === n?a.length && this.length?a[0].aoData[this[0]]._details:n:(t === !0?this.child.show():t === !1?je(this):a.length && this.length && Re(a[0], a[0].aoData[this[0]], t, e), this)}), zt([Oe + ".show()", Me + ".show()"], function(t){return He(this, !0), this}), zt([Oe + ".hide()", Me + ".hide()"], function(){return He(this, !1), this}), zt([Oe + ".remove()", Me + ".remove()"], function(){return je(this), this}), zt(Oe + ".isShown()", function(){var t = this.context; return t.length && this.length?t[0].aoData[this[0]]._detailsShow || !1:!1}); var We = /^(.+):(name|visIdx|visible)$/, Ue = function(t, e, n, a, r){for (var o = [], i = 0, s = r.length; s > i; i++)o.push(w(t, r[i], e)); return o}, Ee = function(t, e, n){var r = t.aoColumns, o = ce(r, "sName"), i = ce(r, "nTh"), s = function(e){var s = oe(e); if ("" === e)return de(r.length); if (null !== s)return[s >= 0?s:r.length + s]; if ("function" == typeof e){var l = Le(t, n); return a.map(r, function(n, a){return e(a, Ue(t, a, 0, 0, l), i[a])?a:null})}var u = "string" == typeof e?e.match(We):""; if (!u)return a(i).filter(e).map(function(){return a.inArray(this, i)}).toArray(); switch (u[2]){case"visIdx":case"visible":var c = parseInt(u[1], 10); if (0 > c){var f = a.map(r, function(t, e){return t.bVisible?e:null}); return[f[f.length + c]]}return[p(t, c)]; case"name":return a.map(o, function(t, e){return t === u[1]?e:null})}}; return Ie("column", e, s, t, n)}, Be = function(t, e, r, o){var i, s, l, u, c = t.aoColumns, f = c[e], d = t.aoData; if (r === n)return f.bVisible; if (f.bVisible !== r){if (r){var p = a.inArray(!0, ce(c, "bVisible"), e + 1); for (s = 0, l = d.length; l > s; s++)u = d[s].nTr, i = d[s].anCells, u && u.insertBefore(i[e], i[p] || null)} else a(ce(t.aoData, "anCells", e)).detach(); f.bVisible = r, O(t, t.aoHeader), O(t, t.aoFooter), (o === n || o) && (h(t), (t.oScroll.sX || t.oScroll.sY) && bt(t)), Wt(t, null, "column-visibility", [t, e, r]), Pt(t)}}; zt("columns()", function(t, e){t === n?t = "":a.isPlainObject(t) && (e = t, t = ""), e = Ae(e); var r = this.iterator("table", function(n){return Ee(n, t, e)}, 1); return r.selector.cols = t, r.selector.opts = e, r}), Yt("columns().header()", "column().header()", function(t, e){return this.iterator("column", function(t, e){return t.aoColumns[e].nTh}, 1)}), Yt("columns().footer()", "column().footer()", function(t, e){return this.iterator("column", function(t, e){return t.aoColumns[e].nTf}, 1)}), Yt("columns().data()", "column().data()", function(){return this.iterator("column-rows", Ue, 1)}), Yt("columns().dataSrc()", "column().dataSrc()", function(){return this.iterator("column", function(t, e){return t.aoColumns[e].mData}, 1)}), Yt("columns().cache()", "column().cache()", function(t){return this.iterator("column-rows", function(e, n, a, r, o){return fe(e.aoData, o, "search" === t?"_aFilterData":"_aSortData", n)}, 1)}), Yt("columns().nodes()", "column().nodes()", function(){return this.iterator("column-rows", function(t, e, n, a, r){return fe(t.aoData, r, "anCells", e)}, 1)}), Yt("columns().visible()", "column().visible()", function(t, e){return this.iterator("column", function(a, r){return t === n?a.aoColumns[r].bVisible:void Be(a, r, t, e)})}), Yt("columns().indexes()", "column().index()", function(t){return this.iterator("column", function(e, n){return"visible" === t?g(e, n):n}, 1)}), zt("columns.adjust()", function(){return this.iterator("table", function(t){h(t)}, 1)}), zt("column.index()", function(t, e){if (0 !== this.context.length){var n = this.context[0]; if ("fromVisible" === t || "toData" === t)return p(n, e); if ("fromData" === t || "toVisible" === t)return g(n, e)}}), zt("column()", function(t, e){return Fe(this.columns(t, e))}); var Je = function(t, e, r){var o, i, s, l, u, c, f, d = t.aoData, h = Le(t, r), p = he(fe(d, h, "anCells")), g = a([].concat.apply([], p)), b = t.aoColumns.length, v = function(e){var r = "function" == typeof e; if (null === e || e === n || r){for (i = [], s = 0, l = h.length; l > s; s++)for (o = h[s], u = 0; b > u; u++)c = {row:o, column:u}, r?(f = d[o], e(c, w(t, o, u), f.anCells?f.anCells[u]:null) && i.push(c)):i.push(c); return i}return a.isPlainObject(e)?[e]:g.filter(e).map(function(t, e){if (e.parentNode)o = e.parentNode._DT_RowIndex; else for (t = 0, l = d.length; l > t; t++)if ( - 1 !== a.inArray(e, d[t].anCells)){o = t; break}return{row:o, column:a.inArray(e, d[o].anCells)}}).toArray()}; return Ie("cell", e, v, t, r)}; zt("cells()", function(t, e, r){if (a.isPlainObject(t) && (t.row === n?(r = t, t = null):(r = e, e = null)), a.isPlainObject(e) && (r = e, e = null), null === e || e === n)return this.iterator("table", function(e){return Je(e, t, Ae(r))}); var o, i, s, l, u, c = this.columns(e, r), f = this.rows(t, r), d = this.iterator("table", function(t, e){for (o = [], i = 0, s = f[e].length; s > i; i++)for (l = 0, u = c[e].length; u > l; l++)o.push({row:f[e][i], column:c[e][l]}); return o}, 1); return a.extend(d.selector, {cols:e, rows:t, opts:r}), d}), Yt("cells().nodes()", "cell().node()", function(){return this.iterator("cell", function(t, e, a){var r = t.aoData[e].anCells; return r?r[a]:n}, 1)}), zt("cells().data()", function(){return this.iterator("cell", function(t, e, n){return w(t, e, n)}, 1)}), Yt("cells().cache()", "cell().cache()", function(t){return t = "search" === t?"_aFilterData":"_aSortData", this.iterator("cell", function(e, n, a){return e.aoData[n][t][a]}, 1)}), Yt("cells().render()", "cell().render()", function(t){return this.iterator("cell", function(e, n, a){return w(e, n, a, t)}, 1)}), Yt("cells().indexes()", "cell().index()", function(){return this.iterator("cell", function(t, e, n){return{row:e, column:n, columnVisible:g(t, n)}}, 1)}), Yt("cells().invalidate()", "cell().invalidate()", function(t){return this.iterator("cell", function(e, n, a){R(e, n, t, a)})}), zt("cell()", function(t, e, n){return Fe(this.cells(t, e, n))}), zt("cell().data()", function(t){var e = this.context, a = this[0]; return t === n?e.length && a.length?w(e[0], a[0].row, a[0].column):n:(C(e[0], a[0].row, a[0].column, t), R(e[0], a[0].row, "data", a[0].column), this)}), zt("order()", function(t, e){var r = this.context; return t === n?0 !== r.length?r[0].aaSorting:n:("number" == typeof t?t = [[t, e]]:a.isArray(t[0]) || (t = Array.prototype.slice.call(arguments)), this.iterator("table", function(e){e.aaSorting = t.slice()}))}), zt("order.listener()", function(t, e, n){return this.iterator("table", function(a){
3
  At(a, t, e, n)})}), zt(["columns().order()", "column().order()"], function(t){var e = this; return this.iterator("table", function(n, r){var o = []; a.each(e[r], function(e, n){o.push([n, t])}), n.aaSorting = o})}), zt("search()", function(t, e, r, o){var i = this.context; return t === n?0 !== i.length?i[0].oPreviousSearch.sSearch:n:this.iterator("table", function(n){n.oFeatures.bFilter && z(n, a.extend({}, n.oPreviousSearch, {sSearch:t + "", bRegex:null === e?!1:e, bSmart:null === r?!0:r, bCaseInsensitive:null === o?!0:o}), 1)})}), Yt("columns().search()", "column().search()", function(t, e, r, o){return this.iterator("column", function(i, s){var l = i.aoPreSearchCols; return t === n?l[s].sSearch:void(i.oFeatures.bFilter && (a.extend(l[s], {sSearch:t + "", bRegex:null === e?!1:e, bSmart:null === r?!0:r, bCaseInsensitive:null === o?!0:o}), z(i, i.oPreviousSearch, 1)))})}), zt("state()", function(){return this.context.length?this.context[0].oSavedState:null}), zt("state.clear()", function(){return this.iterator("table", function(t){t.fnStateSaveCallback.call(t.oInstance, t, {})})}), zt("state.loaded()", function(){return this.context.length?this.context[0].oLoadedState:null}), zt("state.save()", function(){return this.iterator("table", function(t){Pt(t)})}), qt.versionCheck = qt.fnVersionCheck = function(t){for (var e, n, a = qt.version.split("."), r = t.split("."), o = 0, i = r.length; i > o; o++)if (e = parseInt(a[o], 10) || 0, n = parseInt(r[o], 10) || 0, e !== n)return e > n; return!0}, qt.isDataTable = qt.fnIsDataTable = function(t){var e = a(t).get(0), n = !1; return a.each(qt.settings, function(t, r){var o = r.nScrollHead?a("table", r.nScrollHead)[0]:null, i = r.nScrollFoot?a("table", r.nScrollFoot)[0]:null; (r.nTable === e || o === e || i === e) && (n = !0)}), n}, qt.tables = qt.fnTables = function(t){var e = !1; a.isPlainObject(t) && (e = t.api, t = t.visible); var n = a.map(qt.settings, function(e){return!t || t && a(e.nTable).is(":visible")?e.nTable:void 0}); return e?new $t(n):n}, qt.util = {throttle:mt, escapeRegex:tt}, qt.camelToHungarian = o, zt("$()", function(t, e){var n = this.rows(e).nodes(), r = a(n); return a([].concat(r.filter(t).toArray(), r.find(t).toArray()))}), a.each(["on", "one", "off"], function(t, e){zt(e + "()", function(){var t = Array.prototype.slice.call(arguments); t[0].match(/\.dt\b/) || (t[0] += ".dt"); var n = a(this.tables().nodes()); return n[e].apply(n, t), this})}), zt("clear()", function(){return this.iterator("table", function(t){L(t)})}), zt("settings()", function(){return new $t(this.context, this.context)}), zt("init()", function(){var t = this.context; return t.length?t[0].oInit:null}), zt("data()", function(){return this.iterator("table", function(t){return ce(t.aoData, "_aData")}).flatten()}), zt("destroy()", function(e){return e = e || !1, this.iterator("table", function(n){var r, o = n.nTableWrapper.parentNode, i = n.oClasses, s = n.nTable, l = n.nTBody, u = n.nTHead, c = n.nTFoot, f = a(s), d = a(l), h = a(n.nTableWrapper), p = a.map(n.aoData, function(t){return t.nTr}); n.bDestroying = !0, Wt(n, "aoDestroyCallback", "destroy", [n]), e || new $t(n).columns().visible(!0), h.unbind(".DT").find(":not(tbody *)").unbind(".DT"), a(t).unbind(".DT-" + n.sInstance), s != u.parentNode && (f.children("thead").detach(), f.append(u)), c && s != c.parentNode && (f.children("tfoot").detach(), f.append(c)), n.aaSorting = [], n.aaSortingFixed = [], Ft(n), a(p).removeClass(n.asStripeClasses.join(" ")), a("th, td", u).removeClass(i.sSortable + " " + i.sSortableAsc + " " + i.sSortableDesc + " " + i.sSortableNone), n.bJUI && (a("th span." + i.sSortIcon + ", td span." + i.sSortIcon, u).detach(), a("th, td", u).each(function(){var t = a("div." + i.sSortJUIWrapper, this); a(this).append(t.contents()), t.detach()})), d.children().detach(), d.append(p); var g = e?"remove":"detach"; f[g](), h[g](), !e && o && (o.insertBefore(s, n.nTableReinsertBefore), f.css("width", n.sDestroyWidth).removeClass(i.sTable), r = n.asDestroyStripes.length, r && d.children().each(function(t){a(this).addClass(n.asDestroyStripes[t % r])})); var b = a.inArray(n, qt.settings); - 1 !== b && qt.settings.splice(b, 1)})}), a.each(["column", "row", "cell"], function(t, e){zt(e + "s().every()", function(t){return this.iterator(e, function(a, r, o, i, s){t.call(new $t(a)[e](r, "cell" === e?o:n), r, o, i, s)})})}), zt("i18n()", function(t, e, r){var o = this.context[0], i = I(t)(o.oLanguage); return i === n && (i = e), r !== n && a.isPlainObject(i) && (i = i[r] !== n?i[r]:i._), i.replace("%d", r)}), qt.version = "1.10.9", qt.settings = [], qt.models = {}, qt.models.oSearch = {bCaseInsensitive:!0, sSearch:"", bRegex:!1, bSmart:!0}, qt.models.oRow = {nTr:null, anCells:null, _aData:[], _aSortData:null, _aFilterData:null, _sFilterRow:null, _sRowStripe:"", src:null, idx: - 1}, qt.models.oColumn = {idx:null, aDataSort:null, asSorting:null, bSearchable:null, bSortable:null, bVisible:null, _sManualType:null, _bAttrSrc:!1, fnCreatedCell:null, fnGetData:null, fnSetData:null, mData:null, mRender:null, nTh:null, nTf:null, sClass:null, sContentPadding:null, sDefaultContent:null, sName:null, sSortDataType:"std", sSortingClass:null, sSortingClassJUI:null, sTitle:null, sType:null, sWidth:null, sWidthOrig:null}, qt.defaults = {aaData:null, aaSorting:[[0, "asc"]], aaSortingFixed:[], ajax:null, aLengthMenu:[10, 25, 50, 100], aoColumns:null, aoColumnDefs:null, aoSearchCols:[], asStripeClasses:null, bAutoWidth:!0, bDeferRender:!1, bDestroy:!1, bFilter:!0, bInfo:!0, bJQueryUI:!1, bLengthChange:!0, bPaginate:!0, bProcessing:!1, bRetrieve:!1, bScrollCollapse:!1, bServerSide:!1, bSort:!0, bSortMulti:!0, bSortCellsTop:!1, bSortClasses:!0, bStateSave:!1, fnCreatedRow:null, fnDrawCallback:null, fnFooterCallback:null, fnFormatNumber:function(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g, this.oLanguage.sThousands)}, fnHeaderCallback:null, fnInfoCallback:null, fnInitComplete:null, fnPreDrawCallback:null, fnRowCallback:null, fnServerData:null, fnServerParams:null, fnStateLoadCallback:function(t){try{return JSON.parse(( - 1 === t.iStateDuration?sessionStorage:localStorage).getItem("DataTables_" + t.sInstance + "_" + location.pathname))} catch (e){}}, fnStateLoadParams:null, fnStateLoaded:null, fnStateSaveCallback:function(t, e){try{( - 1 === t.iStateDuration?sessionStorage:localStorage).setItem("DataTables_" + t.sInstance + "_" + location.pathname, JSON.stringify(e))} catch (n){}}, fnStateSaveParams:null, iStateDuration:7200, iDeferLoading:null, iDisplayLength:10, iDisplayStart:0, iTabIndex:0, oClasses:{}, oLanguage:{oAria:{sSortAscending:": activate to sort column ascending", sSortDescending:": activate to sort column descending"}, oPaginate:{sFirst:"First", sLast:"Last", sNext:"Next", sPrevious:"Previous"}, sEmptyTable:"No data available in table", sInfo:"Showing _START_ to _END_ of _TOTAL_ entries", sInfoEmpty:"Showing 0 to 0 of 0 entries", sInfoFiltered:"(filtered from _MAX_ total entries)", sInfoPostFix:"", sDecimal:"", sThousands:",", sLengthMenu:"Show _MENU_ entries", sLoadingRecords:"Loading...", sProcessing:"Processing...", sSearch:"Search:", sSearchPlaceholder:"", sUrl:"", sZeroRecords:"No matching records found"}, oSearch:a.extend({}, qt.models.oSearch), sAjaxDataProp:"data", sAjaxSource:null, sDom:"lfrtip", searchDelay:null, sPaginationType:"simple_numbers", sScrollX:"", sScrollXInner:"", sScrollY:"", sServerMethod:"GET", renderer:null, rowId:"DT_RowId"}, r(qt.defaults), qt.defaults.column = {aDataSort:null, iDataSort: - 1, asSorting:["asc", "desc"], bSearchable:!0, bSortable:!0, bVisible:!0, fnCreatedCell:null, mData:null, mRender:null, sCellType:"td", sClass:"", sContentPadding:"", sDefaultContent:null, sName:"", sSortDataType:"std", sTitle:null, sType:null, sWidth:null}, r(qt.defaults.column), qt.models.oSettings = {oFeatures:{bAutoWidth:null, bDeferRender:null, bFilter:null, bInfo:null, bLengthChange:null, bPaginate:null, bProcessing:null, bServerSide:null, bSort:null, bSortMulti:null, bSortClasses:null, bStateSave:null}, oScroll:{bCollapse:null, iBarWidth:0, sX:null, sXInner:null, sY:null}, oLanguage:{fnInfoCallback:null}, oBrowser:{bScrollOversize:!1, bScrollbarLeft:!1, bBounding:!1, barWidth:0}, ajax:null, aanFeatures:[], aoData:[], aiDisplay:[], aiDisplayMaster:[], aIds:{}, aoColumns:[], aoHeader:[], aoFooter:[], oPreviousSearch:{}, aoPreSearchCols:[], aaSorting:null, aaSortingFixed:[], asStripeClasses:null, asDestroyStripes:[], sDestroyWidth:0, aoRowCallback:[], aoHeaderCallback:[], aoFooterCallback:[], aoDrawCallback:[], aoRowCreatedCallback:[], aoPreDrawCallback:[], aoInitComplete:[], aoStateSaveParams:[], aoStateLoadParams:[], aoStateLoaded:[], sTableId:"", nTable:null, nTHead:null, nTFoot:null, nTBody:null, nTableWrapper:null, bDeferLoading:!1, bInitialised:!1, aoOpenRows:[], sDom:null, searchDelay:null, sPaginationType:"two_button", iStateDuration:0, aoStateSave:[], aoStateLoad:[], oSavedState:null, oLoadedState:null, sAjaxSource:null, sAjaxDataProp:null, bAjaxDataGet:!0, jqXHR:null, json:n, oAjaxData:n, fnServerData:null, aoServerParams:[], sServerMethod:null, fnFormatNumber:null, aLengthMenu:null, iDraw:0, bDrawing:!1, iDrawError: - 1, _iDisplayLength:10, _iDisplayStart:0, _iRecordsTotal:0, _iRecordsDisplay:0, bJUI:null, oClasses:{}, bFiltered:!1, bSorted:!1, bSortCellsTop:null, oInit:null, aoDestroyCallback:[], fnRecordsTotal:function(){return"ssp" == Bt(this)?1 * this._iRecordsTotal:this.aiDisplayMaster.length}, fnRecordsDisplay:function(){return"ssp" == Bt(this)?1 * this._iRecordsDisplay:this.aiDisplay.length}, fnDisplayEnd:function(){var t = this._iDisplayLength, e = this._iDisplayStart, n = e + t, a = this.aiDisplay.length, r = this.oFeatures, o = r.bPaginate; return r.bServerSide?o === !1 || - 1 === t?e + a:Math.min(e + t, this._iRecordsDisplay):!o || n > a || - 1 === t?a:n}, oInstance:null, sInstance:null, iTabIndex:0, nScrollHead:null, nScrollFoot:null, aLastSort:[], oPlugins:{}, rowIdFn:null, rowId:null}, qt.ext = Gt = {buttons:{}, classes:{}, errMode:"alert", feature:[], search:[], selector:{cell:[], column:[], row:[]}, internal:{}, legacy:{ajax:null}, pager:{}, renderer:{pageButton:{}, header:{}}, order:{}, type:{detect:[], search:{}, order:{}}, _unique:0, fnVersionCheck:qt.fnVersionCheck, iApiIndex:0, oJUIClasses:{}, sVersion:qt.version}, a.extend(Gt, {afnFiltering:Gt.search, aTypes:Gt.type.detect, ofnSearch:Gt.type.search, oSort:Gt.type.order, afnSortData:Gt.order, aoFeatures:Gt.feature, oApi:Gt.internal, oStdClasses:Gt.classes, oPagination:Gt.pager}), a.extend(qt.ext.classes, {sTable:"dataTable", sNoFooter:"no-footer", sPageButton:"paginate_button", sPageButtonActive:"current", sPageButtonDisabled:"disabled", sStripeOdd:"odd", sStripeEven:"even", sRowEmpty:"dataTables_empty", sWrapper:"dataTables_wrapper", sFilter:"dataTables_filter", sInfo:"dataTables_info", sPaging:"dataTables_paginate paging_", sLength:"dataTables_length", sProcessing:"dataTables_processing", sSortAsc:"sorting_asc", sSortDesc:"sorting_desc", sSortable:"sorting", sSortableAsc:"sorting_asc_disabled", sSortableDesc:"sorting_desc_disabled", sSortableNone:"sorting_disabled", sSortColumn:"sorting_", sFilterInput:"", sLengthSelect:"", sScrollWrapper:"dataTables_scroll", sScrollHead:"dataTables_scrollHead", sScrollHeadInner:"dataTables_scrollHeadInner", sScrollBody:"dataTables_scrollBody", sScrollFoot:"dataTables_scrollFoot", sScrollFootInner:"dataTables_scrollFootInner", sHeaderTH:"", sFooterTH:"", sSortJUIAsc:"", sSortJUIDesc:"", sSortJUI:"", sSortJUIAscAllowed:"", sSortJUIDescAllowed:"", sSortJUIWrapper:"", sSortIcon:"", sJUIHeader:"", sJUIFooter:""}), function(){var t = ""; t = ""; var e = t + "ui-state-default", n = t + "css_right ui-icon ui-icon-", r = t + "fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix"; a.extend(qt.ext.oJUIClasses, qt.ext.classes, {sPageButton:"fg-button ui-button " + e, sPageButtonActive:"ui-state-disabled", sPageButtonDisabled:"ui-state-disabled", sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_", sSortAsc:e + " sorting_asc", sSortDesc:e + " sorting_desc", sSortable:e + " sorting", sSortableAsc:e + " sorting_asc_disabled", sSortableDesc:e + " sorting_desc_disabled", sSortableNone:e + " sorting_disabled", sSortJUIAsc:n + "triangle-1-n", sSortJUIDesc:n + "triangle-1-s", sSortJUI:n + "carat-2-n-s", sSortJUIAscAllowed:n + "carat-1-n", sSortJUIDescAllowed:n + "carat-1-s", sSortJUIWrapper:"DataTables_sort_wrapper", sSortIcon:"DataTables_sort_icon", sScrollHead:"dataTables_scrollHead " + e, sScrollFoot:"dataTables_scrollFoot " + e, sHeaderTH:e, sFooterTH:e, sJUIHeader:r + " ui-corner-tl ui-corner-tr", sJUIFooter:r + " ui-corner-bl ui-corner-br"})}(); var Xe = qt.ext.pager; a.extend(Xe, {simple:function(t, e){return["previous", "next"]}, full:function(t, e){return["first", "previous", "next", "last"]}, numbers:function(t, e){return[Jt(t, e)]}, simple_numbers:function(t, e){return["previous", Jt(t, e), "next"]}, full_numbers:function(t, e){return["first", "previous", Jt(t, e), "next", "last"]}, _numbers:Jt, numbers_length:7}), a.extend(!0, qt.ext.renderer, {pageButton:{_:function(t, n, r, o, i, s){var l, u, c, f = t.oClasses, d = t.oLanguage.oPaginate, h = 0, p = function(e, n){var o, c, g, b, v = function(e){dt(t, e.data.action, !0)}; for (o = 0, c = n.length; c > o; o++)if (b = n[o], a.isArray(b)){var S = a("<" + (b.DT_el || "div") + "/>").appendTo(e); p(S, b)} else{switch (l = null, u = "", b){case"ellipsis":e.append('<span class="ellipsis">&#x2026;</span>'); break; case"first":l = d.sFirst, u = b + (i > 0?"":" " + f.sPageButtonDisabled); break; case"previous":l = d.sPrevious, u = b + (i > 0?"":" " + f.sPageButtonDisabled); break; case"next":l = d.sNext, u = b + (s - 1 > i?"":" " + f.sPageButtonDisabled); break; case"last":l = d.sLast, u = b + (s - 1 > i?"":" " + f.sPageButtonDisabled); break; default:l = b + 1, u = i === b?f.sPageButtonActive:""}null !== l && (g = a("<a>", {"class":f.sPageButton + " " + u, "aria-controls":t.sTableId, "data-dt-idx":h, tabindex:t.iTabIndex, id:0 === r && "string" == typeof b?t.sTableId + "_" + b:null}).html(l).appendTo(e), Ot(g, {action:b}, v), h++)}}; try{c = a(n).find(e.activeElement).data("dt-idx")} catch (g){}p(a(n).empty(), o), c && a(n).find("[data-dt-idx=" + c + "]").focus()}}}), a.extend(qt.ext.type.detect, [function(t, e){var n = e.oLanguage.sDecimal; return se(t, n)?"num" + n:null}, function(t, e){if (t && !(t instanceof Date) && (!te.test(t) || !ee.test(t)))return null; var n = Date.parse(t); return null !== n && !isNaN(n) || re(t)?"date":null}, function(t, e){var n = e.oLanguage.sDecimal; return se(t, n, !0)?"num-fmt" + n:null}, function(t, e){var n = e.oLanguage.sDecimal; return ue(t, n)?"html-num" + n:null}, function(t, e){var n = e.oLanguage.sDecimal; return ue(t, n, !0)?"html-num-fmt" + n:null}, function(t, e){return re(t) || "string" == typeof t && - 1 !== t.indexOf("<")?"html":null}]), a.extend(qt.ext.type.search, {html:function(t){return re(t)?t:"string" == typeof t?t.replace(Zt, " ").replace(Kt, ""):""}, string:function(t){return re(t)?t:"string" == typeof t?t.replace(Zt, " "):t}}); var Ve = function(t, e, n, a){return 0 === t || t && "-" !== t?(e && (t = ie(t, e)), t.replace && (n && (t = t.replace(n, "")), a && (t = t.replace(a, ""))), 1 * t): - (1 / 0)}; return a.extend(Gt.type.order, {"date-pre":function(t){return Date.parse(t) || 0}, "html-pre":function(t){return re(t)?"":t.replace?t.replace(/<.*?>/g, "").toLowerCase():t + ""}, "string-pre":function(t){return re(t)?"":"string" == typeof t?t.toLowerCase():t.toString?t.toString():""}, "string-asc":function(t, e){return e > t? - 1:t > e?1:0}, "string-desc":function(t, e){return e > t?1:t > e? - 1:0}}), Xt(""), a.extend(!0, qt.ext.renderer, {header:{_:function(t, e, n, r){a(t.nTable).on("order.dt.DT", function(a, o, i, s){if (t === o){var l = n.idx; e.removeClass(n.sSortingClass + " " + r.sSortAsc + " " + r.sSortDesc).addClass("asc" == s[l]?r.sSortAsc:"desc" == s[l]?r.sSortDesc:n.sSortingClass)}})}, jqueryui:function(t, e, n, r){a("<div/>").addClass(r.sSortJUIWrapper).append(e.contents()).append(a("<span/>").addClass(r.sSortIcon + " " + n.sSortingClassJUI)).appendTo(e), a(t.nTable).on("order.dt.DT", function(a, o, i, s){if (t === o){var l = n.idx; e.removeClass(r.sSortAsc + " " + r.sSortDesc).addClass("asc" == s[l]?r.sSortAsc:"desc" == s[l]?r.sSortDesc:n.sSortingClass), e.find("span." + r.sSortIcon).removeClass(r.sSortJUIAsc + " " + r.sSortJUIDesc + " " + r.sSortJUI + " " + r.sSortJUIAscAllowed + " " + r.sSortJUIDescAllowed).addClass("asc" == s[l]?r.sSortJUIAsc:"desc" == s[l]?r.sSortJUIDesc:n.sSortingClassJUI)}})}}}), qt.render = {number:function(t, e, n, a, r){return{display:function(o){if ("number" != typeof o && "string" != typeof o)return o; var i = 0 > o?"-":""; o = Math.abs(parseFloat(o)); var s = parseInt(o, 10), l = n?e + (o - s).toFixed(n).substring(2):""; return i + (a || "") + s.toString().replace(/\B(?=(\d{3})+(?!\d))/g, t) + l + (r || "")}}}}, a.extend(qt.ext.internal, {_fnExternApiFunc:Vt, _fnBuildAjax:J, _fnAjaxUpdate:X, _fnAjaxParameters:V, _fnAjaxUpdateDraw:q, _fnAjaxDataSrc:G, _fnAddColumn:f, _fnColumnOptions:d, _fnAdjustColumnSizing:h, _fnVisibleToColumnIndex:p, _fnColumnIndexToVisible:g, _fnVisbleColumns:b, _fnGetColumns:v, _fnColumnTypes:S, _fnApplyColumnDefs:m, _fnHungarianMap:r, _fnCamelToHungarian:o, _fnLanguageCompat:i, _fnBrowserDetect:u, _fnAddData:D, _fnAddTr:y, _fnNodeToDataIndex:_, _fnNodeToColumnIndex:T, _fnGetCellData:w, _fnSetCellData:C, _fnSplitObjNotation:x, _fnGetObjectDataFn:I, _fnSetObjectDataFn:A, _fnGetDataMaster:F, _fnClearTable:L, _fnDeleteIndex:P, _fnInvalidate:R, _fnGetRowElements:j, _fnCreateTr:H, _fnBuildHead:k, _fnDrawHead:O, _fnDraw:M, _fnReDraw:W, _fnAddOptionsHtml:U, _fnDetectHeader:E, _fnGetUniqueThs:B, _fnFeatureHtmlFilter:$, _fnFilterComplete:z, _fnFilterCustom:Y, _fnFilterColumn:Q, _fnFilter:Z, _fnFilterCreateSearch:K, _fnEscapeRegex:tt, _fnFilterData:et, _fnFeatureHtmlInfo:rt, _fnUpdateInfo:ot, _fnInfoMacros:it, _fnInitialise:st, _fnInitComplete:lt, _fnLengthChange:ut, _fnFeatureHtmlLength:ct, _fnFeatureHtmlPaginate:ft, _fnPageChange:dt, _fnFeatureHtmlProcessing:ht, _fnProcessingDisplay:pt, _fnFeatureHtmlTable:gt, _fnScrollDraw:bt, _fnApplyToChildren:vt, _fnCalculateColumnWidths:St, _fnThrottle:mt, _fnConvertToWidth:Dt, _fnGetWidestNode:yt, _fnGetMaxLenString:_t, _fnStringToCss:Tt, _fnSortFlatten:wt, _fnSort:Ct, _fnSortAria:xt, _fnSortListener:It, _fnSortAttachListener:At, _fnSortingClasses:Ft, _fnSortData:Lt, _fnSaveState:Pt, _fnLoadState:Rt, _fnSettingsFromNode:jt, _fnLog:Ht, _fnMap:Nt, _fnBindAction:Ot, _fnCallbackReg:Mt, _fnCallbackFire:Wt, _fnLengthOverflow:Ut, _fnRenderer:Et, _fnDataSource:Bt, _fnRowAttributes:N, _fnCalculateEnd:function(){}}), a.fn.dataTable = qt, a.fn.dataTableSettings = qt.settings, a.fn.dataTableExt = qt.ext, a.fn.DataTable = function(t){return a(this).dataTable(t).api()}, a.each(qt, function(t, e){a.fn.DataTable[t] = e}), a.fn.dataTable})}(window, document), function(t, e, n){var a = function(t, n){"use strict"; t.extend(!0, n.defaults, {dom:"<'row'<'col-sm-5'><'col-sm-4'f><'col-sm-3'l>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>", renderer:"bootstrap"}), t.extend(n.ext.classes, {sWrapper:"dataTables_wrapper form-inline dt-bootstrap", sFilterInput:"form-control input-sm", sLengthSelect:"form-control input-sm"}), n.ext.renderer.pageButton.bootstrap = function(a, r, o, i, s, l){var u, c, f, d = new n.Api(a), h = a.oClasses, p = a.oLanguage.oPaginate, g = 0, b = function(e, n){var r, i, f, v, S = function(e){e.preventDefault(), t(e.currentTarget).hasClass("disabled") || d.page(e.data.action).draw("page")}; for (r = 0, i = n.length; i > r; r++)if (v = n[r], t.isArray(v))b(e, v); else{switch (u = "", c = "", v){case"ellipsis":u = "&hellip;", c = "disabled"; break; case"first":u = p.sFirst, c = v + (s > 0?"":" disabled"); break; case"previous":u = p.sPrevious, c = v + (s > 0?"":" disabled"); break; case"next":u = p.sNext, c = v + (l - 1 > s?"":" disabled"); break; case"last":u = p.sLast, c = v + (l - 1 > s?"":" disabled"); break; default:u = v + 1, c = s === v?"active":""}u && (f = t("<li>", {"class":h.sPageButton + " " + c, id:0 === o && "string" == typeof v?a.sTableId + "_" + v:null}).append(t("<a>", {href:"#", "aria-controls":a.sTableId, "data-dt-idx":g, tabindex:a.iTabIndex}).html(u)).appendTo(e), a.oApi._fnBindAction(f, {action:v}, S), g++)}}; try{f = t(r).find(e.activeElement).data("dt-idx")} catch (v){}b(t(r).empty().html('<ul class="pagination"/>').children("ul"), i), f && t(r).find("[data-dt-idx=" + f + "]").focus()}, n.TableTools && (t.extend(!0, n.TableTools.classes, {container:"DTTT btn-group", buttons:{normal:"btn btn-default", disabled:"disabled"}, collection:{container:"DTTT_dropdown dropdown-menu", buttons:{normal:"", disabled:"disabled"}}, print:{info:"DTTT_print_info"}, select:{row:"active"}}), t.extend(!0, n.TableTools.DEFAULTS.oTags, {collection:{container:"ul", button:"li", liner:"a"}}))}; "function" == typeof define && define.amd?define(["jquery", "datatables"], a):"object" == typeof exports?a(require("jquery"), require("datatables")):jQuery && a(jQuery, jQuery.fn.dataTable)}(window, document);
assets/global/plugins/icons/fonts/icons.svg CHANGED
@@ -9,10 +9,10 @@
9
  </metadata>
10
  <defs>
11
  <font id="Simple-Line-Icons" horiz-adv-x="512" >
12
- <font-face units-per-em="512" ascent="480" descent="-32" />
13
- <missing-glyph horiz-adv-x="512" />
14
- <glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
15
- <glyph unicode="&#xe000;" d="M 480.016,78.656l-139.248,66.032c 18.576,9.312, 91.128,12.264, 97.128,28.64c0,0-28.672,44.008-35.672,101.168
16
  c-2.72,22.184-7.376,51.296-12,92.296C 382.72,433.296, 326.784,480, 256.128,480C 256.088,480, 256.040,480, 256,480c-0.048,0-0.096,0-0.128,0
17
  C 185.216,480, 129.28,433.296, 121.784,366.8c-4.624-41-9.28-70.112-12-92.296c-7-57.168-35.672-101.168-35.672-101.168
18
  c 6-16.376, 78.544-19.328, 97.128-28.64L 31.984,78.656c0,0-31.984-11.232-31.984-37.736l0-42.264 C0-19.032, 14.312-32, 31.984-32l 448.032,0
@@ -24,7 +24,7 @@
24
  c 1.408-10.088, 2.672-19.2, 3.656-27.296c 3.984-32.512, 14.112-61.256, 23.264-81.816c-7.064-1.408-14.344-2.72-19.672-3.656
25
  c-22.456-3.888-36.784-6.576-47.624-12.016c-10.936-5.488-17.784-16.736-17.656-28.968c 0.144-12.232, 7.232-23.344, 18.296-28.576l 139.248-66.032
26
  c 1-0.488, 1.656-0.784, 2.72-1.16c 4.92-1.872, 10.248-5.968, 10.968-7.672L 480.016,0L 32,0 z" />
27
- <glyph unicode="&#xe002;" d="M 32.032,32.656c0,12.72, 9.544,16.704, 13.36,18.472l 140.52,66.312
28
  c 10.072,4.624, 17.024,14.16, 18.376,25.16c 1.36,11-3.080,21.92-11.728,28.856c-33.24,26.688-48.728,85.344-48.728,116.592L 143.832,368
29
  c0,33.432, 58.2,79.928, 112.064,79.928c 54.336,0, 111.96-45.768, 111.96-79.928l0-79.96 c0-30.776-12.8-89.656-47.128-116.68
30
  c-8.752-6.888-13.296-17.84-11.984-28.904c 1.312-11.080, 8.296-20.656, 18.424-25.312l 47.96-22.752l 7.904,31.936l-42.504,19.888
@@ -32,7 +32,7 @@
32
  c0-34.936, 15.944-105.624, 60.696-141.544L 32.008,80.184c0,0-31.976-14.248-31.976-31.984l0-48.016 c0-17.672, 14.32-31.984, 31.976-31.984l 351.96,0 l0,32
33
  L 32.032,0.184L 32.032,32.656 z M 495.968,64.064l-48,0 l0,48 c0,8.84-7.168,16-16,16s-16-7.16-16-16l0-48 l-48,0 c-8.832,0-16-7.16-16-16c0-8.832, 7.168-16, 16-16l 48,0 l0-48
34
  c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,48 l 48,0 c 8.832,0, 16,7.168, 16,16C 511.968,56.904, 504.808,64.064, 495.968,64.064z" />
35
- <glyph unicode="&#xe003;" d="M 31.752,0.12l0,32.472 c0,12.72, 9.552,16.712, 13.36,18.472l 140.52,66.312
36
  c 10.072,4.624, 17.024,14.16, 18.376,25.16c 1.36,11-3.080,21.92-11.728,28.856c-33.24,26.688-48.728,85.352-48.728,116.592l0,79.96
37
  c0,33.432, 58.2,79.928, 112.064,79.928c 54.336,0, 111.968-45.768, 111.968-79.928l0-79.96 c0-30.776-12.8-89.656-47.128-116.688
38
  c-8.752-6.888-13.296-17.84-11.984-28.904c 1.312-11.080, 8.296-20.656, 18.424-25.312l 81.12-38.624l 19.072,27.032l-86.832,40.672
@@ -41,7 +41,7 @@
41
  l-26,31.992L 31.752,0.12z M 506.104,118.248c-6.952,5.456-17.016,4.216-22.456-2.736l-68.424-104.352l-42.528,42.536
42
  c-6.248,6.248-16.384,6.248-22.632,0s-6.248-16.376,0-22.624l 56.568-56.568c 6.248-6.248, 16.376-6.248, 22.624,0
43
  c 1.52,1.512, 2.656,3.272, 3.44,5.144l 76.152,116.152C 514.288,102.752, 513.064,112.808, 506.104,118.248z" />
44
- <glyph unicode="&#xe004;" d="M 399.56,288.072l0,79.96 c0,52.96-73.304,111.928-143.952,111.928c-70.656,0-144.064-58.968-144.064-111.928l0-79.96
45
  c0-34.936, 15.944-105.616, 60.696-141.536L 31.72,80.216c0,0-31.976-14.248-31.976-31.984l0-48.016 c0-17.672, 14.32-31.984, 31.976-31.984l 303.968,0 l0,32
46
  L 31.744,0.216l0,32.472 c0,12.72, 9.552,16.712, 13.36,18.472l 140.52,66.312c 10.072,4.624, 17.024,14.168, 18.376,25.168
47
  c 1.36,11-3.080,21.912-11.728,28.848c-33.24,26.688-48.728,85.344-48.728,116.6l0,79.96 c0,33.432, 58.2,79.928, 112.064,79.928
@@ -51,7 +51,7 @@
51
  c-6.248,6.24-16.384,6.24-22.624,0c-6.248-6.248-6.248-16.392,0-22.624l 45.248-45.256l-45.248-45.248c-6.248-6.24-6.248-16.384,0-22.632
52
  c 6.24-6.232, 16.376-6.232, 22.624,0l 45.248,45.256l 45.256-45.256c 6.24-6.232, 16.376-6.232, 22.616,0c 6.248,6.248, 6.248,16.392,0,22.632
53
  L 462.312,40.6z" />
54
- <glyph unicode="&#xe006;" d="M 367.904,16.064L 142.936,16.064 c-8.84,0-16-7.16-16-16s 7.16-16, 16-16l 224.968,0 c 8.84,0, 16,7.16, 16,16S 376.752,16.064, 367.904,16.064z
55
  M 508.656,419.184c-1.512,7.44-8.080,12.784-15.672,12.784l-78.312,0 L 414.672,447.936 c0,8.84-7.16,16-16,16L 110.904,463.936 c-8.84,0-16-7.16-16-16l0-15.968 L 19.016,431.968
56
  c-7.592,0-14.16-5.344-15.672-12.784c-0.472-2.312-11.2-58.376, 19.952-96.576c 17.92-21.96, 45.304-33.464, 81.248-34.488
57
  C 125.040,227.544, 176.576,182.688, 238.64,176l0-111.456 l-47.888,0 c-8.84,0-16-7.16-16-16s 7.16-16, 16-16l 129.344,0 c 8.84,0, 16,7.16, 16,16s-7.16,16-16,16
@@ -60,15 +60,15 @@
60
  c0-8.648, 0.8-17.080, 1.968-25.384C 75.032,322.608, 58.648,329.984, 48.2,342.72z M 382.672,345.952c0-76.544-57.36-138.832-127.856-138.832
61
  c-70.528,0-127.904,62.28-127.904,138.832L 126.912,431.936 l 255.768,0 L 382.68,345.952 z M 463.8,342.72c-10.84-13.216-28.016-20.744-51.136-22.432
62
  c 1.192,8.392, 2.008,16.92, 2.008,25.664l0,54.016 l 64,0 C 479.392,385.408, 477.968,359.968, 463.8,342.72z" />
63
- <glyph unicode="&#xe010;" d="M 352.072,480L 159.928,480 c-26.512,0-48-21.488-48-48l0-416 c0-26.512, 21.488-48, 48-48l 192.144,0
64
  c 26.512,0, 48,21.488, 48,48L 400.072,432 C 400.072,458.512, 378.584,480, 352.072,480z M 368.072,16c0-8.832-7.168-16-16-16L 159.928,0 c-8.832,0-16,7.168-16,16L 143.928,432
65
  c0,8.832, 7.168,16, 16,16l 192.144,0 c 8.832,0, 16-7.168, 16-16L 368.072,16 z M 256.024,79.912c-17.64,0-31.92-14.296-31.92-31.912s 14.288-31.92, 31.92-31.92
66
  c 17.64,0, 31.92,14.304, 31.92,31.92S 273.664,79.912, 256.024,79.912z M 288.024,432l-64,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 64,0
67
  c 8.832,0, 16,7.168, 16,16S 296.856,432, 288.024,432z" />
68
- <glyph unicode="&#xe011;" d="M 480,432.096L 32,432.096 c-17.592,0-32-14.4-32-32L0,128 c0-17.592, 14.408-31.992, 32-31.992l 208,0 l0-48.104 L 160,47.904
69
  c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 192,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 272,47.904 l0,48.104 l 208,0 c 17.592,0, 32,14.4, 32,31.992L 512,400.096
70
  C 512,417.696, 497.592,432.096, 480,432.096z M 480,128L 32,128 L 32,400.096 l 448,0 L 480,128 z" />
71
- <glyph unicode="&#xe012;" d="M 467.16,447.048L 467.16,447.048c 5.216,0, 8.888-0.968, 10.8-1.704c 2.296-6.112, 5.376-28.016-17.264-50.672L 355.36,289.344l-10.16-10.16
72
  l 0.832-14.328c 1.752-29.984, 5-83.72, 7.8-129.784c 2.472-41, 4.816-79.72, 4.968-83.016c 0.080-2.264, 0.112-2.8-2-5.344
73
  c-4.72-5.736-13.528-15.456-20.952-23.512c-11.512,31.016-35.704,96.528-49.064,133.2l-17.168,47.184l-35.512-35.512L 168.8,105.28l-9.096-9.080
74
  l-0.28-12.84c-0.216-10.248-0.168-28.64-0.144-44.856c 0.032-11.296, 0.064-21.56-0.016-27.216c-0.144-0.264, 2.184-0.576, 1.968-0.952
@@ -88,7 +88,7 @@
88
  c 0.688-0.080, 1.392-0.112, 2.080-0.112c 6.312,0, 12.856,2.968, 18.216,8.328c0,0, 23.128,24.544, 32.952,36.488
89
  c 9.84,11.936, 9.456,22.128, 9.264,26.936c-0.080,3.328-9.344,154.408-12.784,213.408l 105.328,105.328c 37.328,37.344, 31.392,82.344, 17.528,96.184
90
  C 494.688,474.392, 482.296,479.048, 467.16,479.048L 467.16,479.048z" />
91
- <glyph unicode="&#xe013;" d="M 424.576,480L 105.576,480 C 82.576,480, 72.56,463, 72.56,447l0-63.656 L 55.096,383.344 c-8.656,0-15.672-7.016-15.672-15.672S 46.44,352, 55.096,352L 72.56,352
92
  l0-64.376 L 56.592,287.624 c-8.656,0-15.672-7.016-15.672-15.672s 7.016-15.672, 15.672-15.672L 72.56,256.28 l0-64.72 L 56.248,191.56 c-8.656,0-15.672-7.016-15.672-15.672
93
  s 7.016-15.672, 15.672-15.672L 72.56,160.216 l0-64.232 L 56.248,95.984 c-8.656,0-15.672-7.016-15.672-15.672s 7.016-15.672, 15.672-15.672L 72.56,64.64 L 72.56,0
94
  c0-26.512, 20.768-32, 32.264-32l 319.752,0 c 26.512,0, 48,21.488, 48,48L 472.576,432 C 472.576,458.512, 451.096,480, 424.576,480z M 104.56,0l0,64.64 l 16.672,0
@@ -96,7 +96,7 @@
96
  s-7.016,15.672-15.672,15.672L 104.56,191.56 l0,64.72 l 17.016,0 c 8.656,0, 15.672,7.016, 15.672,15.672s-7.016,15.672-15.672,15.672L 104.56,287.624 L 104.56,352 l 15.512,0
97
  c 8.656,0, 15.672,7.016, 15.672,15.672s-7.016,15.672-15.672,15.672L 104.56,383.344 L 104.56,447 c0,0.376, 0.032,0.688, 0.080,0.968
98
  C 104.888,447.984, 105.2,448, 105.576,448l 255,0 l0-448 L 104.56,0 z M 440.576,16c0-8.832-7.168-16-16-16l-32,0 L 392.576,448 l 32,0 c 8.832,0, 16-7.168, 16-16L 440.576,16 z" />
99
- <glyph unicode="&#xe014;" d="M 396.424,111.64c-50.672,0-79.432,23.816-98.472,39.576c-6.736,5.576-12.864,10.952-18.44,15.832
100
  c-8.456,7.424-19,16.672-22.672,17.952c-0.112,0-1.856,0.080-1.968,0.096c-0.584-0.048-2.072-0.344-2.224-0.36
101
  c-2.536-1.032-11.544-8.784-18.784-15c-6.568-5.64-14.056-12.080-22.52-18.688l-1.544-1.184c-21.736-16.968-48.792-38.080-96.576-38.080
102
  c-35.496,0-70.464,16.064-91.288,41.936c-13.96,17.344-28.648,47.512-19.336,92.736c 1.128,5.472, 5.008,9.952, 10.216,11.816
@@ -114,24 +114,24 @@
114
  c-13.696-6.096-27.552-9.184-41.152-9.184c-10.2,0-19.032,1.704-26.312,4.016c-0.016-17.36, 5.056-32.456, 15.168-45.016
115
  c 14.968-18.576, 40.52-30.128, 66.72-30.128c 37,0, 57.448,15.968, 77.232,31.408L 192,176.392c 8.024,6.264, 15.12,12.376, 21.344,17.72
116
  c 14.256,12.248, 23.664,20.344, 33.824,22.144l0,0C 247.176,216.248, 252.016,217.064, 255.368,217.064z" />
117
- <glyph unicode="&#xe015;" d="M 256.792,480c-79.064,0-144.752-64.112-144.752-143.168l0-225.656
118
  C 112.040,32.112, 177.728-32, 256.792-32s 143.176,64.112, 143.176,143.168L 399.968,336.832 C 399.968,415.888, 335.856,480, 256.792,480z M 367.968,111.168
119
  C 367.968,49.872, 318.096,0, 256.792,0s-112.752,49.872-112.752,111.168L 144.040,336.832 C 144.040,398.128, 195.496,448, 256.792,448
120
  s 111.176-49.872, 111.176-111.168L 367.968,111.168 z M 256.168,384c-8.832,0-16-7.168-16-16l0-80 c0-8.832, 7.168-16, 16-16c 8.832,0, 16,7.168, 16,16L 272.168,368
121
  C 272.168,376.832, 265,384, 256.168,384z" />
122
- <glyph unicode="&#xe016;" d="M 480.144,449.912L 480.144,464.416 c0,8.84-7.16,16-16,16L 351.832,480.416 c-8.84,0-16-7.16-16-16l0-65.328
123
  c0-0.024, 0.016-0.048, 0.016-0.072l0-198.76 c0-48.16-27.168-87.328-75.328-87.328s-84.328,39.168-84.328,87.328L 176.192,449.912 l-0.048,0 L 176.144,464.416
124
  c0,8.84-7.16,16-16,16L 47.832,480.416 c-8.84,0-16-7.16-16-16l0-65.328 c0-0.328, 0.168-0.6, 0.184-0.92l0-205.248
125
  c0-124.456, 99.392-225.328, 223.832-225.328s 224.328,100.872, 224.328,225.328L 480.176,449.912 L 480.144,449.912 z M 448.144,448.416l0-64.168 L 368.016,384.248 L 368.016,448.416 L 448.144,448.416 z
126
  M 144.144,448.416l0-64.168 L 64.016,384.248 L 64.016,448.416 L 144.144,448.416 z M 255.84-0.416c-106.608,0-191.832,86.736-191.832,193.328L 64.008,352.248 l 80.168,0 l0-151.992
127
  c0-65.904, 50.424-119.328, 116.328-119.328S 367.84,134.352, 367.84,200.256L 367.84,352.248 l 80.328,0 l0-159.336 C 448.168,86.32, 362.456-0.416, 255.84-0.416z" />
128
- <glyph unicode="&#xe020;" d="M 297.672,447.64l 0.088,0 M 297.672,447.64l-36.104-189.688l 130.792-0.44L 214.328,0.36l 36.104,208.688l-130.784,0.456L 297.672,447.64
129
  M 297.696,479.64c-0.864,0-1.728-0.032-2.576-0.096c-5.648-0.456-9.392-2.344-13.832-5.328c-2.464-1.64-4.72-3.64-6.696-5.968
130
  c-0.584-0.688-1.136-1.408-1.648-2.144L 93.64,228.8c-7.080-9.704-8.12-22.512-2.68-33.216c 5.432-10.704, 16.416-17.488, 28.456-17.576
131
  l 92.368-0.672l-29.040-171.096c-2.76-14.704, 5.080-29.36, 18.88-35.264c 4.112-1.768, 8.432-2.608, 12.696-2.608c 10.056,0, 18.32,4.704, 24.52,13.2
132
  L 418.368,238.72c 7.080,9.704, 8.112,22.528, 2.68,33.216c-5.432,10.704-16.416,17.488-28.456,17.576l-92.368,0.16l 28.728,150.44
133
  c 0.6,2.424, 0.912,4.936, 0.912,7.528c0,17.312-13.784,31.424-31.032,31.984C 298.448,479.64, 298.072,479.64, 297.696,479.64L 297.696,479.64z" />
134
- <glyph unicode="&#xe021;" d="M 390.632,176.424c-8.128,3.64-17.544-0.032-21.128-8.096c-0.328-0.712-33.064-72.104-114.72-73.064
135
  c-0.504,0-1-0.016-1.504-0.016c-76.832,0-109.968,70.184-111.344,73.2c-3.656,8-13.096,11.56-21.16,7.936
136
  c-8.048-3.64-11.624-13.104-7.984-21.168c 1.704-3.784, 42.688-91.968, 140.424-91.968c 0.64,0, 1.296,0.016, 1.936,0.016
137
  c 101.936,1.2, 141.92,88.328, 143.56,92.032C 402.336,163.376, 398.696,172.832, 390.632,176.424z M 256,480C 114.608,480,0,365.392,0,224
@@ -139,7 +139,7 @@
139
  M 175.752,240.088c 17.632,0, 31.92,14.296, 31.92,31.912s-14.288,31.912-31.92,31.912c-17.64,0-31.92-14.296-31.92-31.912
140
  S 158.112,240.088, 175.752,240.088z M 335.752,240.088c 17.632,0, 31.92,14.296, 31.92,31.912s-14.288,31.912-31.92,31.912
141
  c-17.64,0-31.92-14.296-31.92-31.912S 318.112,240.088, 335.752,240.088z" />
142
- <glyph unicode="&#xe022;" d="M 256,480C 114.608,480,0,365.392,0,224s 114.608-256, 256-256s 256,114.608, 256,256S 397.392,480, 256,480z M 480,224c0-33.16-7.296-64.632-20.28-92.968
143
  l-141.608,75.776c 1.512,5.488, 2.392,11.232, 2.392,17.192c0,35.624-28.872,64.504-64.504,64.504c-7.312,0-14.312-1.272-20.856-3.512
144
  L 150.336,421.448C 181.832,438.368, 217.808,448, 256,448C 379.512,448, 480,347.512, 480,224z M 256,256.496c 17.92,0, 32.504-14.576, 32.504-32.504
145
  S 273.92,191.496, 256,191.496S 223.504,206.080, 223.504,224S 238.080,256.496, 256,256.496z M 123.288,404.312l 85.088-136.92
@@ -147,7 +147,7 @@
147
  c0,31.84, 6.72,62.128, 18.752,89.584l 142.184-76.080c-0.928-4.36-1.44-8.864-1.44-13.504c0-35.624, 28.872-64.504, 64.504-64.504
148
  c 6.2,0, 12.176,0.92, 17.848,2.552l 85.096-136.896C 328.104,9.128, 293.112,0, 256,0C 132.488,0, 32,100.488, 32,224z M 386.224,41.92
149
  L 301.472,178.264c 0.248,0.248, 0.48,0.512, 0.728,0.768l 142.144-76.072C 428.968,79.144, 409.224,58.416, 386.224,41.92z" />
150
- <glyph unicode="&#xe023;" d="M 508.2,231.68l-4.24,4.040c-0.080,0.080-0.168,0.112-0.264,0.184l-64.872,59.216
151
  c-4.672,4.472-12.224,4.472-16.912,0l-2.744-4.032c-4.672-4.472-3.152-11.704, 1.52-16.168l 38.232-34.672L 273.248,240.248 L 273.248,426.92 l 34.672-38.232
152
  c 4.472-4.672, 11.704-6.192, 16.168-1.512l 4.032,2.736c 4.472,4.688, 4.472,12.24,0,16.92l-56.584,61.984
153
  c-1.376,2.776-3.504,5.072-6.16,6.648l-0.712,0.744c-2.216,2.336-5.168,3.504-8.112,3.488c-2.952,0.016-5.888-1.152-8.144-3.488
@@ -162,15 +162,15 @@
162
  c-4.472,4.672-11.704,3.152-16.168-1.52l-34.672-38.232L 273.256,208.248 L 460.24,208.248 l-38.552-34.576c-4.672-4.472-6.184-11.72-1.512-16.184l 2.736-4.032
163
  c 4.688-4.464, 12.248-4.464, 16.912,0l 63.872,57.752c 0.088,0.088, 0.184,0.096, 0.264,0.168l 4.24,4.048
164
  c 2.336,2.248, 3.504,5.184, 3.488,8.144C 511.704,226.496, 510.536,229.456, 508.2,231.68z" />
165
- <glyph unicode="&#xe024;" d="M 496,80l-64,0 L 432,376.952 l 59.728,59.648c 6.24,6.248, 6.24,16.384,0,22.632c-6.248,6.248-16.384,6.248-22.632,0L 409.792,400L 112,400 L 112,464
166
  c0,8.84-7.16,16-16,16s-16-7.16-16-16l0-64 L 16,400 c-8.84,0-16-7.16-16-16c0-8.832, 7.16-16, 16-16l 64,0 l0-304 c0-1.472, 0.472-2.8, 0.84-4.144
167
  c 0.16-0.608, 0.128-1.232, 0.36-1.816c 1.608-4.032, 4.8-7.216, 8.832-8.84c 0.688-0.28, 1.44-0.248, 2.144-0.424
168
  C 93.44,48.456, 94.64,48, 96,48l 304,0 l0-64 c0-8.84, 7.16-16, 16-16s 16,7.16, 16,16l0,64 l 64,0 c 8.84,0, 16,7.16, 16,16S 504.84,80, 496,80z M 377.744,368
169
  L 112,102.608L 112,368 L 377.744,368 z M 134.64,80L 400,344.992L 400,80 L 134.64,80 z" />
170
- <glyph unicode="&#xe025;" d="M 464.072,392L 47.928,392 c-26.512,0-48-21.488-48-48l0-240 c0-26.512, 21.488-48, 48-48l 416.144,0
171
  c 26.512,0, 48,21.488, 48,48L 512.072,344 C 512.072,370.512, 490.584,392, 464.072,392z M 47.928,360l 416.144,0 c 8.832,0, 16-7.168, 16-16l0-32 L 31.928,312 l0,32
172
  C 31.928,352.832, 39.104,360, 47.928,360z M 464.072,88L 47.928,88 c-8.832,0-16,7.168-16,16L 31.928,248 l 448.144,0 l0-144 C 480.072,95.168, 472.896,88, 464.072,88z" />
173
- <glyph unicode="&#xe026;" d="M 405.208-5.36l-85.2,100.832L 320.008,272.224 l 10.656,0 c 8.84,0, 16,7.16, 16,16s-7.16,16-16,16l-26.656,0 c-8.84,0-16-7.16-16-16l0-198.912
174
  c0-3.968, 1.472-7.784, 4.128-10.72l 65.184-78.672l-202.64,0 l 65.184,78.672c 2.656,2.936, 4.128,6.752, 4.128,10.72L 223.992,288.224 c0,8.84-7.16,16-16,16
175
  l-26.656,0 c-8.84,0-16-7.16-16-16s 7.16-16, 16-16l 10.656,0 l0-176.752 L 106.792-5.36c-4.232-4.688-5.312-11.44-2.752-17.216
176
  c 2.576-5.784, 8.296-9.504, 14.624-9.504l 274.672,0 c 6.328,0, 12.048,3.72, 14.624,9.504C 410.52-16.8, 409.448-10.048, 405.208-5.36z M 240,320.16
@@ -178,14 +178,14 @@
178
  C 208.080,334.456, 222.36,320.16, 240,320.16z M 344.24,367.656c 31.184,0, 56.464,25.168, 56.464,56.208s-25.272,56.208-56.464,56.208
179
  c-31.176,0-56.464-25.168-56.464-56.208S 313.064,367.656, 344.24,367.656z M 343.992,448.168c 13.328,0, 24.168-10.792, 24.168-24.064
180
  c0-13.264-10.84-24.064-24.168-24.064s-24.168,10.8-24.168,24.064C 319.832,437.376, 330.664,448.168, 343.992,448.168z" />
181
- <glyph unicode="&#xe005;" d="M 255.864,448c 54.336,0, 111.96-45.768, 111.96-79.928l0-79.96 c0-30.776-12.8-89.656-47.128-116.688c-8.752-6.888-13.296-17.84-11.984-28.904
182
  c 1.312-11.080, 8.296-20.656, 18.424-25.312l 139.248-66.032c 1.088-0.496, 13.344-2.552, 13.344-19.672l 0.016-31.232L 32,0.248L 32,32.72
183
  c0,12.72, 9.544,16.712, 13.36,18.472l 140.512,66.312c 10.080,4.624, 17.032,14.16, 18.384,25.16c 1.36,11-3.080,21.92-11.728,28.856
184
  c-33.24,26.688-48.728,85.352-48.728,116.592l0,79.96 C 143.808,401.496, 202.008,448, 255.864,448 M 255.864,480c-70.656,0-144.064-58.968-144.064-111.928
185
  l0-79.96 c0-34.936, 15.944-105.624, 60.696-141.544L 31.976,80.248c0,0-31.976-14.248-31.976-31.984l0-48.016 c0-17.672, 14.32-31.984, 31.976-31.984l 447.776,0
186
  c 17.672,0, 31.984,14.312, 31.984,31.984l0,48.016 c0,18.8-31.984,31.984-31.984,31.984l-139.248,66.032c 44.328,34.888, 59.328,103.424, 59.328,141.832
187
  l0,79.96 C 399.832,421.032, 326.512,480, 255.864,480L 255.864,480z" />
188
- <glyph unicode="&#xe007;" d="M 255.992,461.936C 115.008,461.936, 0.32,347.232, 0.32,206.248
189
  c0-88.576, 44.84-169.592, 119.952-216.704c 7.472-4.736, 17.344-2.44, 22.048,5.048s 2.44,17.36-5.048,22.048
190
  c-27.048,16.976-49.52,39.024-66.712,64.44l 16.776,9.688c 7.656,4.424, 10.28,14.2, 5.856,21.856c-4.44,7.672-14.232,10.28-21.856,5.856
191
  l-16.8-9.696c-12.2,25.256-19.648,52.896-21.64,81.712l 17.808,0 c 8.84,0, 16,7.16, 16,16s-7.16,16-16,16L 32.976,222.496
@@ -202,7 +202,7 @@
202
  M 374.056,256.136c 7.648,4.424, 10.272,14.2, 5.856,21.856c-4.416,7.648-14.208,10.272-21.856,5.848l-86.912-50.176
203
  c-4.64,2.624-9.928,4.248-15.64,4.248c-17.64,0-31.92-14.296-31.92-31.904c0-17.624, 14.288-31.92, 31.92-31.92c 17.64,0, 31.92,14.296, 31.92,31.92
204
  c0,0.032-0.008,0.072-0.008,0.104L 374.056,256.136z" />
205
- <glyph unicode="&#xe008;" d="M 470.368,385.152c-13.872,9.984-52.528,23.248-214.504,23.248c-173.576,0-199.328-15.232-207.592-20.216
206
  c-43.984-26.424-48.16-143.408-48.544-167.128c 0.528-31.328, 5.592-135.56, 48.512-161.344c 8.248-4.968, 33.856-20.112, 207.624-20.112
207
  c 162.080,0, 200.688,13.2, 214.504,23.144c 37.488,26.968, 41.8,119.84, 41.904,158.72C 512.176,252.728, 508.896,357.4, 470.368,385.152z
208
  M 451.68,88.712c-5.576-4.016-37.592-17.112-195.816-17.112c-152.968,0-185.064,11.872-191.128,15.528c-15.44,9.264-31.736,58.44-33.016,134.016
@@ -211,7 +211,7 @@
211
  c-4.952,2.984-11.112,3.064-16.128,0.232c-5.032-2.84-8.144-8.168-8.144-13.936l0-176.72 c0-5.768, 3.112-11.096, 8.144-13.936
212
  c 2.44-1.376, 5.16-2.064, 7.856-2.064c 2.856,0, 5.736,0.768, 8.264,2.296l 143.968,88.376c 4.8,2.904, 7.736,8.096, 7.736,13.704
213
  S 365.008,233.696, 360.208,236.584z M 223.976,162.848L 223.976,282.896 l 97-60.016L 223.976,162.848z" />
214
- <glyph unicode="&#xe009;" d="M 342.2,400.656c 26.44,0, 50.312-10.816, 67.128-28.184c 20.92,4.048, 40.64,11.424, 58.36,21.64c-6.856-20.816-21.44-38.28-40.408-49.328
215
  c 18.56,2.184, 36.328,6.952, 52.816,14.080c-12.36-17.872-27.92-33.608-45.888-46.184c 0.168-3.816, 0.264-7.672, 0.264-11.512
216
  c0-117.864-92.504-253.808-261.656-253.808c-51.92,0-100.28,14.816-140.952,40.112c 7.184-0.84, 14.504-1.264, 21.92-1.264
217
  c 43.080,0, 82.752,14.248, 114.232,38.2c-40.264,0.688-74.248,26.504-85.904,61.92c 5.608-1.048, 11.376-1.608, 17.312-1.608
@@ -227,7 +227,7 @@
227
  c 182.016,0, 291.504,142.488, 293.632,281.672c 14.896,12.328, 28.064,26.592, 39.224,42.576c 4.064,5.344, 6.48,12.016, 6.48,19.248
228
  c0,10.888-5.448,20.512-13.744,26.296c 3.592,12.312-0.504,25.64-10.504,33.784c-5.84,4.752-13,7.168-20.2,7.168
229
  c-5.504,0-11.016-1.408-15.984-4.28c-10.576-6.096-21.888-10.92-33.8-14.392C 396.36,423.624, 369.64,432.656, 342.2,432.656L 342.2,432.656z" />
230
- <glyph unicode="&#xe00a;" d="M 264.008,448.128l0-111.936 l 112.16,0 l0-47.984 L 264.504,288.208 l-0.16-139.264c0-25.888, 1.344-42.504, 4.080-49.872c 4.264-11.624, 19.784-26.504, 48.592-26.504
231
  c 22.344,0, 52.488,6.72, 75.080,23.624l0-74.656 c-18.84-8.984-36.36-12.608-51.624-16.232c-15.28-3.608-31.832-5.424-49.576-5.424
232
  c-19.768,0-76.832,0.544-100.248,60.2c-4.216,10.736-6.328,26.328-6.328,46.736L 184.32,288.128 l-64.424,0 l 0.312,49.064
233
  c 21.328,0, 85.312,12.952, 85.312,110.936L 264.008,448.128 M 264.008,480.128L 205.52,480.128 c-17.672,0-32-14.328-32-32c0-73.248-40.816-78.936-53.312-78.936
@@ -237,7 +237,7 @@
237
  c-4.528,2.28-9.44,3.392-14.328,3.392c-6.784,0-13.528-2.16-19.168-6.376c-19.048-14.264-43.424-17.248-55.904-17.248
238
  c-12.8,0-17.56,4.64-18.608,5.872c-0.544,2.512-2.064,11.888-2.064,38.504l 0.112,107.264l 79.704,0 c 17.672,0, 32,14.328, 32,32l0,47.984
239
  c0,17.672-14.328,32-32,32l-80.16,0 L 296.008,448.128 C 296.008,465.8, 281.68,480.128, 264.008,480.128L 264.008,480.128z" />
240
- <glyph unicode="&#xe00b;" d="M 290.88,439.752c 1.904,0, 3-0.080, 3-0.080l 41.784,0 l-0.216-48l-41.504,0 c-22.84,0-22.312-19.504-22.312-19.504l0-76.096 l 80.816,0
241
  l-11.28-47.936l-69.8,0 l0-239.888 l-47.952,0 l-0.032,239.888L 159.68,248.136 l-0.128,47.936l 63.856,0 c0,0,0,58.688,0,74.592
242
  C 223.416,435.704, 277.432,439.752, 290.88,439.752 M 335.664,439.672l 0.080,0 M 290.88,471.752L 290.88,471.752c-11.504,0-33.984-1.904-55.28-14.736
243
  c-20.16-12.128-44.184-36.968-44.184-86.344l0-42.592 l-31.856,0 c-8.504,0-16.656-3.392-22.672-9.408c-6-6.032-9.36-14.184-9.328-22.704
@@ -245,7 +245,7 @@
245
  c 14.2,0, 26.704,9.36, 30.704,22.984l 11.28,47.936c 2.84,9.672, 0.952,20.128-5.096,28.184c-6.032,8.080-15.528,12.832-25.608,12.832l-48.816,0
246
  l0,31.576 l 31.816,0.016c 17.608,0, 31.92,14.232, 32,31.856l 0.216,46.376c 0.032,0.592, 0.048,1.168, 0.048,1.768c0,17.672-14.296,32-31.968,32l-0.080,0
247
  l-40.888,0 C 293.864,471.72, 292.536,471.752, 290.88,471.752L 290.88,471.752z" />
248
- <glyph unicode="&#xe00c;" d="M 511.712,367.624c-0.36,5.112-3.144,9.736-7.488,12.456L 361.632,469.064c-5.8,3.608-13.216,3.16-18.528-1.144l-87.112-70.472
249
  L 168.896,467.92c-5.296,4.28-12.768,4.768-18.528,1.144L 7.776,380.080c-4.344-2.72-7.128-7.344-7.488-12.456
250
  c-0.376-5.112, 1.736-10.080, 5.656-13.376l 82.608-69.408l-70.768-55.592c-4.048-3.16-6.312-8.088-6.112-13.208
251
  c 0.2-5.12, 2.84-9.832, 7.112-12.68l 65.488-43.656c-3.216-2.92-5.272-7.104-5.272-11.8l0-64.168 c0-5.56, 2.888-10.72, 7.624-13.64
@@ -257,7 +257,7 @@
257
  L 111.008,141.888 z M 399.104,92.672l-128.128-72.84L 270.976,163.72 l 66.328-50.984c 2.856-2.2, 6.312-3.312, 9.752-3.312c 3.096,0, 6.184,0.888, 8.872,2.688
258
  l 43.168,28.784L 399.096,92.672 z M 456.728,217.76l-109.016-72.664l-63.72,48.968l 113,70.816L 456.728,217.76z M 396.832,304.296l-113.672,73.984
259
  l 71.2,57.592l 114.232-71.296L 396.832,304.296z" />
260
- <glyph unicode="&#xe00d;" d="M 255.992,479.864c-34.928,0-68.232-7.056-98.592-19.784c-1.056-0.336-2.088-0.776-3.072-1.336
261
  C 63.696,419.336, 0.136,328.968, 0.136,223.992c0-141.080, 114.784-255.856, 255.856-255.856c 141.096,0, 255.872,114.784, 255.872,255.856
262
  C 511.864,365.088, 397.088,479.864, 255.992,479.864z M 479.864,223.992c0-1.792-0.096-3.56-0.136-5.336
263
  c-24.512,6.504-86.696,18.72-163.4,1.872c-6.76,15.448-14.256,31.288-22.64,47.408c-0.704,1.352-1.392,2.64-2.088,3.976
@@ -271,7 +271,7 @@
271
  c 13.984,6.336, 27.76,11.392, 41.192,15.456c 30.368-77.16, 40.904-140.784, 44.088-165.296c-26.376-10.952-55.264-17.032-85.56-17.032
272
  C 203.984,0.136, 156.096,18.016, 118.048,47.88z M 371.808,32.48c-4.616,30.8-16.072,88.696-42.984,157.832
273
  c 74.224,14.776, 132.976,0.28, 147.808-4.040C 465.52,121.168, 426.264,65.528, 371.808,32.48z" />
274
- <glyph unicode="&#xe00e;" d="M 453.976,407.76c-5.936,5.544-13.752,8.608-21.832,8.608
275
  c-0.736,0-1.472-0.032-2.2-0.080c-0.456-0.032-5.592-0.344-13.64-0.344c-13.328,0-39.344,0.904-63.984,6.968
276
  c-31.832,7.816-68.56,44.080-79.248,51.232c-5.376,3.592-11.576,5.392-17.784,5.392c-6.184,0-12.392-1.8-17.768-5.376
277
  c-1.296-0.872-39.752-42.016-77.376-51.248c-24.624-6.064-51.144-6.968-64.456-6.968c-8.048,0-13.184,0.312-13.688,0.344
@@ -284,12 +284,12 @@
284
  c-6.248,6.248-16.384,6.248-22.624,0l-45.256-45.256l-45.256,45.256c-6.248,6.248-16.384,6.248-22.632,0s-6.248-16.384,0-22.624l 45.256-45.256
285
  l-45.256-45.256c-6.248-6.24-6.248-16.376,0-22.624s 16.384-6.248, 22.632,0l 45.256,45.256l 45.256-45.256c 6.24-6.248, 16.376-6.248, 22.624,0
286
  s 6.248,16.384,0,22.624l-45.256,45.256l 45.256,45.256C 330.048,290.496, 330.048,300.632, 323.8,306.88z" />
287
- <glyph unicode="&#xe00f;" d="M 416.072,480L 95.928,480 c-26.512,0-48-21.488-48-48l0-416 c0-26.512, 21.488-48, 48-48l 320.144,0
288
  c 26.512,0, 48,21.488, 48,48L 464.072,432 C 464.072,458.512, 442.584,480, 416.072,480z M 432.072,16c0-8.832-7.168-16-16-16L 95.928,0 c-8.832,0-16,7.168-16,16L 79.928,432
289
  c0,8.832, 7.168,16, 16,16l 320.144,0 c 8.832,0, 16-7.168, 16-16L 432.072,16 z M 256.024,79.912c-17.64,0-31.92-14.296-31.92-31.912s 14.28-31.92, 31.92-31.92
290
  c 17.632,0, 31.92,14.304, 31.92,31.92S 273.656,79.912, 256.024,79.912z M 288.024,432l-64,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 64,0
291
  c 8.832,0, 16,7.168, 16,16S 296.856,432, 288.024,432z" />
292
- <glyph unicode="&#xe017;" d="M 510.256,265.312l-51.392,76.84l 25.576,89.408c 1.592,5.608, 0.032,11.64-4.112,15.752c-4.128,4.128-10.128,5.656-15.768,4.016
293
  L 375.304,425.264l-77.144,51.952c-4.856,3.264-11.080,3.656-16.232,0.968c-5.184-2.656-8.512-7.936-8.704-13.752l-2.768-92.968
294
  l-73.248-57.296c-4.592-3.592-6.856-9.408-5.936-15.16s 4.904-10.544, 10.408-12.512l 68.728-24.64c-0.464-0.368-0.952-0.696-1.384-1.128
295
  L 3.648-4.648c-6.248-6.248-6.248-16.376,0-22.624c 3.128-3.128, 7.216-4.688, 11.312-4.688s 8.184,1.56, 11.312,4.688l 265.376,265.376
@@ -299,14 +299,14 @@
299
  c-1.624,4.472-5.16,7.968-9.64,9.576l-67.296,24.128l 56.312,44.032c 3.752,2.936, 5.984,7.376, 6.144,12.128l 2.128,71.472l 59.296-39.936
300
  c 3.952-2.656, 8.888-3.408, 13.424-2.096l 68.624,20.048l-19.672-68.736c-1.296-4.576-0.504-9.488, 2.168-13.424l 40.28-59.064L 397.024,268.728z
301
  " />
302
- <glyph unicode="&#xe018;" d="M 416.528,447.696l-32.232,0 l0-107.704 c0-52.192-28.328-91.68-89.048-122.6
303
  C 358.28,185.488, 384.8,146.312, 384.8,87.856c0-38.064-0.168-70-0.296-87.56l 32.032,0 c 8.84,0, 16-7.144, 16-15.984s-7.16-16-16-16L 95.472-31.688
304
  c-8.84,0-16,7.16-16,16s 7.16,15.984, 16,15.984l 32.968,0 c-0.12,17.56-0.296,49.504-0.296,87.56c0,58.456, 26.144,97.624, 89.072,129.528
305
  c-60.616,30.92-88.568,70.408-88.568,122.6L 128.648,447.696 l-33.176,0 c-8.84,0-16,7.152-16,16c0,8.832, 7.16,15.992, 16,15.992l 321.064,0
306
  c 8.84,0, 16-7.16, 16-15.992C 432.528,454.848, 425.376,447.696, 416.528,447.696z M 160.136,87.856c0-38.144, 0.176-70.112, 0.296-87.56l 192.088,0
307
  c 0.112,17.456, 0.296,49.424, 0.296,87.56c0,44.504-16.56,79.016-96.592,112.2C 176.216,166.872, 160.136,132.36, 160.136,87.856z M 352.312,447.696
308
  l-191.68,0 l0-107.704 c0-30.688, 10.32-70.208, 95.584-105.264c 85.28,35.056, 96.096,74.576, 96.096,105.264L 352.312,447.696 z" />
309
- <glyph unicode="&#xe019;" d="M 495.424,131.848L 495.424,260.92 l 8.048,4.248c 5.232,2.72, 8.528,8.112, 8.592,14.016
310
  c 0.064,5.888-3.128,11.344-8.296,14.184l-240.72,128.8c-4.816,2.64-10.64,2.624-15.488-0.048L 8.16,293.16
311
  c-5.096-2.84-8.248-8.232-8.216-14.080s 3.248-11.2, 8.408-13.984l 105.192-55.992c-1.32-2.328-2.136-4.984-2.136-7.848l0-135.392
312
  c0-4.56, 1.952-8.92, 5.36-11.952c 3.472-3.080, 36.72-30.048, 138.376-30.048c 101.296,0, 135.44,25.488, 139,28.392
@@ -314,7 +314,7 @@
314
  c-9.488-5.552-15.92-15.736-15.92-27.512c0-17.672, 14.328-32, 32-32s 32,14.328, 32,32C 511.504,116.096, 504.984,126.32, 495.424,131.848z M 368.016,73.816
315
  c-12.576-6.048-45.856-17.952-112.872-17.952c-67.44,0-99.968,12.672-111.736,18.768L 143.408,193.2 l 103.904-55.312c 2.36-1.28, 4.984-1.92, 7.592-1.92
316
  c 2.544,0, 5.096,0.608, 7.408,1.832l 105.704,55.832L 368.016,73.816 z M 255.032,170.096L 49.232,279.376l 206.16,110.488l 206.8-110.168L 255.032,170.096z" />
317
- <glyph unicode="&#xe01a;" d="M 255.992,480.064c-114.608,0-207.84-99.952-207.84-222.8l0-273.336 c0-6.608, 4.080-12.544, 10.248-14.92
318
  c 1.856-0.736, 3.816-1.080, 5.752-1.080c 4.424,0, 8.768,1.84, 11.856,5.264l 60.296,66.56l 47.216-65.216
319
  c 2.984-4.128, 7.752-6.576, 12.84-6.608l 0.112,0 c 5.048,0, 9.816,2.392, 12.832,6.456l 47.408,63.672l 46.592-63.576
320
  c 3.016-4.112, 7.8-6.544, 12.904-6.544c 5.096,0, 9.888,2.424, 12.904,6.528l 47.784,65.144l 59-66.312
@@ -325,7 +325,7 @@
325
  L 80.144,257.272 c0,105.2, 78.888,190.8, 175.84,190.8c 96.968,0, 175.856-85.592, 175.856-190.8L 431.84,25.984 z M 336,303.92c-17.64,0-31.92-14.296-31.92-31.904
326
  c0-17.624, 14.28-31.92, 31.92-31.92s 31.92,14.296, 31.92,31.92C 367.92,289.624, 353.64,303.92, 336,303.92z M 176,303.92
327
  c-17.64,0-31.92-14.296-31.92-31.904c0-17.624, 14.288-31.92, 31.92-31.92s 31.92,14.296, 31.92,31.92C 207.92,289.624, 193.64,303.92, 176,303.92z" />
328
- <glyph unicode="&#xe01b;" d="M 371.608,442.224c-12.8,6.008-24.904,11.664-35.92,17.192
329
  c-28.232,14.144-53.832,21.016-78.232,21.016c-49.144,0-83.152-28.352-104.48-49.68l-17.792-17.808l-11.872-11.888l-17.232-17.256l-26.864-26.896
330
  l-29.664-29.688c-55.344-55.4-64.184-111.8-28.632-182.904c 5.512-11.040, 11.184-23.168, 17.184-36.016
331
  c 32.352-69.192, 65.792-140.744, 120.528-140.744c 1.536,0, 3.056,0.048, 4.608,0.168c 56.488,4.424, 72.512,77.144, 86.656,141.296
@@ -341,7 +341,7 @@
341
  c 6,6, 6,15.736,0,21.728c-6,6-15.72,6-21.72,0l-12.176-12.176l-12.176,12.176c-6,6-15.72,6-21.72,0
342
  c-6-6-6-15.728,0-21.728l 12.176-12.176l-12.176-12.176c-6-5.992-6-15.72,0-21.72c 6-6, 15.728-6, 21.72,0
343
  l 12.176,12.168l 12.528-12.528c 6-6, 15.72-6, 21.72,0s 6,15.736,0,21.736L 164.944,208.28z" />
344
- <glyph unicode="&#xe01c;" d="M 254.208-31.64c-120.624,0-206.184,83.64-206.184,198.888c0,61.184, 36.688,127.096, 38.248,129.856
345
  c 3.184,5.672, 9.44,8.752, 15.968,8.032c 6.456-0.832, 11.768-5.488, 13.44-11.784c 0.096-0.376, 9.984-37.376, 23.032-57.92
346
  c 8.768-13.824, 17.656-23.592, 27.656-30.376c-6.768,29.328-11.952,73.456-3.512,118.736C 186.024,448.080, 283.848,477.816, 288.040,479.016
347
  c 5.392,1.544, 11.112,0.16, 15.216-3.576c 4.096-3.752, 5.968-9.376, 4.904-14.832c-0.16-0.872-16.312-87.888, 17.968-162.032
@@ -354,7 +354,7 @@
354
  c-1.2,1.704-29.656,41.984-42.2,69.12c-26.048,56.296-25.608,117.168-22.952,152.232c-26.36-15.36-66.832-49.672-79.832-119.456
355
  c-12.656-67.904, 11.936-135.8, 12.2-136.472c 2.128-5.544, 1-11.832-2.904-16.296c-3.92-4.44-9.952-6.408-15.768-5.016
356
  c-1.984,0.488-47.016,12.2-76.168,58.144C 106.464,226.512, 101.792,236.472, 97.848,246.16z" />
357
- <glyph unicode="&#xe01d;" d="M 512.688,154.104c-0.488,6.92-26.504,159.656-30.576,184.112c-0.392,2.344-0.704,4.84-1.048,7.472
358
  c-3.144,24.576-9.016,70.312-82.736,70.312c-8.84,0-16-7.16-16-16s 7.16-16, 16-16c 45.56,0, 47.968-18.704, 51-42.392
359
  c 0.392-3.032, 0.768-5.936, 1.216-8.64c 1.872-11.264, 10.352-56.080, 17.672-100.512c-18.776,14.312-42.144,22.904-67.56,22.904
360
  c-40.824,0-77.16-21.976-97.136-54.68c-9.608,3.632-25.912,8.168-47.696,8.168c-21.472,0-37.256-4.568-47.016-8.544
@@ -369,7 +369,7 @@
369
  c-44.096,0-81.344,36.488-81.344,79.672s 37.248,79.672, 81.344,79.672c 38,0, 69.816-26.744, 77.728-62.392
370
  c 0.328-3.264, 0.6-6.336, 0.808-9.144c 0.096-1.344, 0.456-2.608, 0.92-3.832c 0.080-1.44, 0.216-2.856, 0.216-4.312
371
  C 480.328,99.744, 444.592,64.008, 400.656,64.008z" />
372
- <glyph unicode="&#xe01e;" d="M 511.656,243.352c-0.68,5.656-2.808,10.856-6.048,15.232l 0.080,0 l-0.44,0.44c-1.64,2.16-3.56,4.064-5.704,5.752L 290.904,466.48
373
  c-18.112,18.112-49.752,18.144-67.888,0L 14.408,266.352c-4.512-4.2-14.44-15.544-14.44-26.672l0-239.76 c0-17.592, 14.408-32, 32-32l 448,0
374
  c 17.592,0, 32,14.408, 32,32L 511.968,239.048 C 512.080,240.488, 511.936,241.928, 511.656,243.352z M 134.896,116.832L 31.968,22.048L 31.968,207.64 L 134.896,116.832z
375
  M 167.784,103.64c 1.144,0.76, 2.232,1.624, 3.184,2.704c 0.184,0.208, 0.312,0.456, 0.48,0.672l 70.584,65
@@ -377,7 +377,7 @@
377
  l 101.24,89.848l0-180.92 L 378.728,114.72z M 51.888,258.584L 245.64,443.856c 3.032,3.016, 7.048,4.688, 11.312,4.688
378
  c 4.28,0, 8.296-1.672, 11.328-4.688L 448.968,271.68l-0.488,0 l 27.448-27.896l-121.152-107.52l-67.624,60.832
379
  c-18.84,14.768-45.888,15.408-65.84-0.688l-62.752-57.792L 37.664,245.288l 13.496,13.296L 51.888,258.584 z" />
380
- <glyph unicode="&#xe01f;" d="M 511.656,243.36c-0.68,5.656-2.808,10.856-6.048,15.232l 0.080,0 l-0.44,0.44c-1.64,2.16-3.56,4.064-5.704,5.752
381
  L 415.968,348.976L 415.968,400.608 c0,8.84-7.16,16-16,16l-50.664,0 l-58.4,49.856c-18.112,18.112-49.752,18.144-67.888,0l-58.2-49.856l-52.848,0
382
  c-8.84,0-16-7.16-16-16l0-52.688 L 14.408,266.36c-8.672-5.736-14.44-15.544-14.44-26.672l0-239.752 c0-17.592, 14.408-32, 32-32l 448,0
383
  c 17.592,0, 32,14.408, 32,32l0,239.12 C 512.080,240.496, 511.936,241.936, 511.656,243.36z M 134.432,117.248L 31.968,22.208L 31.968,207.656 L 134.432,117.248z
@@ -387,7 +387,7 @@
387
  c 3.032,3.016, 7.048,4.688, 11.312,4.688c 4.28,0, 8.296-1.672, 11.328-4.688l 32.312-27.232L 213.376,416.608 L 245.64,443.84z M 383.968,384.608l0-222.424
388
  l-28.656-25.44l-68.16,61.784c-18.84,14.768-45.888,15.408-65.84-0.688L 158,139.12l-30.032,26.504L 127.968,384.608 L 383.968,384.608 z M 51.888,258.592l 44.080,44.064
389
  l0-108.808 l-58.312,51.448l 13.496,13.296L 51.888,258.592 z" />
390
- <glyph unicode="&#xe027;" d="M 452.808,124.056c-18.672,22.712-44.24,54.872-44.24,87.68l0,104.48
391
  c0,90.008-67.32,163.24-153.344,163.24c-86.040,0-152.832-73.232-152.832-163.24l0-104.48 c0-32.256-27.744-62.744-45.336-86.4
392
  c-15.824-21.256-28.312-38.048-19.88-54.832c 7.416-14.768, 25.984-16.664, 41.328-16.664l 91.68,0 c 0.024-47.104, 38.224-85.288, 85.336-85.288
393
  c 47.12,0, 85.32,38.184, 85.344,85.288l 93.832,0 c 9.76,0, 32.576,0, 40.432,16.6C 483.056,87.248, 470.368,102.696, 452.808,124.056z
@@ -395,7 +395,7 @@
395
  c-2.448,0-4.496,0.080-6.184,0.184c 3.296,5.104, 8.136,11.624, 12.072,16.928c 19.496,26.2, 52.072,63.184, 52.072,106.712l0,104.48
396
  c0,71.232, 51.52,129.176, 118.76,129.176c 67.24,0, 119.28-57.944, 119.28-129.176l0-104.48 c0-45.008, 30.040-82.624, 51.984-109.304
397
  c 3.696-4.496, 8.12-9.88, 11.56-14.48C 437.032,87.92, 435.912,87.904, 434.696,87.904z" />
398
- <glyph unicode="&#xe028;" d="M 510.528,60.016L 416.896,233.168c 9.552,21.68, 14.896,45.64, 14.896,70.848c0,97.152-78.76,175.904-175.904,175.904
399
  c-97.168,0-175.92-78.76-175.92-175.904c0-25.816, 5.608-50.312, 15.592-72.392L 1.512,60.096c-3.032-5.512-2.528-12.312, 1.264-17.344
400
  c 3.8-5.016, 10.216-7.376, 16.344-5.936l 80.312,18.424l 27.488-76.56c 2.144-5.952, 7.576-10.080, 13.872-10.544
401
  c 0.408-0.032, 0.8-0.048, 1.184-0.048c 5.856,0, 11.296,3.216, 14.096,8.44l 81.848,152.488c 5.904-0.6, 11.896-0.904, 17.96-0.904
@@ -406,7 +406,7 @@
406
  c 79.272,0, 143.768-64.496, 143.768-143.768s-64.496-143.784-143.768-143.784C 176.608,160.232, 112.112,224.744, 112.112,304.016z M 405.872,89.592
407
  c-7.936,1.872-15.888-2.56-18.64-10.184l-20.264-56.488L 305.392,135.2c 37.72,11.048, 70.168,34.368, 92.752,65.368l 67.424-124.664L 405.872,89.592z
408
  " />
409
- <glyph unicode="&#xe029;" d="M 510.512,114.296l-41.144,75.648c-0.064,0.104-0.048,0.2-0.112,0.296l-2.936,5.072
410
  c-1.64,2.808-4.216,4.616-7.096,5.296c-2.848,0.704-5.992,0.272-8.704-1.488l-4.92-3.168c-0.096-0.056-0.152-0.144-0.248-0.208
411
  l-72.8-49.16c-5.44-3.504-7.208-10.84-3.968-16.456l 3.272-3.6c 3.24-5.592, 10.632-5.824, 16.080-2.32l 43.52,29.592
412
  c-10.304-83-77.368-146.696-159.48-154.088L 271.976,320.512 L 336,320.512 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16l-64.72,0
@@ -419,26 +419,26 @@
419
  c 14.688-102.36, 102.552-178.912, 206.64-178.912c 104.032,0, 191.96,76.544, 206.68,178.856l 23.92-44.432c 3.248-5.592, 9.944-8.768, 15.384-5.272
420
  l 4.56,1.712C 511.984,101.36, 513.76,108.712, 510.512,114.296z M 223.752,416.512c0,17.92, 14.576,32.504, 32.496,32.504
421
  c 17.92,0, 32.504-14.576, 32.504-32.504s-14.576-32.504-32.504-32.504C 238.336,384.016, 223.752,398.592, 223.752,416.512z" />
422
- <glyph unicode="&#xe02a;" d="M 511.824,334.76c 0.232,11.832-2.952,39.424-38.92,49.032L 115.024,455.76l-3.328,0.344
423
  c-26.472,0-48-21.528-48-48l0-64.352 l-16,0.040c-26.376-0.112-47.816-21.576-47.816-47.984l0-255.904 c0-26.472, 21.528-48, 48-48l 416.232,0
424
  c 26.472,0, 48,21.528, 48,48L 511.824,334.76z M 95.696,408.104c0,8.36, 6.44,15.232, 14.608,15.936l 353-71.44
425
  c 0.128-0.064-2.624-8.968-15.44-8.8L 95.696,343.8 L 95.696,408.104 z M 480.12,39.896c0-8.832-7.168-16-16-16L 47.88,23.896 c-8.832,0-16,7.168-16,16L 31.88,295.808
426
  c0,8.832, 7.168,16, 16,16l 400.032,0 c 15.704,0, 32.2,5.352, 32.2,15.944L 480.112,39.896 z M 95.912,199.752c-17.672,0-32-14.328-32-32s 14.328-32, 32-32
427
  s 32,14.328, 32,32S 113.584,199.752, 95.912,199.752z" />
428
- <glyph unicode="&#xe02b;" d="M 496,144l-16.136,0 l0,0.808 c0,80.96-43.264,151.904-107.832,191.192l 80.408,0
429
  c 5.544-9.52, 15.752-16, 27.56-16c 17.672,0, 32,14.328, 32,32s-14.328,32-32,32c-11.816,0-22.016-6.48-27.56-16L 304,368 l0,16 c0,8.832-7.168,16-16,16l-64,0
430
  c-8.832,0-16-7.168-16-16l0-16 L 59.56,368 C 54.016,377.52, 43.816,384, 32,384c-17.672,0-32-14.328-32-32s 14.328-32, 32-32c 11.816,0, 22.016,6.48, 27.56,16l 80.4,0
431
  C 75.392,296.704, 32.136,225.768, 32.136,144.808L 32.136,144 L 16,144 c-8.832,0-16-7.168-16-16l0-64 c0-8.832, 7.168-16, 16-16l 64,0 c 8.832,0, 16,7.168, 16,16l0,64
432
  c0,8.832-7.168,16-16,16L 64.136,144 l0,0.808 c0,89.224, 61.232,164.336, 143.864,185.696L 208,320 c0-8.832, 7.168-16, 16-16l 64,0 c 8.832,0, 16,7.168, 16,16l0,10.504
433
  c 82.632-21.368, 143.864-96.48, 143.864-185.696L 447.864,144 L 432,144 c-8.832,0-16-7.168-16-16l0-64 c0-8.832, 7.168-16, 16-16l 64,0 c 8.832,0, 16,7.168, 16,16l0,64
434
  C 512,136.832, 504.832,144, 496,144z M 64,80L 32,80 l0,32 l 32,0 L 64,80 z M 272,336l-32,0 l0,32 l 32,0 L 272,336 z M 480,80l-32,0 l0,32 l 32,0 L 480,80 z" />
435
- <glyph unicode="&#xe02c;" d="M 480,448.2L 32,448.2 c-17.672,0-32-14.328-32-32l0-288.752 c0-17.672, 14.328-32, 32-32l 63.768,0 l0-79.656
436
  c0-6.456, 3.872-12.264, 9.816-14.752c 2-0.84, 4.112-1.248, 6.184-1.248c 4.128,0, 8.168,1.592, 11.216,4.592l 92.512,91.064L 480,95.448
437
  c 17.672,0, 32,14.328, 32,32L 512,416.2 C 512,433.872, 497.672,448.2, 480,448.2z M 480,127.456L 202.392,127.456 l-74.624-73.456l0,73.456 L 32,127.456 L 32,416.2 l 448,0 L 480,127.456 z
438
  M 112,255.496l 288,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 112,287.496 c-8.832,0-16-7.168-16-16S 103.168,255.496, 112,255.496z M 112,319.496l 288,0
439
  c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 112,351.496 c-8.832,0-16-7.168-16-16S 103.168,319.496, 112,319.496z M 112,191.496l 192,0 c 8.832,0, 16,7.168, 16,16
440
  s-7.168,16-16,16L 112,223.496 c-8.832,0-16-7.168-16-16S 103.168,191.496, 112,191.496z" />
441
- <glyph unicode="&#xe02d;" d="M 256-32.080c-10.144,0-19.688,3.936-26.872,11.096L 10.872,197.264c-14.768,14.84-14.768,38.976-0.032,53.784l 79.952,79.936
442
  c 4.936,4.936, 12.512,6.112, 18.72,2.872c 6.184-3.232, 9.56-10.112, 8.344-16.984c-0.816-4.576-1.184-8.248-1.184-11.56
443
  c0-35, 28.488-64.072, 63.504-64.072c 35.048,0, 60.64,29.072, 60.64,64.072c0,35.048-25.592,63.544-60.64,63.544c-3.28,0-6.936-0.376-11.512-1.184
444
  c-6.936-1.28-13.752,2.16-16.984,8.344c-3.232,6.2-2.064,13.784, 2.872,18.72l 74.544,74.56c 14.44,14.376, 39.408,14.344, 53.784,0.032
@@ -450,20 +450,20 @@
450
  c-30.856,0-55.968-25.128-55.968-56.016c0-1.28, 0.2-2.528, 0.376-3.784l 0.344-2.856c 0.72-6.752-2.888-13.216-9.016-16.144
451
  c-6.080-2.904-13.408-1.656-18.2,3.128l-78.472,78.512c-3.064,3.032-5.472,3.064-8.592-0.032l-48.56-48.56
452
  c 41.64-10.312, 69.688-47.984, 69.688-92.768c0-52.656-39.96-96.064-92.648-96.064C 135.4,209.248, 97.744,240.784, 87.448,282.392z" />
453
- <glyph unicode="&#xe02e;" d="M 476.368,352.536l-60.36,0 L 416.008,479.76 L 95.992,479.76 l0-127.224 L 35.632,352.536 c-19.656,0-35.656-16-35.656-35.672
454
  L-0.024,99.92 c0-19.672, 16-35.672, 35.656-35.672l 60.36,0 L 95.992-31.76 l 320.016,0 L 416.008,64.248 l 60.36,0 c 19.656,0, 35.656,16, 35.656,35.672L 512.024,316.864
455
  C 512.024,336.536, 496.024,352.536, 476.368,352.536z M 127.992,448.256l 256.016,0 l0-95.72 L 127.992,352.536 L 127.992,448.256 z M 384.008,0.24L 127.992,0.24 L 127.992,176.44 l 256.016,0
456
  L 384.008,0.24 z M 480.024,99.92c0-2.040-1.64-3.672-3.656-3.672l-60.36,0 L 416.008,208.44 L 95.992,208.44 l0-112.184 L 35.632,96.256 c-2.016,0-3.656,1.632-3.656,3.672
457
  L 31.976,316.864 c0,2.032, 1.64,3.672, 3.656,3.672l 440.736,0 c 2.016,0, 3.656-1.64, 3.656-3.672L 480.024,99.92 z M 416,288.28l-16,0 c-8.832,0-16-7.168-16-16
458
  s 7.168-16, 16-16l 16,0 c 8.832,0, 16,7.168, 16,16S 424.832,288.28, 416,288.28z" />
459
- <glyph unicode="&#xe02f;" d="M 512,319.752c0,17.672-14.328,32-32,32l-54.624,0 c 14.136,13.944, 23.184,32.224, 23.184,54.736c0,27.72-15.92,57.832-60.608,57.832
460
  c-58.8,0-107.92-62.608-131-97.704C 233.856,401.704, 183.232,464.312, 124.44,464.312c-44.688,0-60.608-30.112-60.608-57.832
461
  c0-22.504, 9.296-40.792, 23.72-54.736L 32,351.744 c-17.672,0-32-14.328-32-32l0-95.784 l 32.28,0 l0-208.28 c0-17.672, 14.328-32, 32-32l 383.84,0 c 17.672,0, 32,14.328, 32,32
462
  L 480.12,223.968 L 512,223.968 L 512,319.752 z M 387.952,432.312c 19.784,0, 28.608-8.312, 28.608-25.832c0-35.544-39.672-54.72-76.984-54.72l-54.168,0
463
  C 308.144,385.528, 348.16,432.312, 387.952,432.312z M 124.44,432.312c 39.8,0, 81.328-46.784, 104.064-80.544l-54.184,0
464
  c-37.312,0-78.488,19.672-78.488,55.216C 95.832,424.496, 104.656,432.312, 124.44,432.312z M 480,255.968L 272,255.968 l0,63.784 l 208,0 L 480,255.968 z M 32,319.752l 208,0 l0-63.784
465
  L 32,255.968 L 32,319.752 z M 64.28,223.968L 240,223.968 l0-208.28 L 64.28,15.688 L 64.28,223.968 z M 448.128,15.688L 272,15.688 L 272,223.968 l 176.128,0 L 448.128,15.688 z" />
466
- <glyph unicode="&#xe030;" d="M 16.88,448.12l 224,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16l-224,0 c-8.832,0-16-7.168-16-16
467
  S 8.040,448.12, 16.88,448.12z M 16.88,352.12l 224,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16l-224,0 c-8.832,0-16-7.168-16-16S 8.040,352.12, 16.88,352.12z
468
  M 256.88,272.12c0,8.832-7.168,16-16,16l-224,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 224,0 C 249.712,256.12, 256.88,263.288, 256.88,272.12z
469
  M 506.44,317.728L 349.984,474.176c-4.952,4.96-12.328,5.92-18.296,3.008c-6.272-2.168-10.808-8.056-10.808-15.064L 320.88,107.92
@@ -471,7 +471,7 @@
471
  c 53.064,0, 96.048,35.904, 96.048,80.168c0,2.008-0.184,3.968-0.36,5.936L 352.88,426.024 l 130.92-130.928c 6.248-6.248, 16.384-6.248, 22.632,0
472
  C 512.68,301.344, 512.68,311.48, 506.44,317.728z M 320.88,46.488c-1.152-22.248-27.096-46.408-64.064-46.408
473
  c-37.824,0-64.176,25.28-64.176,47.936c0,22.672, 26.352,47.92, 64.176,47.92c 36.968,0, 62.912-24.128, 64.064-46.392L 320.88,46.488 z" />
474
- <glyph unicode="&#xe031;" d="M 507.424,290.168L 323.344,475.176c-3.968,3.984-9.688,5.608-15.16,4.248c-5.456-1.328-9.8-5.424-11.472-10.784
475
  c-11.080-35.656-12.36-67.92-3.896-97.344c-0.776-0.536-1.52-1.12-2.208-1.808L 205.056,283.952c-27.6,12.8-57.272,19.728-86.848,19.728
476
  c-18.8,0-37.232-2.784-54.784-8.232c-5.344-1.672-9.44-6-10.784-11.424c-1.344-5.44, 0.232-11.168, 4.184-15.144l 109.488-110.192
477
  L 13.232,3.168l-13.312-35.064l 32.184,12.44l 156.68,155.52l 110.912-111.632c 3.032-3.064, 7.144-4.72, 11.344-4.72
@@ -482,18 +482,18 @@
482
  c-8.416,12.864-18.232,25.088-29.512,36.376c-11.232,11.232-23.504,21.128-36.48,29.664l 72.064,72.048c 7.352-12.784, 16.832-25, 28.504-36.664
483
  c 11.928-11.92, 24.544-21.568, 37.8-29.032L 300.112,201.728z M 357.312,325.776c-30.768,30.768-42.624,65.064-36.344,106.44l 143.456-144.2
484
  C 423.096,282.088, 388.624,294.464, 357.312,325.776z" />
485
- <glyph unicode="&#xe032;" d="M 480,440.048L 32,440.048 c-17.592,0-32-14.408-32-32l0-368.096 c0-17.592, 14.408-32, 32-32l 448,0 c 17.592,0, 32,14.408, 32,32L 512,408.048
486
  C 512,425.64, 497.592,440.048, 480,440.048z M 480,39.952L 32,39.952 L 32,134.232 l 128.424,124.456l 132.392-132.248c 5.456-6.624, 15.168-5.784, 22.064-0.56
487
  l 58.44,52.904L 478.72,70.592c 0.4-0.4, 0.848-0.696, 1.28-1.040L 480,39.952 z M 480,115.104L 385.984,211.312
488
  c-5.704,5.624-14.64,6.2-20.968,1.376l-60.28-52.512L 172.264,291.216c-2.832,3.424-6.92,5.512-11.344,5.8
489
  c-4.408,0.16-8.752-1.28-11.984-4.312L 32,178.904L 32,408.048 l 448,0 L 480,115.104 z M 368,279.936c 17.64,0, 31.92,14.304, 31.92,31.92
490
  c0,17.608-14.28,31.912-31.92,31.912s-31.92-14.304-31.92-31.912C 336.080,294.24, 350.36,279.936, 368,279.936z" />
491
- <glyph unicode="&#xe033;" d="M 496.592,412.496L 336.112,479.032L 176.392,415.816L 15.408,479
492
  c-1.376,0.408-2.72,0.56-3.984,0.56C 4.856,479.592,0,474.688,0,467.312l0-415 c0-8.784, 6.936-17.936, 15.408-20.28l 161.168-63.592
493
  l 159.504,64.752l 160.512-63.064c 1.376-0.376, 2.72-0.56, 3.984-0.56c 6.56,0, 11.424,4.872, 11.424,12.248L 512,392.184
494
  C 512,400.968, 505.064,410.128, 496.592,412.496z M 192,389.432l 128,50.152l0-380.752 l-128-50.592L 192,389.432 z M 32,436.656l 128-47.288l0-380.88 L 32,60.624L 32,436.656 z
495
  M 480,11l-128,48.192L 352,439.104 l 128-55.192L 480,11 z" />
496
- <glyph unicode="&#xe034;" d="M 10.92,329.096l 237.544-129.36c 2.392-1.296, 5.016-1.952, 7.656-1.952c 2.608,0, 5.216,0.64, 7.592,1.92l 240.048,129.36
497
  c 5.232,2.816, 8.488,8.312, 8.408,14.264c-0.080,5.968-3.456,11.376-8.752,14.080L 265.856,478.048c-4.528,2.296-9.872,2.312-14.44,0.032
498
  L 11.392,357.44c-5.312-2.672-8.72-8.080-8.816-14.032S 5.704,331.936, 10.92,329.096z M 258.576,445.856L 461.656,342.72L 256.168,231.984
499
  L 53.080,342.576L 258.576,445.856z M 500.672,239.84l-47.488,24.112l-34.28-18.488l 40-20.312L 253.424,114.424L 50.328,225.016l 42.656,21.44L 58.8,265.080
@@ -502,7 +502,7 @@
502
  M 500.672,127.84l-44.984,22.112l-34.28-18.488l 37.504-18.312L 253.424,2.424L 50.328,113.016l 39.656,17.936l-34.184,18.624L 8.64,127.872
503
  c-5.312-2.672-8.72-8.080-8.816-14.032s 3.128-11.472, 8.344-14.312l 237.544-129.36c 2.392-1.296, 5.016-1.952, 7.656-1.952
504
  c 2.608,0, 5.216,0.64, 7.592,1.92l 240.048,129.36c 5.232,2.816, 8.488,8.312, 8.408,14.264C 509.344,119.736, 505.968,125.144, 500.672,127.84z" />
505
- <glyph unicode="&#xe035;" d="M 511.368,8.68l-41.704,251.888c-3.72,32.656-33.488,59.216-66.36,59.216l-35.328,0 l0,42.64 c0,65.080-46.424,118.016-111.488,118.016
506
  c-65.048,0-112.472-52.936-112.472-118.016l0-42.64 L 105.68,319.784 c-32.872,0-62.64-26.56-66.264-58.528l-38.64-252.080
507
  c-1.488-13.28, 1.112-23.752, 7.704-31.144c 6.216-6.952, 15.264-10.488, 26.872-10.488l 436.784,0 c 16.456,0, 25.888,6.608, 30.92,12.16
508
  C 507.664-15.192, 512.88-6.224, 511.368,8.68z M 176.024,362.432c0,47.424, 33.064,86.016, 80.472,86.016s 79.488-38.592, 79.488-86.016l0-42.64
@@ -510,7 +510,7 @@
510
  l 38.344,0 l0-36.464 C 134.488,245.784, 128,235.576, 128,223.752c0-17.672, 14.328-32, 32-32s 32,14.328, 32,32c0,11.808-6.464,22-15.976,27.544l0,36.496 l 159.952,0
511
  l0-36.496 C 326.472,245.752, 320,235.552, 320,223.752c0-17.672, 14.328-32, 32-32s 32,14.328, 32,32c0,11.824-6.488,22.032-16.024,27.576l0,36.464 l 35.328,0
512
  c 16.832,0, 32.656-14.128, 34.704-31.72l 41.672-251.64C 479.88,2.384, 478.272-0.224, 473.584-0.224z" />
513
- <glyph unicode="&#xe036;" d="M 464.752,272.792c0,84.392-44.488,160.936-118.984,204.784c-7.624,4.504-17.44,1.936-21.904-5.688
514
  c-4.472-7.608-1.936-17.424, 5.688-21.904c 64.624-38.016, 103.2-104.264, 103.2-177.184c0-121.184-87.968-209.144-209.16-209.144
515
  c-27.096,0-53.392,5.080-78.16,15.080c-8.184,3.328-17.528-0.64-20.832-8.832c-3.312-8.2, 0.64-17.528, 8.832-20.832
516
  c 28.608-11.56, 58.936-17.424, 90.16-17.424c 0.096,0, 0.192,0.008, 0.288,0.008l0-31.504 l-46.464,0 c-9.232,0-16.72-7.152-16.72-15.976
@@ -519,7 +519,7 @@
519
  c-97.344,0-176.232-79.376-176.232-176.704s 78.888-175.72, 176.232-175.72C 320.816,95.632, 399.688,174.024, 399.688,271.352z M 79.248,271.352
520
  c0,79.512, 64.704,144.704, 144.232,144.704c 79.512,0, 144.2-65.184, 144.2-144.704s-64.688-143.72-144.2-143.72
521
  C 143.952,127.632, 79.248,191.832, 79.248,271.352z" />
522
- <glyph unicode="&#xe037;" d="M 512.512,224c0,136.008-106.832,247.552-241.16,255.512c-2.768,0.304-5.544,0.504-8.36,0.504c-0.832,0-1.664-0.088-2.496-0.112
523
  C 259,479.928, 257.512,480.016, 256,480.016C 114.56,480.016-0.512,365.168-0.512,224c0-141.168, 115.072-256.016, 256.512-256.016
524
  c 1.512,0, 3,0.088, 4.504,0.12c 0.832-0.032, 1.664-0.12, 2.496-0.12c 2.816,0, 5.592,0.2, 8.36,0.504
525
  C 405.68-23.552, 512.512,87.976, 512.512,224z M 464.784,141.584c-8.816,2.56-30.96,8.12-70.032,12.696c 3.232,22.096, 5,45.448, 5,69.72
@@ -539,14 +539,14 @@
539
  c 11.632,2.472, 32.456,6.232, 63.296,9.464c 12.144-44.856, 31.896-82.808, 55.568-109.984C 128.848,31.664, 86.76,67.68, 60.544,113.824z
540
  M 345.328,18.408c 19.112,26.632, 34.24,62.512, 43.648,104.4c 31.704-3.64, 51.608-7.896, 61.648-10.432
541
  C 426.616,70.84, 389.696,37.68, 345.328,18.408z" />
542
- <glyph unicode="&#xe038;" d="M 112,424L 16,424 C 7.168,424,0,416.832,0,408l0-96 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 32,392 l 80,0
543
  c 8.832,0, 16,7.168, 16,16S 120.832,424, 112,424z M 496,152c-8.832,0-16-7.168-16-16l0-80 L 400,56 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 96,0 c 8.832,0, 16,7.168, 16,16
544
  L 512,136 C 512,144.832, 504.832,152, 496,152z M 112,56L 32,56 L 32,136 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-96 c0-8.832, 7.168-16, 16-16l 96,0 c 8.832,0, 16,7.168, 16,16
545
  S 120.832,56, 112,56z M 496,424L 400,424 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 80,0 l0-80 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 512,408 C 512,416.832, 504.832,424, 496,424z" />
546
- <glyph unicode="&#xe039;" d="M 480.080,376l-240,0 l-48,48l-160,0 c-17.672,0-32-14.328-32-32l0-80 l-0.152,0 l0-32 l 0.152,0 l0-224
547
  c0-17.672, 14.328-32, 32-32l 448,0 c 17.672,0, 32,14.328, 32,32L 512.080,344 C 512.080,361.672, 497.752,376, 480.080,376z M 32.072,392l 145.376,0 l 39.312-38.624L 226.816,344L 480.080,344
548
  l0-32 l-448,0 L 32.080,392 z M 32.072,56L 32.072,280 l 448,0 l0-224 L 32.072,56 z" />
549
- <glyph unicode="&#xe03a;" d="M 400,343.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 384,351.024, 391.168,343.856, 400,343.856z
550
  M 400,247.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 384,255.024, 391.168,247.856, 400,247.856z
551
  M 400,151.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 384,159.024, 391.168,151.856, 400,151.856z
552
  M 400,55.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 384,63.024, 391.168,55.856, 400,55.856z
@@ -556,14 +556,14 @@
556
  M 80,55.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 64,63.024, 71.168,55.856, 80,55.856z M 480,472.048
557
  L 32,472.048 c-17.592,0-32-14.408-32-32l0-432.096 c0-17.592, 14.408-32, 32-32l 448,0 c 17.592,0, 32,14.408, 32,32L 512,440.048 C 512,457.64, 497.592,472.048, 480,472.048z M 480,7.952L 32,7.952
558
  L 32,440.048 l 448,0 L 480,7.952 z" />
559
- <glyph unicode="&#xe03b;" d="M 50.936,314.872c-9.064,0-16.384-7.328-16.384-16.384c0-9.048, 7.32-16.384, 16.384-16.384c 151.504,0, 262.672-112.184, 262.672-263.68
560
  c0-9.048, 7.328-16.376, 16.384-16.376s 16.384,7.328, 16.384,16.376C 346.376,188.608, 221.112,314.872, 50.936,314.872z M 51.080,478.688
561
  c-9.056,0-16.384-7.328-16.384-16.384c0-9.056, 7.328-16.384, 16.384-16.384c 235.088,0, 426.336-191.248, 426.336-426.328
562
  c0-9.048, 7.328-16.376, 16.384-16.376s 16.384,7.328, 16.384,16.376C 510.176,272.736, 304.224,478.688, 51.080,478.688z M 92.008,150.2
563
  c-49.736,0-90.184-40.56-90.184-90.44c0-49.856, 40.456-90.456, 90.184-90.456s 90.2,40.592, 90.2,90.456
564
  C 182.208,109.64, 141.744,150.2, 92.008,150.2z M 92.008,0.984c-32.304,0-58.584,26.376-58.584,58.784s 26.28,58.768, 58.584,58.768
565
  c 32.312,0, 58.608-26.36, 58.608-58.768S 124.32,0.984, 92.008,0.984z" />
566
- <glyph unicode="&#xe03c;" d="M 511.92,193.728c 0.048,10.528-1.608,50.248-2.872,61.608
567
  C 494.488,385.712, 388.672,480.336, 257.456,480.336c-136.672,0-247.408-105.312-254.92-244.952c-0.16-3.048-1.28-24.672-1.36-37.544l-0.040-7.16
568
  c-0.656-2.96-1.056-6.016-1.056-9.168l0-107.328 c0-23.44, 19.064-42.504, 42.504-42.504l 43.144,0 c 23.44,0, 42.512,19.064, 42.512,42.504L 128.24,181.504
569
  c0,23.44-19.080,42.504-42.512,42.504L 42.576,224.008 c-2.944,0-5.816-0.304-8.592-0.872c 0.24,5.192, 0.456,9.288, 0.512,10.528
@@ -575,7 +575,7 @@
575
  c0-5.8-4.72-10.504-10.512-10.504L 42.576,63.672 c-5.8,0-10.504,4.704-10.504,10.504L 32.072,181.504 C 32.080,187.304, 36.784,192.008, 42.576,192.008z
576
  M 416.264,181.504c0,5.8, 4.704,10.504, 10.504,10.504l 42.64,0 c 5.8,0, 10.512-4.704, 10.512-10.504l0-106.832 c0-5.8-4.72-10.504-10.512-10.504
577
  l-42.64,0 c-5.8,0-10.504,4.704-10.504,10.504L 416.264,181.504 z" />
578
- <glyph unicode="&#xe03d;" d="M 511.92,177.72c 0.048,10.528-1.608,50.248-2.872,61.608C 494.488,369.704, 388.672,464.328, 257.456,464.328
579
  c-136.672,0-247.408-105.312-254.92-244.952c-0.16-3.048-1.28-24.672-1.36-37.544l-0.040-7.16c-0.656-2.96-1.056-6.016-1.056-9.168
580
  l0-139.328 c0-23.44, 19.064-42.504, 42.504-42.504l 43.144,0 c 23.44,0, 42.512,19.064, 42.512,42.504L 128.24,165.496 c0,23.44-19.080,42.504-42.512,42.504L 42.568,208
581
  c-2.944,0-5.816-0.304-8.592-0.872c 0.24,5.192, 0.456,9.296, 0.512,10.528C 41.080,340.048, 138.056,432.328, 257.456,432.328
@@ -585,36 +585,36 @@
585
  l0-139.328 c0-5.808-4.72-10.504-10.512-10.504L 42.568,15.664 c-5.8,0-10.504,4.704-10.504,10.504L 32.064,165.496 C 32.080,171.296, 36.784,176, 42.568,176z
586
  M 479.92,26.672c0-5.8-4.72-10.504-10.512-10.504l-42.64,0 c-5.8,0-10.504,4.704-10.504,10.504L 416.264,165.496 c0,5.8, 4.704,10.504, 10.504,10.504
587
  l 42.64,0 c 5.8,0, 10.512-4.704, 10.512-10.504L 479.92,26.672 z" />
588
- <glyph unicode="&#xe03e;" d="M 255.2-31.352c-96.656,0-175.296,77.56-175.296,172.888c0,111.344, 155.816,322.424, 162.456,331.36
589
  c 3,4.032, 7.704,6.424, 12.736,6.456c 5.592,0.048, 9.784-2.296, 12.832-6.28c 6.704-8.768, 164.168-216.112, 164.168-331.528
590
  C 432.096,46.208, 352.736-31.352, 255.2-31.352z M 255.376,436.152c-37.2-52.832-143.472-211.032-143.472-294.608
591
  c0-77.688, 64.28-140.888, 143.296-140.888c 79.888,0, 144.888,63.2, 144.888,140.888C 400.096,228.224, 293.016,384.056, 255.376,436.152z" />
592
- <glyph unicode="&#xe03f;" d="M 511.488,225.008L 452.736,428.552c-1.92,6.936-8.232,11.736-15.424,11.736L 69.64,440.288 c-7.248,0-13.592-4.872-15.472-11.888L 0.472,235.224
593
  c-0.992-3.752-0.504-7.504, 1-10.768C 0.608,221.56,0,218.544,0,215.368l0-175.656 c0-17.672, 14.328-32, 32-32l 448,0 c 17.672,0, 32,14.328, 32,32L 512,215.368
594
  c0,0.856-0.184,1.664-0.248,2.504C 512.168,220.168, 512.16,222.592, 511.488,225.008z M 81.952,408.288l 343.184,0 l 46.56-160.92L 322.528,247.368
595
  c-0.72-38.408-27.952-64.84-66.528-64.84s-65.312,26.44-66.032,64.84L 37.080,247.368 L 81.952,408.288z M 480,39.712L 32,39.712 L 32,215.368 l 131.56,0
596
  c 13.968-40.216, 47.888-64.84, 92.44-64.84s 78.968,24.624, 92.936,64.84L 480,215.368 L 480,39.712 z" />
597
- <glyph unicode="&#xe040;" d="M 384,480L 208,480 c-17.672,0-32-14.328-32-32l 176,0 l0-128 l 128,0 l0-256 L 368,64 l0-32 l 112,0 c 17.672,0, 32,14.328, 32,32L 512,351.992 L 384,480z M 384,352L 384,434.752 L 466.736,352L 384,352 z M 32,416
598
  c-17.672,0-32-14.328-32-32l0-384 c0-17.672, 14.328-32, 32-32l 272,0 c 17.672,0, 32,14.328, 32,32L 336,287.992 L 208,416L 32,416 z M 304,0L 32,0 L 32,384 l 144,0 l0-128 l 128,0 L 304,0 z M 208,288L 208,370.752
599
  L 290.736,288L 208,288 z" />
600
- <glyph unicode="&#xe041;" d="M 508.528,386.968L 458.68,442.64c-3.032,3.424-7.392,5.376-11.968,5.376L 271.584,448.016 L 271.584,465 c0,8.28-7.168,15-16,15
601
  c-8.832,0-16-6.72-16-15l0-16.984 L 111.68,448.016 c-8.84,0-16-7.16-16-16l0-111.832 c0-8.84, 7.16-16, 16-16l 127.904,0 l0-32.048 L 65.288,272.136
602
  c-4.576,0-8.936-1.952-11.968-5.376l-49.84-56.656c-5.376-6.064-5.376-15.184,0-21.248l 49.84-56.144c 3.056-3.424, 7.392-4.872, 11.968-4.872
603
  l 174.296,0 l0-144.84 c0-8.28, 7.168-15, 16-15c 8.832,0, 16,6.72, 16,15L 271.584,127.84 l 128.232,0 c 8.84,0, 16,7.16, 16,16L 415.816,256.144 c0,8.84-7.16,16-16,16
604
  L 271.584,272.144 l0,32.048 l 175.128,0 c 4.576,0, 8.936,1.952, 11.968,5.376l 49.848,56.16C 513.896,371.784, 513.896,380.904, 508.528,386.968z M 383.824,159.84
605
  L 72.48,159.84 l-35.64,39.64l 35.64,40.656l 311.344,0 L 383.824,159.84 z M 439.52,336.184L 127.68,336.184 L 127.68,416.016 l 311.84,0 l 35.64-39.672L 439.52,336.184z" />
606
- <glyph unicode="&#xe042;" d="M 483.456,330.92l-89.56,96C 390.856,430.16, 386.624,432, 382.184,432L 248.624,432 l-0.504,33c0,8.28-7.168,15-16,15
607
  c-8.832,0-15-6.72-15-15L 216.632,432L 40.248,432 c-8.84,0-16-7.16-16-16l0-192 c0-8.84, 7.16-16, 16-16l 176.168,0 l0-225
608
  c0-8.28, 7.168-15, 16-15c 8.832,0, 16,6.72, 16,15L 248.416,208 l 133.768,0 c 4.44,0, 8.672,1.84, 11.704,5.080l 89.56,96
609
  C 489.184,315.232, 489.184,324.768, 483.456,330.92z M 375.232,240L 56.248,240 L 56.248,400 l 318.984,0 l 74.64-80L 375.232,240z" />
610
- <glyph unicode="&#xe043;" d="M 509.36,332.264L 439.424,465.984C 435.344,473.784, 424.792,480.16, 416,480.16L 255.032,480.16 c-0.176,0.008-0.352,0.056-0.528,0.064
611
  c-0.144,0-0.28-0.056-0.424-0.064L 96,480.16 c-8.8,0-19.376-6.36-23.512-14.128L 2.736,334.888c-4.144-7.768-3.312-19.968, 1.816-27.128
612
  L 244.56-26.816c 2.576-3.592, 6-5.408, 9.416-5.408c 3.392,0, 6.792,1.768, 9.384,5.296L 507.312,305.2
613
  C 512.504,312.296, 513.44,324.472, 509.36,332.264z M 471.184,336.184L 385.456,336.184 l 34.328,98.304L 471.184,336.184z M 287.672,448.16l 102.984,0 l-31.944-91.464
614
  L 287.672,448.16z M 334.12,336.184L 185.296,336.184 l 70.336,101.048L 334.12,336.184z M 156.944,351.456L 124.856,448.16l 99.408,0 L 156.944,351.456z
615
  M 340.376,304.184L 254.36,57.912L 172.632,304.184L 340.376,304.184 z M 218.464,64.456L 46.496,304.184l 92.416,0 L 218.464,64.456z M 374.272,304.184l 92.584,0
616
  L 290.368,63.904L 374.272,304.184z M 94.24,438.792l 34.048-102.608L 39.664,336.184 L 94.24,438.792z" />
617
- <glyph unicode="&#xe044;" d="M 416.28,272.104c-4.168,0-17.6,0.080-32.152,0.184l 0.056,31.984c0,17.672-14.328,32-32,32
618
  l-320.248,0.080c-17.672,0-32-14.328-32-32l0-240.472 c0-53.016, 42.984-96, 96-96l 192.328,0 c 53.016,0, 95.504,42.984, 95.504,96l 0.032,16.424
619
  c 14.512-0.112, 29.304-0.2, 32.488-0.2c 52.888,0, 95.784,42.52, 95.784,95.536C 512.064,228.664, 469.168,272.104, 416.28,272.104z
620
  M 351.768,63.88c0-35.296-28.2-64-63.504-64L 95.936-0.12 c-35.296,0-64,28.704-64,64L 31.888,304.352l 0.048,0 l 320.248-0.096L 351.768,63.88z
@@ -623,13 +623,13 @@
623
  s-16-7.168-16-16l0-80 C 271.936,375.28, 279.104,368.12, 287.936,368.12z M 95.936,368.12c 8.832,0, 16,7.168, 16,16l0,80 c0,8.832-7.168,16-16,16
624
  s-16-7.168-16-16l0-80 C 79.936,375.28, 87.104,368.12, 95.936,368.12z M 191.936,368.12c 8.832,0, 16,7.168, 16,16l0,80 c0,8.832-7.168,16-16,16
625
  s-16-7.168-16-16l0-80 C 175.936,375.28, 183.104,368.12, 191.936,368.12z" />
626
- <glyph unicode="&#xe045;" d="M 366.592,339.864l-156.576-67.32c-2.832-1.44-5.128-3.736-6.576-6.576L 131.712,121.36
627
  c-2.936-5.768-1.872-12.768, 2.656-17.392c 2.904-2.952, 6.816-4.512, 10.768-4.512c 2.216,0, 4.472,0.488, 6.56,1.504l 152.864,63.488
628
  c 2.8,1.344, 5.112,3.528, 6.608,6.248l 75.44,148.448c 3.216,5.8, 2.264,13.016-2.328,17.784C 379.672,341.696, 372.488,342.864, 366.592,339.864
629
  z M 178.928,147.592l 43.504,88.84l 43.936-54.992L 178.928,147.592z M 292.352,200.192l-44.4,55.576l 88.392,34.88L 292.352,200.192z M 256,480
630
  C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504
631
  C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224S 379.512-0.504, 256-0.504z" />
632
- <glyph unicode="&#xe046;" d="M 500.176,94.192c-7.832,5.504-93.528,62.488-104.032,68.904
633
  c-4.576,2.8-10.16,4.168-16.232,4.168c-7.832,0-16.504-2.28-24.968-6.736c-8.248-4.344-33.232-18.56-45.456-25.544
634
  c-10.768,7.56-36.064,26.936-75.92,66.832c-39.608,39.592-59.16,65.096-66.768,75.92c 6.968,12.216, 21.168,37.2, 25.488,45.424
635
  c 8.184,15.504, 9.112,30.984, 2.472,41.424c-6.232,9.84-62.984,95.904-68.84,104c-5.512,7.64-15.408,11.768-26.144,11.768
@@ -646,7 +646,7 @@
646
  l-5.848-0.136c-0.112,0-0.2-0.048-0.328-0.064L 379.384,480.112c-6.464-0.144-11.808-5.488-11.96-11.96l-0.016-8.208
647
  c 0.984-7.616, 6.968-12.080, 13.44-11.936l 75.624-0.2L 319.328,311.496c-6.248-6.248-6.248-16.384,0-22.632
648
  C 325.576,282.624, 335.704,282.624, 341.952,288.864z" />
649
- <glyph unicode="&#xe047;" d="M 500.176,94.192c-7.832,5.504-93.528,62.488-104.032,68.904
650
  c-4.576,2.8-10.16,4.168-16.232,4.168c-7.832,0-16.504-2.28-24.968-6.736c-8.248-4.344-33.232-18.56-45.456-25.544
651
  c-10.768,7.56-36.064,26.936-75.92,66.832c-39.608,39.592-59.16,65.096-66.768,75.92c 6.968,12.216, 21.168,37.2, 25.488,45.424
652
  c 8.184,15.504, 9.112,30.984, 2.472,41.424c-6.232,9.84-62.984,95.904-68.84,104c-5.512,7.64-15.408,11.768-26.144,11.768
@@ -663,7 +663,7 @@
663
  c 6.248,6.248, 6.248,16.384,0,22.632c-6.248,6.24-16.376,6.24-22.624,0L 350.84,342.744L 351.28,420.16c 0.144,6.464-4.984,12.096-11.448,11.944
664
  l-8.208-0.008c-6.48-0.16-11.832-4.008-11.968-10.472l-0.328-115.504c0-0.112, 0.44-0.192, 0.44-0.304l-0.64-5.856
665
  C 319.064,296.712, 319.824,293.824, 321.92,291.744z" />
666
- <glyph unicode="&#xe048;" d="M 480.848,380.224c0-0.528-0.048-0.968-0.112-1.312c-13.080-9-86.216-57.312-99.888-66.080c-1.44-0.032-5.096,0.456-10.312,3.2
667
  c-5.56,2.92-21.768,12.016-44.44,24.952l-17.64,10.064l-16.624-11.672c-12.36-8.704-39.232-29.408-80.144-70.312
668
  c-41.088-41.080-61.728-67.856-70.384-80.168l-11.672-16.624l 10.080-17.64c 9.768-17.096, 21.472-37.752, 25-44.472
669
  c 2.84-5.392, 3.064-9.080, 3.064-10.080c0-0.16,0-0.296-0.016-0.408c-7.68-12.248-57.296-86.968-66.336-100.16
@@ -675,7 +675,7 @@
675
  c-4.344,8.248-18.56,33.232-25.544,45.456c 7.56,10.768, 26.936,36.064, 66.832,75.92c 39.592,39.608, 65.096,59.16, 75.92,66.768
676
  c 12.216-6.968, 37.2-21.168, 45.424-25.488c 15.504-8.184, 30.984-9.112, 41.424-2.472c 9.84,6.232, 94.904,62.984, 103,68.84
677
  C 507.728,359.6, 511.848,369.496, 511.848,380.224L 511.848,380.224z" />
678
- <glyph unicode="&#xe049;" d="M 480,480.048L 32,480.048 c-17.592,0-32-14.408-32-32l0-448.096 c0-17.592, 14.408-32, 32-32l 448,0
679
  c 17.592,0, 32,14.408, 32,32L 512,448.048 C 512,465.64, 497.592,480.048, 480,480.048z M 480-0.048L 32-0.048 L 32,448.048 l 448,0 L 480-0.048 z M 112,303.848l 32,0 l0-32 c0-8.832, 7.168-16, 16-16
680
  s 16,7.168, 16,16l0,32 l 32,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16l-32,0 l0,32 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-32 l-32,0 c-8.832,0-16-7.168-16-16
681
  S 103.168,303.848, 112,303.848z M 216.568,184.424c-6.248,6.248-16.376,6.248-22.624,0L 160,150.488l-33.944,33.936
@@ -684,7 +684,7 @@
684
  l-33.936,33.936l 33.936,33.936C 222.816,168.040, 222.816,178.168, 216.568,184.424z M 304,303.848l 96,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 304,335.848
685
  c-8.832,0-16-7.168-16-16S 295.168,303.848, 304,303.848z M 304,143.848l 96,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 304,175.848 c-8.832,0-16-7.168-16-16
686
  S 295.168,143.848, 304,143.848z M 304,79.848l 96,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 304,111.848 c-8.832,0-16-7.168-16-16S 295.168,79.848, 304,79.848z" />
687
- <glyph unicode="&#xe04a;" d="M 212.408,140.328c 115.472,0, 204.952,65.952, 203.576,163.816c0,86.592-91.608,155.816-207.080,155.816
688
  c-115.488,0-209.080-69.224-209.080-155.816c0-53.936, 26.456-111.44, 81.704-139.688c0-0.328-0.096-0.576-0.096-0.936
689
  c0-23.44-19.512-55.576-27.2-68.832l 0.032,0 c-0.608-1.44-0.976-3-0.976-4.672c0-6.56, 5.288-11.832, 11.848-11.832
690
  c 0.968,0, 2.544,0.2, 3.112,0.2c 0.16,0, 0.216,0, 0.2-0.048c 40.832,6.672, 101.128,52.624, 110.064,63.512
@@ -699,12 +699,12 @@
699
  c 7.744-9.392, 51.112-50.752, 86.408-56.504c-0.016,0.032, 0.032,0.032, 0.184,0.032c 0.472,0, 1.84-0.168, 2.672-0.168
700
  c 5.672,0, 10.248,4.56, 10.248,10.232c0,1.44-0.328,2.8-0.84,4.032l 0.032,0 c-6.64,11.44-17.064,44.872-17.064,65.128
701
  c0,0.312-0.096,0.528-0.096,0.816C 490.048,92.672, 512.168,128.296, 512.168,174.904z" />
702
- <glyph unicode="&#xe04b;" d="M 480.008,384.264L 352.208,384.264 L 352.208,415.264 c0,26.472-21.528,48-48,48L 207.992,463.264 c-26.472,0-48-21.528-48-48l0-31 L 32.008,384.264 c-17.592,0-32-14.408-32-32l0-112.128
703
  l-0.016,0 l0-32 l 0.016,0 l0-191.408 c0-17.592, 14.408-32, 32-32l 448,0 c 17.592,0, 32,14.408, 32,32L 512.008,352.264 C 512.008,369.856, 497.6,384.264, 480.008,384.264z
704
  M 191.992,415.264c0,8.832, 7.168,16, 16,16l 96.216,0 c 8.832,0, 16-7.168, 16-16l0-31 L 191.992,384.264 L 191.992,415.264 z M 32.008,352.264l 448,0 l0-112.128 L 303.824,240.136 l0,16.376
705
  c0,17.64-14.36,32-32,32l-31.872,0 c-17.64,0-32-14.36-32-32l0-16.376 L 32.008,240.136 L 32.008,352.264 z M 271.848,175.936l-31.904,0 L 239.944,256.512 l 31.872,0 L 271.848,175.936z
706
  M 32.008,16.736L 32.008,208.144 l 175.936,0 l0-32.2 c0-17.64, 14.36-32, 32-32l 31.872,0 c 17.64,0, 32,14.36, 32,32l0,32.2 l 176.184,0 l0-191.408 L 32.008,16.736 z" />
707
- <glyph unicode="&#xe04c;" d="M 476.040,479.224L 264.52,421.928c-5.376-1.44-17.048-1.424-22.408,0.080L 36.040,479.112
708
  C 17.648,484.176-0.168,470.912-0.168,451.976l0-389.056 c0-16.048, 12.168-31.392, 27.656-35.704l 206.080-57.112c 5.512-1.528, 12.608-2.376, 19.968-2.376
709
  c 5.048,0, 12.504,0.392, 19.36,2.264l 211.512,57.296c 15.528,4.2, 27.752,19.512, 27.752,35.624L 512.16,451.976 C 512.168,470.896, 494.352,484.208, 476.040,479.224
710
  z M 240,1.528L 35.536,58.056c-1.544,0.424-3.704,3.248-3.704,4.856L 31.832,446.928 l 201.736-55.768c 1.952-0.544, 4.144-0.968, 6.432-1.328L 240,1.528 z
@@ -721,31 +721,31 @@
721
  c 6.984,0, 13.408,4.608, 15.392,11.672C 210.784,221.016, 205.832,229.848, 197.312,232.256z M 197.312,136.256l-111.968,31.512
722
  c-8.456,2.36-17.344-2.576-19.736-11.080s 2.56-17.328, 11.080-19.736l 111.968-31.512c 1.44-0.408, 2.904-0.592, 4.344-0.592
723
  c 6.984,0, 13.408,4.608, 15.392,11.672C 210.784,125.024, 205.832,133.848, 197.312,136.256z" />
724
- <glyph unicode="&#xe04d;" d="M 507.832,338c-2.984,4.232-7.832,6.752-13,6.752L 444.96,344.752 L 342.392,432.168c-12.488,12.488-32.76,12.504-45.248,0L 196.32,344.752
725
  l-41.048,0 l-25.704,88.64c-10.080,34.904-34.032,38.672-43.856,38.672L 17.168,472.064 c-8.784,0-15.888-7.112-15.888-15.888s 7.112-15.888, 15.888-15.888l 68.528,0
726
  c 2.168,0, 8.784,0, 13.296-15.592l 88.424-324.968c 1.92-6.856, 8.168-11.592, 15.296-11.592l 215.984,0 c 6.704,0, 12.688,4.2, 14.952,10.512
727
  l 76.128,224.84C 511.528,328.36, 510.8,333.784, 507.832,338z M 319.768,409.536l 76.016-64.792L 243.728,344.744 L 319.768,409.536z M 407.512,119.904L 214.768,119.904
728
  l-50.576,193.064l 308.048,0 L 407.512,119.904z M 376,55.936c-22.096,0-40-17.904-40-40s 17.904-40, 40-40s 40,17.904, 40,40S 398.096,55.936, 376,55.936z
729
  M 232,55.936c-22.096,0-40-17.904-40-40s 17.904-40, 40-40s 40,17.904, 40,40S 254.096,55.936, 232,55.936z" />
730
- <glyph unicode="&#xe04e;" d="M 507.832,338c-2.984,4.232-7.832,6.752-13,6.752L 155.264,344.752 l-25.704,88.64
731
  c-10.080,34.904-34.032,38.672-43.856,38.672L 17.168,472.064 c-8.784,0-15.888-7.112-15.888-15.888s 7.112-15.888, 15.888-15.888l 68.528,0
732
  c 2.168,0, 8.784,0, 13.296-15.592l 88.424-324.968c 1.92-6.856, 8.168-11.592, 15.296-11.592l 215.984,0 c 6.704,0, 12.688,4.2, 14.952,10.512
733
  l 76.128,224.84C 511.528,328.36, 510.8,333.784, 507.832,338z M 407.512,119.904L 214.768,119.904 l-50.576,193.064l 308.048,0 L 407.512,119.904z M 376,55.936
734
  c-22.096,0-40-17.904-40-40s 17.904-40, 40-40s 40,17.904, 40,40S 398.096,55.936, 376,55.936z M 232,55.936c-22.096,0-40-17.904-40-40s 17.904-40, 40-40
735
  s 40,17.904, 40,40S 254.096,55.936, 232,55.936z" />
736
- <glyph unicode="&#xe04f;" d="M 432,400.648L 336.408,400.648 L 336.408,431.336 c0,26.472-21.528,48-48,48l-63.816,0 c-26.472,0-48-21.528-48-48l0-30.688 L 80,400.648 c-17.672,0-32-14.328-32-32l0-367.984
737
  c0-17.672, 14.328-32, 32-32l 352,0 c 17.672,0, 32,14.328, 32,32L 464,368.648 C 464,386.32, 449.672,400.648, 432,400.648z M 208.592,431.336c0,8.832, 7.168,16, 16,16l 63.816,0
738
  c 8.832,0, 16-7.168, 16-16l0-30.688 L 208.592,400.648 L 208.592,431.336 z M 432,0.664L 80,0.664 L 80,368.648 l 96.592,0 l0-32.92 c0,0-0.424-15.984, 15.904-15.984
739
  c 18,0, 16.096,15.984, 16.096,15.984l0,32.92 l 95.816,0 l0-32.92 c0,0-1.064-16.064, 15.936-16.064c 16,0, 16.064,16.064, 16.064,16.064l0,32.92 L 432,368.648 L 432,0.664 z
740
  " />
741
- <glyph unicode="&#xe050;" d="M 495.032,8.832c-0.168,0-0.36,0-0.544,0.016c-8.096,0.264-13.2,6.544-13.888,14.608c-0.544,5.936-16.984,149.544-241.128,149.392
742
  l0-91.832 c0-6.184-3.56-11.832-9.168-14.472c-5.544-2.656-12.216-1.84-16.984,2.112L 5.832,240.544c-3.72,3.048-5.856,7.592-5.84,12.392
743
  s 2.168,9.344, 5.888,12.376L 213.36,435.592c 4.784,3.904, 11.392,4.656, 16.968,2.048c 5.576-2.656, 9.144-8.28, 9.144-14.456l0-89.816
744
  c 92.984-2.952, 165.496-32.856, 212.168-87.488c 75.968-88.888, 59.016-218.080, 58.216-223.456C 508.672,14.592, 502.92,8.832, 495.032,8.832z
745
  M 223.472,205.096c 0.016,0, 0.032,0, 0.032,0c 160.112-0.096, 221.296-54.16, 256.232-101.904c-5.112,38.248-20.032,84.36-52.504,122.016
746
  c-43.168,50.048-112.72,76.424-203.768,76.424c-8.84,0-16,7.16-16,16l0,71.888 L 41.248,252.84l 166.216-137.952l0,74.2
747
  c0,4.248, 1.688,8.328, 4.704,11.328C 215.168,203.408, 219.232,205.096, 223.472,205.096z" />
748
- <glyph unicode="&#xe051;" d="M 16.968,8.832c 0.168,0, 0.36,0, 0.544,0.016c 8.096,0.264, 13.2,6.544, 13.888,14.608c 0.544,5.936, 16.488,149.544, 240.624,149.392
749
  l 0.504-91.832c0-6.184, 3.56-11.832, 9.168-14.472c 5.544-2.656, 12.216-1.84, 16.984,2.112l 207.488,171.888
750
  c 3.72,3.048, 5.856,7.592, 5.84,12.392s-2.168,9.344-5.888,12.376L 298.64,435.592c-4.784,3.904-11.392,4.656-16.968,2.048
751
  c-5.576-2.656-9.144-8.28-9.144-14.456l-0.504-89.816C 179.048,330.424, 107.040,300.512, 60.36,245.888
@@ -753,7 +753,7 @@
753
  C 128.392,205, 67.2,150.936, 32.264,103.184c 5.112,38.248, 20.032,84.36, 52.504,122.016c 43.168,50.048, 112.72,76.424, 203.768,76.424
754
  c 8.84,0, 16,7.16, 16,16l0,71.888 l 166.216-136.672L 304.528,114.888l0,74.2 c0,4.248-1.688,8.328-4.704,11.328
755
  C 296.832,203.408, 292.768,205.096, 288.528,205.096z" />
756
- <glyph unicode="&#xe052;" d="M 503.184,372.032c-5.392,2.488-11.792,1.544-16.28-2.424l-80.656-72.448l-72.816,74.704l 72.096,83.264
757
  c 3.92,4.528, 4.872,10.768, 2.432,16.256s-7.832,8.848-13.76,8.848l-4.344,0 c-44.56,0-121.488-3.832-155.832-38.672l-6.928-6.88
758
  c-36.64-37.384-43.144-98.688-23.84-145.288L 18.616,100.944c-24.896-25.24-24.896-66.16,0-91.408l 22.536-22.848
759
  C 53.6-25.928, 69.92-32.24, 86.24-32.24c 16.312,0, 32.632,6.312, 45.072,18.928l 187.36,188.864c 17.72-9.576, 42-15.832, 62.392-15.832
@@ -764,24 +764,24 @@
764
  c-7.712,31.192-3.216,74.304, 21.008,99.024l 6.896,6.96c 20.776,21.080, 74.728,27.312, 104.6,29.152l-58.68-67.768
765
  c-5.248-6.064-4.984-15.2, 0.608-20.936L 394.72,265.28c 5.624-5.792, 14.72-6.128, 20.776-0.76l 65.304,58.816
766
  C 478.856,291.656, 472.704,245.648, 452.832,225.496z" />
767
- <glyph unicode="&#xe053;" d="M 512.16,225.208c0-8.832-7.144-15.992-15.984-15.992L 271.736,209.216 L 271.736,47.12
768
  c0-43.576-35.456-79.040-79.048-79.040c-43.592,0-79.056,35.464-79.056,79.040c0,8.832, 7.16,15.992, 15.992,15.992s 15.992-7.16, 15.992-15.992
769
  c0-25.952, 21.112-47.064, 47.080-47.064c 25.96,0, 47.080,21.112, 47.080,47.064L 239.776,209.216 L 15.832,209.216 c-8.832,0-15.992,7.168-15.992,15.992
770
  c0,123.648, 90.456,202.056, 239.928,207.24L 239.768,463.936 c0,8.832, 7.16,15.984, 15.992,15.984c 8.84,0, 15.984-7.16, 15.984-15.984l0-31.488
771
  C 421.248,427.272, 512.16,348.856, 512.16,225.208z M 479.576,241.192C 471.688,341.456, 390.128,400.752, 255.752,400.752
772
  c-134.376,0-215.448-59.296-223.328-159.552L 479.576,241.2 z" />
773
- <glyph unicode="&#xe054;" d="M 448.4,400.488L 335.76,400.488 L 335.76,444.12 c0,20.264-16.504,36.248-36.768,36.248L 213,480.368 c-20.264,0-36.76-15.984-36.76-36.248l0-43.632 L 63.6,400.488
774
  c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 22.008,0 l 37.12-369.96c 1.552-17.312, 16.304-30.888, 33.568-30.888l 199.4,0 c 17.264,0, 32,13.576, 33.544,30.736
775
  l 37.152,370.12l 22.008,0 c 8.84,0, 16,7.168, 16,16S 457.24,400.488, 448.4,400.488z M 208.24,444.12c0,2.616, 2.136,4.752, 4.76,4.752l 85.992,0
776
  c 2.624,0, 4.768-2.136, 4.768-4.752l0-43.632 L 208.24,400.488 L 208.24,444.12 z M 357.384,1.4c-0.080-0.888-1.128-1.768-1.688-1.768L 156.296-0.368
777
  c-0.56,0-1.616,0.872-1.712,1.92l-36.816,366.928l 276.456,0 L 357.384,1.4z" />
778
- <glyph unicode="&#xe055;" d="M 511.992,271.864L 511.992,441.048 C 511.992,462.52, 494.52,480, 473.056,480L 307.464,479.976L 300.368,480
779
  c-10.84,0-27.248,0-37.96-10.72L 9.44,216.304C 3.36,210.224,0,202.152,0,193.56c0-8.608, 3.344-16.688, 9.424-22.768l 193.4-193.36
780
  C 208.88-28.656, 216.96-32, 225.552-32s 16.68,3.344, 22.744,9.424l 252.976,252.984C 512.12,241.232, 512.056,256.816, 511.992,271.864z
781
  M 478.648,253.032L 225.44,0.064L 32.064,193.672L 284.76,446.424C 287.304,448, 296.464,448, 300.256,448l 7.2-0.024L 473.056,448
782
  c 3.832,0, 6.936-3.12, 6.936-6.952l0-169.312 C 480.024,265.648, 480.056,255.464, 478.648,253.032z M 384.008,416c-35.344,0-64-28.656-64-64s 28.656-64, 64-64
783
  s 64,28.656, 64,64S 419.352,416, 384.008,416z M 384.008,320c-17.672,0-32,14.328-32,32s 14.328,32, 32,32s 32-14.328, 32-32S 401.68,320, 384.008,320z" />
784
- <glyph unicode="&#xe056;" d="M 256,480C 114.616,480,0,365.384,0,224s 114.616-256, 256-256s 256,114.616, 256,256S 397.384,480, 256,480z
785
  M 320,438.512c 72.112-21.496, 128.824-78.4, 150.352-150.512L 366.568,288 c-11.208,19.264-27.296,35.336-46.568,46.528L 320,438.512 z M 351.816,223.896
786
  c0-52.968-42.896-95.904-95.816-95.904s-95.816,42.936-95.816,95.904S 203.088,319.808, 256,319.808S 351.816,276.864, 351.816,223.896z
787
  M 224,445.536c 10.456,1.496, 21.128,2.312, 32,2.312c 10.864,0, 21.544-0.816, 32-2.312l0-97.904 c-10.24,2.648-20.928,4.2-32,4.2
@@ -792,7 +792,7 @@
792
  C 234.248,97.552, 244.928,96, 256,96s 21.76,1.552, 32,4.2L 288,2.312 z M 320,9.336L 320,113.304 c 19.328,11.224, 35.448,27.368, 46.656,46.696l 103.736,0
793
  C 448.896,87.832, 392.16,30.84, 320,9.336z M 379.752,192c 2.624,10.2, 4.080,20.88, 4.080,31.912c0,11.096-1.464,21.832-4.128,32.088l 97.704,0
794
  c 1.504-10.496, 2.44-21.168, 2.44-32.080c0-10.848-0.92-21.488-2.416-31.92L 379.752,192 z" />
795
- <glyph unicode="&#xe057;" d="M 342.952,288.408L 480.584,425.192l-0.448-77.536c-0.144-6.464, 4.984-12.088, 11.456-11.944
796
  l 8.208,0.008c 6.472,0.152, 11.824,4, 11.96,10.464l 0.336,115.504c0,0.112-0.44,0.2-0.44,0.312l 0.632,5.856
797
  c 0.064,3.248-0.696,6.144-2.792,8.216c-2.072,2.088-4.976,3.36-8.2,3.272l-5.848-0.136c-0.112,0-0.2-0.040-0.32-0.056
798
  L 380.384,479.656c-6.464-0.144-11.816-5.488-11.96-11.96l-0.016-8.208c 0.984-7.624, 6.976-12.080, 13.44-11.936l 75.624-0.2L 320.328,311.040
@@ -810,7 +810,7 @@
810
  C 7.472,479.432, 4.552,478.16, 2.496,476.072C 0.392,474-0.368,471.104-0.296,467.856L 0.336,462c0-0.112-0.44-0.192-0.44-0.312
811
  l 0.336-115.504c 0.144-6.464, 5.488-10.312, 11.96-10.464l 8.712-0.008c 6.464-0.144, 11.592,5.48, 11.448,11.944L 31.912,424.768l 137.632-136.36
812
  c 6.24-6.248, 16.376-6.248, 22.624,0c 6.248,6.248, 6.248,16.384,0,22.632L 55.024,447.336z" />
813
- <glyph unicode="&#xe058;" d="M 191.6,306.6L 191.264,422.104c-0.144,6.464-5.496,10.312-11.96,10.464l-8.208,0.008
814
  c-6.472,0.144-11.592-5.488-11.456-11.944l 0.448-77.624L 26.952,474.872c-6.248,6.248-16.376,6.248-22.624,0s-6.248-16.376,0-22.624
815
  l 132.56-131.304l-75.544-0.2c-6.464,0.144-12.456-4.32-13.44-11.936l 0.016-8.208c 0.16-6.472, 5.504-11.824, 11.96-11.968l 114.752,0.504
816
  c 0.128-0.008, 0.208-0.056, 0.32-0.056l 5.848-0.136c 3.224-0.088, 6.136,1.176, 8.2,3.272c 2.104,2.072, 2.856,4.976, 2.792,8.216
@@ -828,7 +828,7 @@
828
  c-3.224,0.088-6.144-2.176-8.2-4.272c-2.104-2.072-2.856-4.968-2.792-8.216l 0.632-5.848c0-0.12-0.44-0.192-0.44-0.304
829
  l 0.336-115.504c 0.144-6.464, 5.488-10.304, 11.96-10.464l 8.712-0.016c 6.472-0.144, 11.592,5.488, 11.448,11.952l-0.44,77.264l 133.632-131.512
830
  c 6.248-6.248, 16.376-6.248, 22.624,0s 6.248,16.376,0,22.624L 375.032,127.552z" />
831
- <glyph unicode="&#xe059;" d="M 201.152,227.072l 19.632,27.624l-67.152,91.64L 1.368,346.336 l0-32 l 135.744,0 L 201.152,227.072z
832
  M 459.392,314.336l-38.768-34.768c-4.672-4.472-6.184-11.72-1.512-16.184l 2.736-4.032c 4.688-4.472, 12.248-4.472, 16.912,0l 63.872,57.752
833
  c 0.088,0.080, 0.192,0.096, 0.272,0.168l 4.232,4.048c 2.336,2.248, 3.504,5.184, 3.488,8.144c 0.016,2.936-1.152,5.888-3.488,8.112
834
  l-4.232,4.048c-0.080,0.080-0.168,0.112-0.272,0.184l-64.864,59.216c-4.68,4.472-12.232,4.472-16.92,0l-2.736-4.032
@@ -838,19 +838,19 @@
838
  l-38.608-34.624c-4.672-4.472-6.184-11.72-1.512-16.184l 2.736-4.032c 4.688-4.472, 12.248-4.472, 16.912,0l 63.872,57.752
839
  c 0.088,0.080, 0.192,0.096, 0.272,0.168l 4.232,4.048c 2.336,2.248, 3.504,5.184, 3.488,8.144c 0.016,2.936-1.152,5.888-3.488,8.112
840
  L 502.904,53.616z" />
841
- <glyph unicode="&#xe05a;" d="M 450.92,5.312l-416,0 l0,320 l 128.8,0 l 32.36,31.168l-0.832,0.832L 34.92,357.312
842
  c-17.672,0-32-14.328-32-32l0-320 c0-17.672, 14.328-32, 32-32l 416,0 c 17.672,0, 32,14.328, 32,32L 482.92,255.648 l-32-30.544L 450.92,5.312 z M 135.064,133.312l 32.24,0
843
  c 22.432,127.248, 133.272,224, 266.944,224c 5.608,0, 10.928-0.048, 16.312-0.088l-58.624-58.616c-6.232-6.248-6.232-16.376,0-22.624
844
  c 3.128-3.128, 7.232-4.688, 11.328-4.688s 8.168,1.56, 11.296,4.688l 94.512,97L 414.56,470c-6.232,6.248-16.36,6.248-22.624,0
845
  c-6.232-6.248-6.232-16.376,0-22.624l 58.088-58.080c-5.016,0.008-9.984,0.024-15.104,0.024C 283.392,389.32, 158.136,278.344, 135.064,133.312z" />
846
- <glyph unicode="&#xe05b;" d="M 432,128c-26.344,0-49.648-12.792-64.216-32.44l-210.68,107.36
847
  C 158.936,209.648, 160,216.688, 160,224c0,9.152-1.608,17.904-4.44,26.088L 367.44,352.896C 381.984,332.992, 405.448,320, 432,320
848
  c 44.184,0, 80,35.824, 80,80c0,44.184-35.816,80-80,80S 352,444.184, 352,400c0-6.216, 0.784-12.232, 2.12-18.040L 139.2,277.672
849
  C 124.56,293.808, 103.504,304, 80,304C 35.816,304,0,268.184,0,224c0-44.176, 35.816-80, 80-80c 25.448,0, 48.064,11.912, 62.712,30.432l 211.552-107.816
850
  C 352.832,60.632, 352,54.424, 352,48c0-44.184, 35.816-80, 80-80s 80,35.816, 80,80S 476.184,128, 432,128z M 432,448c 26.504,0, 48-21.496, 48-48s-21.496-48-48-48
851
  s-48,21.496-48,48S 405.496,448, 432,448z M 80,176c-26.512,0-48,21.496-48,48s 21.488,48, 48,48c 26.504,0, 48-21.496, 48-48S 106.504,176, 80,176z M 432,0
852
  c-26.504,0-48,21.496-48,48s 21.496,48, 48,48s 48-21.496, 48-48S 458.504,0, 432,0z" />
853
- <glyph unicode="&#xe05c;" d="M 104.84,38.368c-10.056-20.904-16.4-34.832-72.344-36.864c 1.608,53.984, 11.896,59.776, 32.496,70.040
854
  c 8.648,4.312, 19.416,9.672, 31.056,18.624L 76.568,115.040c-9.2-7.064-17.664-10.784-25.848-14.856c-34.32-17.112-50.496-33.968-50.496-114.328
855
  l 0.272-16.352l 15.728,0.352c 84.816,0, 100.664,19.16, 116.552,52.16c 3.48,7.232, 5.416,12.12, 11.28,21.864l-23.728,21.552
856
  C 113.216,55.728, 108.776,46.496, 104.84,38.368z M 352.48,385.672c-35.384,0-64.176-28.792-64.176-64.168c0-35.392, 28.8-64.176, 64.176-64.176
@@ -867,7 +867,7 @@
867
  c-0.616,2.608-1.888,5.032-3.696,7.032c-29.424,32.608-73.872,81.904-77.28,85.816c-2.224,2.704-5.304,4.624-8.784,5.424l-73.296,16.768
868
  l 35.952,38l 91.016,0 c 5.56,0, 10.728,2.888, 13.632,7.624c 7.040,11.464, 15.208,27.768, 24.672,46.648c 16.024,31.976, 35.96,74.272, 53.56,94.816
869
  c 20.792,24.264, 41.912,39.504, 68.448,49.424c 59.048,22.064, 119.984,24.384, 147.84,24.176C 480.952,419.384, 479.84,350.976, 461,300.264z" />
870
- <glyph unicode="&#xe05d;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256.008,114.608, 256.008,256C 512.008,365.384, 397.392,480, 256,480z
871
  M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224.008-100.488, 224.008-224S 379.512-0.504, 256-0.504z M 232.472,79.76l 40.256,0
872
  l0,40.624 l-40.256,0 L 232.472,79.76 z M 255.528,368.232c-23.44,0-42.752-6.32-57.92-18.944c-15.168-12.632-22.544-37.928-22.168-58.888l 0.592-1.168l 36.72,0
873
  c0,12.504, 4.168,30.472, 12.504,36.92c 8.328,6.44, 18.424,9.664, 30.28,9.664c 13.664,0, 24.168-3.712, 31.536-11.136
@@ -875,11 +875,11 @@
875
  c-13.288-11.984-21.496-21.616-24.616-28.904c-3.128-7.296-4.752-20.384-4.872-39.256l 38.48,0 c0,11.84, 0.752,20.568, 2.248,26.168
876
  c 1.488,5.592, 5.752,11.912, 12.784,18.944c 15.112,14.576, 27.248,28.832, 36.44,42.776c 9.168,13.928, 13.76,29.296, 13.76,46.096
877
  c0,23.44-7.088,41.704-21.288,54.784C 301.104,361.696, 281.176,368.232, 255.528,368.232z" />
878
- <glyph unicode="&#xe05e;" d="M 287.8,433.296c-8.832,0-16-7.168-16-16s 7.168-16, 16-16C 401.024,401.296, 480,318.56, 480,205.344C 480,92.112, 387.888,0, 274.664,0
879
  C 161.448,0, 78.704,81.8, 78.704,195.032c0,8.832-7.168,16-16,16s-16-7.168-16-16C 46.704,64.16, 143.8-32, 274.664-32S 512,74.472, 512,205.344
880
  C 512,336.2, 418.664,433.296, 287.8,433.296z M 240.128,255.872L 240.128,464 c0,8.832-7.168,16-16,16C 99.504,480,0,380.496,0,255.872c0-8.832, 7.168-16, 16-16
881
  l 208.128,0 C 232.96,239.872, 240.128,247.040, 240.128,255.872z M 208.128,271.872L 32.656,271.872 C 40.384,366.12, 113.88,439.616, 208.128,447.344L 208.128,271.872 z" />
882
- <glyph unicode="&#xe05f;" d="M 482.128,455.168c-17.432,16.704-36.664,25.168-57.192,25.168c-32.096,0-55.512-20.736-61.92-27.088
883
  C 354,444.32, 46.44,136.648, 46.44,136.648c-2.008-2.016-3.472-4.536-4.224-7.296c-6.936-25.632-41.68-139.36-42.024-140.504
884
  c-1.784-5.824-0.192-12.168, 4.104-16.464c 3.088-3.072, 7.2-4.72, 11.416-4.72c 1.656,0, 3.328,0.248, 4.96,0.784
885
  c 1.176,0.384, 118.568,38.328, 137.888,44.096c 2.544,0.768, 4.872,2.144, 6.768,4.016c 12.208,12.064, 299.064,295.728, 318.104,315.392
@@ -891,7 +891,7 @@
891
  c-5.056,13.024-13.928,29.76-29.288,45.248c-15.696,15.824-31.616,25.16-44.376,30.68c 1.088,1.080, 1.928,1.928, 2.256,2.248
892
  c 1.832,1.808, 18.448,17.688, 39.16,17.688c 11.92,0, 23.624-5.44, 34.808-16.16c 13.256-12.712, 20.088-25.256, 20.312-37.296
893
  C 480.264,381.856, 473.592,368.624, 460.208,354.816z" />
894
- <glyph unicode="&#xe060;" d="M 399.672-0.144l-368,0 l0,400 l 224.8,0 l 32.352,31.168l-0.832,0.832L 31.672,431.856 c-17.672,0-32-14.328-32-32l0-400 c0-17.672, 14.328-32, 32-32l 368,0
895
  c 17.672,0, 32,14.328, 32,32L 431.672,234.184 l-32-30.544L 399.672-0.144 z M 487.112,459.28c-14.44,13.84-30.376,20.856-47.376,20.856
896
  c-26.608,0-46.016-17.184-51.296-22.448c-7.488-7.392-219.584-219.176-219.584-219.176c-1.664-1.696-2.88-3.768-3.504-6.072
897
  c-5.744-21.224-34.536-115.496-34.824-116.432c-1.488-4.832-0.16-10.096, 3.4-13.608c 2.552-2.56, 5.96-3.92, 9.456-3.92
@@ -900,7 +900,7 @@
900
  M 465.216,379.44c-8.904-9.184-78.624-78.080-207.224-204.768l-9.84-9.704c-14.744-4.56-50.048-15.904-76.736-24.512
901
  c 8.592,28.376, 18.904,62.656, 23.504,78.872C 222.4,246.768, 404.112,428.2, 411.016,435.016c 1.344,1.344, 13.608,13.128, 28.72,13.128
902
  c 8.576,0, 16.84-3.912, 25.232-11.96c 10.032-9.624, 15.2-18.872, 15.344-27.512C 480.472,399.776, 475.392,389.944, 465.216,379.44z" />
903
- <glyph unicode="&#xe061;" d="M 495.864,127.296c 0.008,0.28, 0.080,0.536, 0.080,0.816L 495.944,461.624
904
  c 0.192,1.752, 0.128,3.56-0.288,5.376c-1.368,7.456-7.864,13.112-15.712,13.112c-2.944,0-5.672-0.848-8.040-2.24L 172.968,400.048
905
  c-5.384-1.336-9.376-5.36-11.016-10.336c-1.24-2.272-2-4.832-2-7.6L 159.952,95.84 c-15.232,10.192-34.704,16.328-55.936,16.328
906
  c-48.768,0-88.32-32.304-88.32-72.136c0-39.84, 39.552-72.152, 88.32-72.152c 48.784,0, 88.304,32.304, 88.304,72.152
@@ -910,42 +910,42 @@
910
  c 29.616,0, 51.2-16.696, 55.592-33.704l0-0.184 c0-1.616, 0.312-3.144, 0.76-4.608c 0.032-0.496, 0.112-0.984, 0.112-1.48
911
  C 160.816,21.12, 137.616,0.024, 104.352,0.024z M 407.848,80.024c-32.984,0-55.976,21.088-55.976,40S 374.864,160, 407.848,160
912
  c 32.976,0, 55.968-21.064, 55.968-39.976S 440.832,80.024, 407.848,80.024z" />
913
- <glyph unicode="&#xe062;" d="M 426.304,318.352L 269.848,474.808c-4.96,4.96-12.336,5.92-18.304,3.008
914
  c-6.272-2.168-10.8-8.056-10.8-15.064l0-354.2 c-16.96,12.56-39.216,20.264-63.688,20.264c-53.032,0-96.056-35.888-96.056-80.144
915
  c0-44.272, 43.024-80.168, 96.056-80.168c 53.056,0, 96.040,35.888, 96.040,80.168c0,1.96-0.184,3.88-0.352,5.816L 272.744,426.656 L 403.68,295.728
916
  c 6.24-6.248, 16.376-6.248, 22.624,0S 432.552,312.112, 426.304,318.352z M 176.688,0.712c-37.824,0-64.176,25.272-64.176,47.936
917
  s 26.36,47.912, 64.176,47.912c 37.016,0, 63-24.2, 64.064-46.496l0-2.84 C 239.68,24.936, 213.704,0.712, 176.688,0.712z" />
918
- <glyph unicode="&#xe063;" d="M 255.44,128l 3.8,0 C 303.72,128, 336,160.8, 336,205.984L 336,396.688 C 336,443.408, 302.28,480, 259.232,480
919
  L 255.44,480 C 211.632,480, 176,442.624, 176,396.688l0-190.704 C 176,161.528, 210.152,128, 255.44,128z M 208,396.688C 208,424.984, 229.28,448, 255.44,448l 3.8,0
920
  C 284.752,448, 304,425.936, 304,396.688l0-190.704 C 304,178.488, 286.016,160, 259.232,160L 255.44,160 C 227.504,160, 208,178.904, 208,205.984L 208,396.688 z M 400,304
921
  c-8.84,0-16-7.168-16-16l0-66.536 C 384,126.264, 350.016,80, 280.128,80L 232.56,80 C 141.16,80, 128,156.92, 128,221.464L 128,288 c0,8.832-7.168,16-16,16
922
  s-16-7.168-16-16l0-66.536 C 96,111.216, 141.944,48, 232.56,48L 240,48 l0-48 L 160,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 192,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16
923
  L 272,0 l0,48 l 8.128,0 C 342.112,48, 416,78.096, 416,221.464L 416,288 C 416,296.832, 408.84,304, 400,304z" />
924
- <glyph unicode="&#xe064;" d="M 480,429.080L 32,429.080 c-17.672,0-32-14.328-32-32l0-288 c0-17.68, 14.328-32, 32-32l 80,0
925
  c 10.248,0, 16,13.16, 16,15.992l0,0.008 c0,2.912-5.44,16.208-16,16.208L 51.52,109.288 c-10.688,0-19.36,8.672-19.36,19.36L 32.16,377
926
  c0,10.696, 8.664,19.36, 19.36,19.36l 409.136,0.504c 10.688,0, 19.36-8.664, 19.36-19.36l0-248.848 c0-10.688-8.672-19.36-19.36-19.36L 259.072,109.296
927
  l 37.992,34.456c 4.672,4.472, 6.184,11.704, 1.512,16.168l-2.736,4.032c-4.688,4.472-12.248,4.472-16.92,0l-64.864-59.216
928
  c-0.096-0.080-0.184-0.112-0.264-0.184l-4.24-4.048c-2.336-2.216-3.504-5.168-3.488-8.112c-0.016-2.952, 1.144-5.888, 3.488-8.144
929
  l 4.24-4.048c 0.080-0.080, 0.184-0.096, 0.264-0.168l 63.864-57.752c 4.672-4.472, 12.232-4.472, 16.92,0l 2.736,4.032
930
  c 4.672,4.472, 3.16,11.72-1.512,16.184l-38.568,34.584L 480,77.080 c 17.672,0, 32,14.32, 32,32l0,288 C 512,414.752, 497.672,429.080, 480,429.080z" />
931
- <glyph unicode="&#xe065;" d="M 58.416,208.168l 277.224,0 c 8.848,0, 16,7.168, 16,16s-7.152,16-16,16L 59.416,240.168 l 57.88,57.88
932
  c 6.248,6.248, 6.248,16.376,0,22.624s-16.376,6.248-22.624,0L 0.168,223.672l 94.504-97c 3.128-3.128, 7.216-4.688, 11.312-4.688
933
  s 8.184,1.56, 11.312,4.688c 6.248,6.248, 6.248,16.376,0,22.624L 58.416,208.168z M 479.832,480L 207.832,480 c-17.68,0-32-14.328-32-32l0-144 l 32.208,0 L 208.040,428.488
934
  c0,10.688, 8.672,19.36, 19.36,19.36L 459.76,447.848 c 10.696,0, 19.36-8.672, 19.36-19.36l 0.504-409.144c0-10.688-8.664-19.36-19.36-19.36L 227.408-0.016
935
  c-10.688,0-19.36,8.672-19.36,19.36L 208.048,144.528 l-32.208-0.040L 175.84,0 c0-17.672, 14.32-32, 32-32l 271.992,0 c 17.68,0, 32.008,14.328, 32.008,32L 511.84,448
936
  C 511.832,465.672, 497.504,480, 479.832,480z" />
937
- <glyph unicode="&#xe066;" d="M 266.264,149.296c-6.256-6.248-6.256-16.376,0-22.624
938
  c 3.128-3.128, 7.216-4.688, 11.312-4.688s 8.184,1.56, 11.312,4.688l 94.504,97L 288.888,320.68c-6.248,6.248-16.376,6.248-22.624,0
939
  c-6.256-6.248-6.256-16.376,0-22.624l 57.872-57.88L 15.92,240.176 c-8.84,0-16-7.168-16-16s 7.16-16, 16-16l 309.224,0 L 266.264,149.296z M 480.080,480l-288,0
940
  c-17.68,0-32.008-14.328-32.008-32l0-144 l 32.216,0 L 192.288,428.488 c0,10.688, 8.672,19.36, 19.36,19.36L 460,447.848 c 10.704,0, 19.36-8.672, 19.36-19.36l 0.504-409.144
941
  c0-10.688-8.656-19.36-19.36-19.36L 211.656-0.016 c-10.688,0-19.36,8.672-19.36,19.36L 192.296,144.528 l-32.216-0.040L 160.080,0 c0-17.672, 14.328-32, 32.008-32l 288,0
942
  c 17.672,0, 32,14.328, 32,32L 512.088,448 C 512.080,465.672, 497.752,480, 480.080,480z" />
943
- <glyph unicode="&#xe067;" d="M 48,256L 16,256 c-8.832,0-16-7.168-16-16l0-32 c0-8.832, 7.168-16, 16-16l 32,0 c 8.832,0, 16,7.168, 16,16l0,32
944
  C 64,248.832, 56.832,256, 48,256z M 496,240L 160,240 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 336,0 c 8.832,0, 16,7.168, 16,16S 504.832,240, 496,240z M 48,128L 16,128
945
  c-8.832,0-16-7.168-16-16l0-32 c0-8.832, 7.168-16, 16-16l 32,0 c 8.832,0, 16,7.168, 16,16l0,32 C 64,120.832, 56.832,128, 48,128z M 496,112L 160,112 c-8.832,0-16-7.168-16-16
946
  s 7.168-16, 16-16l 336,0 c 8.832,0, 16,7.168, 16,16S 504.832,112, 496,112z M 48,384L 16,384 c-8.832,0-16-7.168-16-16l0-32 c0-8.832, 7.168-16, 16-16l 32,0 c 8.832,0, 16,7.168, 16,16
947
  l0,32 C 64,376.832, 56.832,384, 48,384z M 160,336l 336,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 160,368 c-8.832,0-16-7.168-16-16S 151.168,336, 160,336z" />
948
- <glyph unicode="&#xe068;" d="M 304.272-31.872c-145.416,0-146.536,6.032-164.544,19.592c-9.552,7.184-27.576,12.16-93.408,16.448
949
  c-4.776,0.312-9.32,2.144-12.368,5.84c-1.4,1.704-34.296,49.68-34.296,126.52c0,75.72, 23.544,110.232, 24.552,111.832
950
  c 2.92,4.68, 8.048,7.52, 13.56,7.52c 54.056,0, 128.992,69, 179.368,189.448c 8.712,20.832, 10.512,34.536, 42.512,34.536
951
  c 18.2,0, 38.6-13.032, 48.672-29.752c 20.664-34.16, 10.168-107.528, 0.464-146.736c 33,0.264, 92.736,0.712, 121.16,0.712
@@ -960,24 +960,24 @@
960
  c-3,4.472-3.224,10.024-1.464,15.112c 15.632,45.016, 24.36,115.64, 9.864,139.768c-4.272,7.112-5.248,14.216-21.248,14.216
961
  c-2.216,0-7.496-1.752-13-14.872C 193.168,305.088, 113.312,231.096, 47.904,224.424c-5.64-12.864-16.248-39.52-16.248-87.888
962
  C 31.656,87.168, 47.296,48.976, 54.808,36.616z" />
963
- <glyph unicode="&#xe069;" d="M 508.352,223.32L 268.168,474.904c-3.016,3.152-7.184,4.92-11.544,4.92c-4.352,0-8.52-1.776-11.544-4.92L 3.656,223.328
964
  c-6.12-6.376-5.904-16.496, 0.472-22.624c 6.376-6.112, 16.496-5.936, 22.624,0.472l 21.504,22.416l0-239.416 c0-8.84, 7.168-16, 16-16l 111.776,0
965
  c 8.816,0, 15.968,7.128, 16,15.952l 0.504,159.832l 127.496,0 l0-159.784 c0-8.84, 7.16-16, 16-16l 111.736,0 c 8.84,0, 16,7.16, 16,16L 463.768,223.672 l 21.496-22.52
966
  c 3.144-3.264, 7.344-4.92, 11.544-4.92c 3.984,0, 7.984,1.472, 11.080,4.472C 514.256,206.816, 514.464,216.944, 508.352,223.32z
967
  M 431.768,252.592l0-252.416 l-79.736,0 L 352.032,159.952 c0,8.84-7.16,16-16,16l-159.44,0 c-8.816,0-15.968-7.128-16-15.952l-0.504-159.832l-79.832,0 L 80.256,252.592
968
  c0,1.32-0.208,2.584-0.504,3.816l 176.88,184.312l 175.712-184.104C 432,255.32, 431.768,253.984, 431.768,252.592z" />
969
- <glyph unicode="&#xe06a;" d="M 480-32L 320-32 c-17.672,0-32,14.328-32,32L 288,160 c0,17.672, 14.328,32, 32,32l 160,0 c 17.672,0, 32-14.328, 32-32l0-160
970
  C 512-17.672, 497.672-32, 480-32z M 480,160L 320,160 l0-160 l 160,0 L 480,160 z M 480,256L 320,256 c-17.672,0-32,14.328-32,32L 288,448 c0,17.672, 14.328,32, 32,32l 160,0 c 17.672,0, 32-14.328, 32-32l0-160
971
  C 512,270.328, 497.672,256, 480,256z M 480,448L 320,448 l0-160 l 160,0 L 480,448 z M 192-32L 32-32 c-17.672,0-32,14.328-32,32L0,160 c0,17.672, 14.328,32, 32,32l 160,0 c 17.672,0, 32-14.328, 32-32l0-160
972
  C 224-17.672, 209.672-32, 192-32z M 192,160L 32,160 l0-160 l 160,0 L 192,160 z M 192,256L 32,256 c-17.672,0-32,14.328-32,32L0,448 c0,17.672, 14.328,32, 32,32l 160,0 c 17.672,0, 32-14.328, 32-32l0-160
973
  C 224,270.328, 209.672,256, 192,256z M 192,448L 32,448 l0-160 l 160,0 L 192,448 z" />
974
- <glyph unicode="&#xe06b;" d="M 472,368c-22.096,0-40-17.912-40-40c0-4.536, 0.92-8.816, 2.304-12.88L 336.8,231.16C 329.96,236.608, 321.424,240, 312,240
975
  c-10.872,0-20.704-4.368-27.904-11.408l-76.376,38.24C 206.232,287.576, 189.12,304, 168,304c-22.088,0-40-17.912-40-40c0-6.048, 1.44-11.72, 3.84-16.856
976
  L 53.968,157.352C 49.6,158.984, 44.936,160, 40,160c-22.088,0-40-17.912-40-40s 17.912-40, 40-40s 40,17.912, 40,40c0,5.32-1.088,10.384-2.976,15.024
977
  l 79.136,90.96C 159.928,224.816, 163.848,224, 168,224c 11.64,0, 22.024,5.056, 29.336,13l 74.704-37.456C 272.304,177.672, 290.064,160, 312,160
978
  c 22.096,0, 40,17.912, 40,40c0,0.712-0.168,1.376-0.208,2.080L 455.84,291.464C 460.792,289.272, 466.232,288, 472,288c 22.096,0, 40,17.904, 40,40
979
  C 512,350.088, 494.096,368, 472,368z" />
980
- <glyph unicode="&#xe06c;" d="M 80.024,286.064L 80.024,464 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-177.92
981
  C 20.36,278.952-0.176,253.856-0.176,224c0-29.864, 20.536-54.952, 48.2-62.088L 48.024-16 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 80.024,161.928
982
  c 27.64,7.152, 48.152,32.224, 48.152,62.072C 128.176,253.84, 107.664,278.92, 80.024,286.064z M 64.208,191.984C 64.152,191.984, 64.088,192, 64.024,192
983
  c-0.072,0-0.136-0.016-0.208-0.024C 46.24,192.080, 31.968,206.4, 31.968,224c0,17.592, 14.28,31.92, 31.856,32.016
@@ -993,7 +993,7 @@
993
  c-0.064,0-0.12,0.016-0.176,0.016c-0.072,0-0.144-0.016-0.208-0.016C 430.248,288.080, 415.968,302.4, 415.968,320
994
  c0,17.592, 14.28,31.92, 31.848,32.016c 0.072,0, 0.144-0.016, 0.208-0.016c 0.064,0, 0.12,0.016, 0.176,0.016
995
  c 17.568-0.12, 31.832-14.432, 31.832-32.016C 480.048,302.408, 465.784,288.096, 448.208,287.984z" />
996
- <glyph unicode="&#xe06d;" d="M 207.72,479.88c 145.416,0, 146.544-6.032, 164.552-19.592c 9.552-7.184, 27.576-12.168, 93.416-16.456
997
  c 4.784-0.312, 9.32-2.144, 12.368-5.84c 1.4-1.704, 34.296-49.68, 34.296-126.512c0-75.72-23.544-110.24-24.552-111.848
998
  c-2.92-4.672-8.048-7.512-13.56-7.512c-54.056,0-128.992-69-179.376-189.456c-8.712-20.832-10.504-34.528-42.512-34.528
999
  c-18.2,0-38.6,13.032-48.688,29.752c-20.656,34.16-10.168,107.528-0.456,146.736c-33-0.264-92.736-0.72-121.16-0.72
@@ -1008,39 +1008,39 @@
1008
  s 3.232-10.032, 1.464-15.112c-15.624-45.016-24.352-115.64-9.856-139.768c 4.264-7.112, 5.248-14.216, 21.248-14.216
1009
  c 2.216,0, 7.496,1.752, 13,14.872c 53.496,127.904, 133.352,201.904, 198.76,208.576c 5.64,12.864, 16.248,39.52, 16.248,87.896
1010
  C 480.352,360.832, 464.712,399.016, 457.192,411.376z" />
1011
- <glyph unicode="&#xe06e;" d="M 460.544,428.384L 292.416,35.488l-59.656,172.256L 60.664,259.76L 460.544,428.384 M 502.232,479.616c-3.048,0-6.76-0.864-11.048-2.68
1012
  L 13.856,274.4c-17.192-7.296-18.28-21.352-2.424-31.232l 197.648-61.792l 64.68-201.632c 4.64-7.592, 10.248-11.36, 15.632-11.36
1013
  c 5.968,0, 11.648,4.576, 15.52,13.624L 509.048,458.872C 514.576,471.816, 511.432,479.616, 502.232,479.616L 502.232,479.616z" />
1014
- <glyph unicode="&#xe06f;" d="M 487.472,447.304c0,11.616-6.296,22.328-16.456,27.968
1015
  c-4.84,2.696-10.184,4.032-15.544,4.032c-5.856,0-11.736-1.616-16.888-4.824L 70.72,251.184c-7.976-4.952-13.256-13.104-14.688-22.2L 56.032,464
1016
  c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-480 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 56.032,219.032 c 1.44-9.104, 6.72-17.256, 14.688-22.192L 439.080-26.48
1017
  c 5.16-3.216, 11.032-4.832, 16.888-4.832c 5.36,0, 10.704,1.344, 15.544,4.032c 10.16,5.64, 16.456,16.344, 16.456,27.968L 487.472,447.304z
1018
  M 87.6,224.008L 455.472,447.304l 0.504-446.608L 87.6,224.008z" />
1019
- <glyph unicode="&#xe070;" d="M 286.96,381.048L 34.32,224l 252.64-157.048L 286.96,190.44 l 192-123.488L 478.96,381.048 l-192-123.496L 286.96,385.472 M 285.632,413.048
1020
  c 5.352,0, 11.368-1.336, 16.208-4.032c 10.16-5.64, 17.12-16.352, 17.12-27.968l0-65.92 L 468.072,408.224c 5.16,3.2, 10.688,4.824, 16.56,4.824
1021
  c 5.344,0, 7.864-1.336, 12.712-4.032c 10.16-5.64, 13.616-16.352, 13.616-27.968l0-314.096 c0-11.624-3.624-22.328-13.784-27.968
1022
  c-4.84-2.688-8.864-4.032-14.216-4.032c-5.864,0-10.392,1.608-15.552,4.832L 318.96,132.872l0-65.92 c0-11.624-6.96-22.328-17.12-27.968
1023
  c-4.84-2.688-10.52-4.032-15.88-4.032c-5.856,0-11.896,1.608-17.056,4.832L 16.176,196.832C 6.792,202.656, 1.040,212.936, 1.040,224
1024
  s 5.688,21.336, 15.080,27.176L 268.752,408.224C 273.904,411.432, 279.768,413.048, 285.632,413.048L 285.632,413.048z" />
1025
- <glyph unicode="&#xe071;" d="M 72.312,447.304l 367.872-223.296L 71.816,0.696L 72.312,447.304 M 72.312,479.304c-5.36,0-10.704-1.336-15.544-4.032
1026
  c-10.16-5.64-16.456-16.352-16.456-27.968L 39.816,0.696c0-11.624, 6.296-22.328, 16.456-27.968c 4.84-2.688, 10.184-4.032, 15.544-4.032
1027
  c 5.856,0, 11.736,1.608, 16.888,4.832l 368.36,223.312c 9.408,5.832, 15.128,16.112, 15.128,27.168s-5.72,21.336-15.128,27.176L 89.2,474.488
1028
  C 84.048,477.688, 78.168,479.304, 72.312,479.304L 72.312,479.304z" />
1029
- <glyph unicode="&#xe072;" d="M 208.136,480L 96.032,480 c-8.832,0-16-7.16-16-16l0-480 c0-8.832, 7.168-16, 16-16l 112.104,0 c 8.84,0, 16,7.168, 16,16L 224.136,464
1030
  C 224.136,472.84, 216.976,480, 208.136,480z M 192.136,0L 112.032,0 L 112.032,448 l 80.104,0 L 192.136,0 z M 415.968,480L 304.44,480 c-8.84,0-16-7.16-16-16l0-480 c0-8.832, 7.16-16, 16-16
1031
  l 111.528,0 c 8.84,0, 16,7.168, 16,16L 431.968,464 C 431.968,472.84, 424.816,480, 415.968,480z M 399.968,0l-79.528,0 L 320.44,448 l 79.528,0 L 399.968,0 z" />
1032
- <glyph unicode="&#xe073;" d="M 225.040,381.048L 477.68,224L 225.040,66.952L 225.040,190.44 l-192-123.488L 33.040,381.048 l 192-123.496L 225.040,385.472 M 226.368,413.048
1033
  c-5.36,0-11.368-1.336-16.216-4.032C 200,403.376, 193.040,392.664, 193.040,381.048l0-65.92 L 43.928,408.224c-5.16,3.2-10.688,4.824-16.56,4.824
1034
  c-5.344,0-7.864-1.336-12.72-4.032C 4.504,403.376, 1.040,392.664, 1.040,381.048l0-314.096 c0-11.624, 3.624-22.328, 13.784-27.968
1035
  c 4.84-2.688, 8.864-4.032, 14.216-4.032c 5.864,0, 10.392,1.608, 15.552,4.832L 193.040,132.872l0-65.92 c0-11.624, 6.96-22.328, 17.112-27.968
1036
  c 4.848-2.688, 10.528-4.032, 15.888-4.032c 5.856,0, 11.896,1.608, 17.056,4.832l 252.728,157.048c 9.392,5.832, 15.144,16.112, 15.144,27.168
1037
  s-5.688,21.336-15.080,27.176L 243.248,408.224C 238.096,411.432, 232.224,413.048, 226.368,413.048L 226.368,413.048z" />
1038
- <glyph unicode="&#xe074;" d="M 471.968,480c-8.832,0-16-7.168-16-16l0-235 c-1.44,9.096-6.72,17.232-14.688,22.184
1039
  L 73.424,474.488c-5.16,3.2-11.032,4.824-16.888,4.824c-5.36,0-10.704-1.336-15.544-4.032c-10.16-5.64-16.456-16.352-16.456-27.968
1040
  L 24.032,0.696c0-11.624, 6.296-22.328, 16.456-27.968c 4.84-2.688, 10.184-4.032, 15.544-4.032c 5.856,0, 11.736,1.608, 16.888,4.832
1041
  L 441.28,196.832c 7.968,4.936, 13.248,13.080, 14.688,22.176L 455.968-16 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 487.968,464 C 487.968,472.832, 480.808,480, 471.968,480z
1042
  M 56.032,0.696L 56.528,447.304l 367.872-223.296L 56.032,0.696z" />
1043
- <glyph unicode="&#xe075;" d="M 480,432.056L 351.888,432.056 L 351.888,463.944 c0,8.84-7.16,16-16,16s-16-7.16-16-16l0-31.88 l-128,0 L 191.888,463.944
1044
  c0,8.84-7.16,16-16,16c-8.84,0-16-7.16-16-16l0-31.88 L 32,432.064 c-17.672,0-32-14.328-32-32l0-400 c0-17.672, 14.328-32, 32-32l 448,0 c 17.672,0, 32,14.328, 32,32l0,400
1045
  C 512,417.728, 497.672,432.056, 480,432.056z M 480,0.064L 32,0.064 l0,400 l 127.888,0 l0-16.12 c0-8.84, 7.16-16, 16-16c 8.84,0, 16,7.16, 16,16L 191.888,400.056 l 128,0 l0-16.12
1046
  c0-8.84, 7.16-16, 16-16s 16,7.16, 16,16L 351.888,400.056 L 480,400.056 L 480,0.064 z M 368,224.056l 32,0 c 8.832,0, 16,7.168, 16,16l0,32 c0,8.832-7.168,16-16,16l-32,0
@@ -1050,7 +1050,7 @@
1050
  c 8.832,0, 16,7.168, 16,16l0,32 C 288,280.896, 280.832,288.056, 272,288.056z M 144,288.056l-32,0 c-8.832,0-16-7.168-16-16l0-32 c0-8.832, 7.168-16, 16-16l 32,0
1051
  c 8.832,0, 16,7.168, 16,16l0,32 C 160,280.896, 152.832,288.056, 144,288.056z M 144,160.064l-32,0 c-8.832,0-16-7.168-16-16l0-32 c0-8.84, 7.168-16, 16-16l 32,0
1052
  c 8.832,0, 16,7.16, 16,16l0,32 C 160,152.888, 152.832,160.064, 144,160.064z" />
1053
- <glyph unicode="&#xe076;" d="M 255.992,480C 156.976,480, 79.432,399.448, 79.432,300.432c0-74.6, 36.64-110.128, 65.592-136.064c 18.64-16.712, 31.184-26.776, 31.184-39.176
1054
  l0-27.128 c0-0.696, 0.096-1.376, 0.184-2.064l-0.36,0 l0-46.312 C 176.040,0.832, 207.632-32, 256.568-32c 47.232,0, 79.472,32.832, 79.472,81.688L 336.040,96
1055
  l-0.464,0 c 0.088,0.688, 0.208,1.368, 0.208,2.064l0,27.128 c0,18.88, 14.016,30.296, 35.264,48.848c 28.752,25.104, 61.512,56.344, 61.512,126.392
1056
  C 432.568,399.448, 355.008,480, 255.992,480z M 255.384,0c-29.952,0-47.344,18.576-47.344,49.688l-0.232,21.336C 219.32,67.088, 235,64, 256,64
@@ -1058,39 +1058,39 @@
1058
  l0-20.216 c-7.592-4.24-21.592-9.28-48.064-9.28c-27.784,0-40.96,4.928-47.512,8.736l0,20.768 c0,27.304-21.344,44.648-41.84,63.008
1059
  c-27.16,24.336-54.936,51.92-54.936,112.232C 111.432,381.8, 174.632,448, 255.992,448c 81.376,0, 144.576-66.2, 144.576-147.568
1060
  C 400.568,244.92, 376.336,221.144, 350.008,198.144z" />
1061
- <glyph unicode="&#xe077;" d="M 136.032,320.008L 24,320.008 c-8.84,0-16-7.16-16-16L 8-16 c0-8.84, 7.16-16, 16-16l 112.032,0 c 8.84,0, 16,7.16, 16,16L 152.032,304.008
1062
  C 152.032,312.848, 144.872,320.008, 136.032,320.008z M 120.032,0L 40,0 L 40,288.008 l 80.032,0 L 120.032,0 z M 311.872,224.872L 199.832,224.872 c-8.84,0-16-7.16-16-16L 183.832-16
1063
  c0-8.84, 7.16-16, 16-16l 112.040,0 c 8.84,0, 16,7.16, 16,16L 327.872,208.872 C 327.872,217.72, 320.72,224.872, 311.872,224.872z M 295.872,0L 215.832,0 L 215.832,192.872
1064
  l 80.040,0 L 295.872,0 z M 488,480L 376.136,480 c-8.84,0-16-7.16-16-16l0-480 c0-8.84, 7.16-16, 16-16L 488-32 c 8.84,0, 16,7.16, 16,16L 504,464 C 504,472.84, 496.84,480, 488,480z M 472,0
1065
  l-79.864,0 L 392.136,448 L 472,448 L 472,0 z" />
1066
- <glyph unicode="&#xe078;" d="M 512,224C 512,365.392, 397.384,480, 256,480C 114.608,480,0,365.392,0,224c0-141.384, 114.608-256, 256-256C 397.384-32, 512,82.616, 512,224z M 31.504,224
1067
  C 31.504,347.512, 132.488,448, 256,448s 224-100.488, 224-224S 379.512,0, 256,0S 31.504,100.488, 31.504,224z M 272.168,111.84L 272.168,292.072 l 57.88-57.88
1068
  c 6.248-6.248, 16.376-6.248, 22.624,0s 6.248,16.376,0,22.624L 255.672,351.32L 158.672,256.816c-3.128-3.128-4.688-7.216-4.688-11.312
1069
  s 1.56-8.184, 4.688-11.312c 6.248-6.248, 16.376-6.248, 22.624,0l 58.872,58.88L 240.168,111.84 c0-8.84, 7.168-16, 16-16S 272.168,103, 272.168,111.84z" />
1070
- <glyph unicode="&#xe079;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504
1071
  C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224S 379.512-0.504, 256-0.504z M 266.184,320.68
1072
  c-6.248-6.248-6.248-16.376,0-22.624l 57.88-57.88L 143.84,240.176 c-8.84,0-16-7.168-16-16s 7.16-16, 16-16l 181.232,0 l-58.88-58.872
1073
  c-6.248-6.248-6.248-16.376,0-22.624c 3.128-3.128, 7.216-4.688, 11.312-4.688s 8.184,1.56, 11.312,4.688l 94.504,97L 288.816,320.68
1074
  C 282.56,326.928, 272.44,326.928, 266.184,320.68z" />
1075
- <glyph unicode="&#xe07a;" d="M 256,480C 114.608,480,0,365.384,0,224c0-141.392, 114.608-256, 256-256c 141.384,0, 256,114.608, 256,256C 512,365.384, 397.384,480, 256,480z M 256-0.504
1076
  C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224S 379.512-0.504, 256-0.504z M 368.16,240.168L 187.928,240.168 l 57.88,57.88
1077
  c 6.248,6.248, 6.248,16.376,0,22.624s-16.376,6.248-22.624,0L 128.68,223.672l 94.504-97c 3.128-3.128, 7.216-4.688, 11.312-4.688
1078
  s 8.184,1.56, 11.312,4.688c 6.248,6.248, 6.248,16.376,0,22.624l-58.88,58.872L 368.16,208.168 c 8.84,0, 16,7.168, 16,16S 377,240.168, 368.16,240.168z" />
1079
- <glyph unicode="&#xe07b;" d="M0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480C 114.616,480,0,365.384,0,224z M 480.504,224
1080
  c0-123.512-100.984-224-224.504-224S 32,100.488, 32,224S 132.488,448, 256,448S 480.504,347.512, 480.504,224z M 239.832,336.16l0-180.224 l-57.88,57.88
1081
  c-6.248,6.248-16.376,6.248-22.624,0s-6.248-16.376,0-22.624l 97.008-94.504l 97,94.504c 3.128,3.128, 4.688,7.216, 4.688,11.312
1082
  s-1.56,8.184-4.688,11.312c-6.248,6.248-16.376,6.248-22.624,0l-58.872-58.88L 271.84,336.16 c0,8.84-7.168,16-16,16S 239.832,345, 239.832,336.16z" />
1083
- <glyph unicode="&#xe07c;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1084
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 32,224c0,56.136, 20.808,107.48, 55.048,146.832l 315.928-315.928
1085
  C 363.608,20.464, 312.208-0.504, 256-0.504C 132.488-0.504, 32,100.488, 32,224z M 425.512,77.608L 109.704,393.416C 148.992,427.384, 200.12,448, 256,448
1086
  c 123.512,0, 224-100.488, 224-224C 480,168.168, 459.424,116.984, 425.512,77.608z" />
1087
- <glyph unicode="&#xe07d;" d="M 256,416c 123.512,0, 224-71.776, 224-160c0-88.216-100.488-160-224-160l-7.568-0.032l-5.688-0.016c-8.792,0-14.544,0.232-23.536,1.576
1088
  l-17.928,2.56l-11.504-13.92c-5.288-6.392-32.272-28.56-62.056-42.832c 6.056,16.016, 10.52,33.504, 10.92,50.8l 0.16,0.952l0,2.736 l0,19.576
1089
  l-17.432,8.904C 64.568,155.36, 32,202.624, 32,256C 32,344.224, 132.488,416, 256,416 M 256,448C 114.6,448,0,362.032,0,256c0-66.032, 39.128-123.576, 106.792-158.168
1090
  c0-0.408-0.128-0.704-0.128-1.16c0-28.688-16.080-60.232-25.504-76.472l 0.024,0 C 80.44,18.456, 80,16.544, 80,14.496
1091
  C 80,6.456, 86.48,0, 94.504,0c 1.208,0, 3.128,0.248, 3.832,0.248c 0.168,0, 0.264,0, 0.248-0.048c 50,8.168, 104.976,52.344, 115.912,65.672
1092
  c 11.24-1.672, 18.832-1.92, 28.24-1.92C 246.704,63.952, 250.984,64, 256,64c 141.376,0, 256,85.952, 256,192C 512,362.032, 397.376,448, 256,448L 256,448z" />
1093
- <glyph unicode="&#xe07e;" d="M 319.064,368.312c 0.64,0, 1.16-0.504, 1.16-1.12l0-63.936 c0-11.832, 6.528-22.712, 17-28.264c 4.704-2.504, 9.856-3.736, 15-3.736
1094
  c 6.28,0, 13.528,1.84, 18.92,5.496L 480,338.368L 480,110.16 L 370.544,169.92c-5.488,3.832-11.888,5.768-18.328,5.768
1095
  c-5.064,0-10.128-1.2-14.784-3.608c-10.56-5.512-17.2-16.44-17.216-28.344l-0.080-62.92c0-0.624-0.504-1.128-1.144-1.128L 33.144,79.688
1096
  C 32.504,79.688, 32,80.184, 32,80.8l 0.080,286.392c0,0.624, 0.504,1.12, 1.144,1.12L 319.064,368.312 M 495.184,384.328c-3.408,0-10.144-1.008-13.984-4.832
@@ -1098,27 +1098,27 @@
1098
  c0-18.28, 14.816-33.128, 33.144-33.128l 285.856,0 c 18.328,0, 33.144,14.84, 33.144,33.128l 0.080,62.872l 131.488-76.656
1099
  c 3.856-3.84, 8.128-3.344, 11.544-3.344c 3.544,0, 6.184,1.080, 6.512,1.216C 507.984,67.496, 512,73.496, 512,80.248L 512,367.736
1100
  c0,6.752-4.016,12.776-10.232,15.328C 501.408,383.224, 498.752,384.328, 495.184,384.328L 495.184,384.328z" />
1101
- <glyph unicode="&#xe07f;" d="M 464,368l-73.592,0 L 352,432L 160,432 l-38.4-64L 48,368 c-16,0-48-16-48-47.504L0,64 c0-26.504, 24-48, 44.664-48l 420.336,0 C 486,16, 512,38.496, 512,63.496L 512,320
1102
  C 512,336, 496,368, 464,368z M 480,63.496c0-6.312-10.232-15.144-15-15.504L 44.76,47.992 C 41.056,48.296, 32,55.512, 32,64L 32,320.496
1103
  C 32,330.632, 45.616,335.744, 48,336l 91.72,0 l 9.32,15.536L 178.12,400l 156.824,0 l 28.56-48.472l 8.8-15.528L 464,336 c 11.28,0, 15.84-14.736, 16-16L 480,63.496 z M 256,320
1104
  c-61.856,0-112-50.144-112-112s 50.144-112, 112-112s 112,50.144, 112,112S 317.856,320, 256,320z M 256,128c-44.112,0-80,35.888-80,80s 35.888,80, 80,80
1105
  s 80-35.888, 80-80S 300.112,128, 256,128z" />
1106
- <glyph unicode="&#xe080;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1107
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224
1108
  S 379.512-0.504, 256-0.504z M 358.168,317.672L 207.968,166.528l-67.64,67.64c-6.248,6.248-16.376,6.248-22.632,0
1109
  c-6.248-6.248-6.248-16.376,0-22.624l 79.192-79.2c 6.248-6.24, 16.376-6.24, 22.632,0c 0.72,0.72, 1.336,1.504, 1.896,2.32L 380.808,295.040
1110
  c 6.24,6.248, 6.24,16.376,0,22.632C 374.552,323.92, 364.424,323.92, 358.168,317.672z" />
1111
- <glyph unicode="&#xe081;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1112
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224
1113
  S 379.512-0.504, 256-0.504z M 272,230.496L 272,384 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-160 c0-4.528, 1.896-8.6, 4.928-11.504
1114
  c 0.264-0.312, 0.48-0.648, 0.768-0.944l 79.192-79.2c 6.248-6.24, 16.376-6.24, 22.624,0c 6.248,6.248, 6.248,16.384,0,22.632L 272,230.496z" />
1115
- <glyph unicode="&#xe082;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1116
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224
1117
  S 379.512-0.504, 256-0.504z M 346.504,314.504c-6.248,6.248-16.376,6.248-22.624,0L 256,246.624l-67.88,67.88
1118
  c-6.248,6.248-16.376,6.248-22.632,0c-6.248-6.248-6.248-16.376,0-22.624L 233.368,224l-67.88-67.88c-6.248-6.24-6.248-16.384,0-22.624
1119
  c 6.248-6.248, 16.376-6.248, 22.632,0L 256,201.376l 67.88-67.88c 6.248-6.248, 16.376-6.248, 22.624,0c 6.248,6.24, 6.248,16.384,0,22.624
1120
  L 278.624,224l 67.88,67.88C 352.76,298.136, 352.76,308.264, 346.504,314.504z" />
1121
- <glyph unicode="&#xe083;" d="M 381.512,350C 359.2,409.216, 311.232,446.72, 238.784,446.72c-92.192,0-156.696-68.456-162.24-157.768C 32.088,274.736,0,229.392,0,178.032
1122
  c0-62.872, 49.424-115.984, 107.912-115.984l 14.224,0 c 8.832,0, 16,7.16, 16,16s-7.168,16-16,16l-14.224,0 c-41.152,0-76.416,38.456-76.416,83.984
1123
  c0,40.232, 28.208,76.528, 63.592,82.608l 14.52,2.504l-1.296,14.672l-0.12,0.184c 0.008,77.936, 51.304,136.72, 130.592,136.72
1124
  c 63.552,0, 99.256-31.312, 115.776-84.72l 3.416-11.016l 11.536-0.248c 59.432-1.248, 111.544-49.472, 111.544-109.392
@@ -1128,7 +1128,7 @@
1128
  c-4.472-4.688-4.472-12.24,0-16.912l 57.752-63.872c 0.080-0.080, 0.096-0.184, 0.168-0.264l 4.048-4.232
1129
  c 2.248-2.344, 5.184-3.504, 8.144-3.488c 2.936-0.016, 5.888,1.144, 8.112,3.488l 4.048,4.232c 0.080,0.080, 0.12,0.168, 0.184,0.264
1130
  l 59.216,64.872c 4.472,4.672, 4.472,10.224,0,14.912L 323.168,92.264z" />
1131
- <glyph unicode="&#xe084;" d="M 381.512,350.016C 359.2,409.232, 311.232,446.736, 238.776,446.736c-92.192,0-156.696-68.456-162.24-157.768
1132
  C 32.088,274.752,0,229.408,0,178.048c0-62.872, 49.424-115.984, 107.912-115.984l 46.224,0 c 8.832,0, 16,7.168, 16,16c0,8.84-7.168,16-16,16l-46.224,0
1133
  c-41.152,0-76.416,38.456-76.416,83.984c0,40.232, 28.208,76.528, 63.592,82.608l 14.52,2.504l-1.288,14.664l-0.12,0.184
1134
  c0,77.936, 51.288,136.72, 130.576,136.72c 63.552,0, 99.256-31.312, 115.768-84.72l 3.424-11.016l 11.528-0.248
@@ -1138,14 +1138,14 @@
1138
  l-4.048-4.232c-0.080-0.080-0.096-0.176-0.168-0.256l-57.752-63.872c-4.472-4.672-4.472-12.232,0-16.92l 4.032-2.736
1139
  c 4.472-4.672, 11.72-3.16, 16.184,1.512l 34.056,37.968l0-161.216 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 271.808,178.328 l 35.184-38.816
1140
  c 4.472-4.672, 11.704-6.184, 16.168-1.512l 4.032,2.736c 4.472,4.688, 4.472,12.248,0,16.92L 267.992,222.528z" />
1141
- <glyph unicode="&#xe085;" d="M 280,480L 104,480 c-17.672,0-32-14.328-32-32l0-448 c0-17.672, 14.328-32, 32-32l 304,0 c 17.672,0, 32,14.328, 32,32L 440,319.992 L 280,480z M 408,306.736L 408,304 L 264,304 L 264,448 l 2.752,0
1142
  L 408,306.736z M 104,0L 104,448 l 128,0 l0-176 l 176,0 l0-272 L 104,0 z" />
1143
- <glyph unicode="&#xe086;" d="M 511.728,364c 0.496,3.072, 0.088,6.24-1.24,9.136C 506.456,390.856, 493.648,400, 472,400L 56,400 c-19.040,0-39.552-7-49.64-20.736
1144
  c-0.872-0.664-1.704-1.416-2.456-2.288c-3.224-3.72-4.352-8.504-3.632-13.016C 0.128,362.664,0,361.36,0,360l0-256 c0-26.512, 29.496-56, 56-56
1145
  l 416,0 c 26.512,0, 40,29.488, 40,56L 512,360 C 512,361.416, 511.816,362.656, 511.728,364z M 56,368l 416,0 c 0.096,0, 0.144,0, 0.216,0L 256,195.672L 40.656,367.296
1146
  C 45.552,368.2, 51.576,368, 56,368z M 472,80L 56,80 c-8.824,0-24,15.168-24,24L 32,333.224 L 245.52,162.4c 3.008-2.6, 6.744-3.896, 10.48-3.896
1147
  s 7.472,1.296, 10.488,3.896L 480,333.216L 480,104 C 480,95.168, 480.832,80, 472,80z" />
1148
- <glyph unicode="&#xe087;" d="M 257.736,319.296c-53.016,0-96-42.984-96-96c0-53.008, 42.984-96, 96-96s 96,42.984, 96,96
1149
  C 353.736,276.312, 310.752,319.296, 257.736,319.296z M 257.736,159.296c-35.288,0-64.736,29.408-64.736,64.696c0,35.288, 28.712,64, 64,64
1150
  c 35.296,0, 64-28.712, 64-64C 321,188.704, 293.032,159.296, 257.736,159.296z M 511.84,227.712c-0.184,0.808-0.104,1.664-0.344,2.456
1151
  c-0.104,0.336-0.312,0.528-0.432,0.824c-0.168,0.456-0.128,0.992-0.36,1.432C 464.168,338.976, 363.872,400.304, 256.992,400.304
@@ -1156,14 +1156,14 @@
1156
  c 0.112,0.28, 0.328,0.488, 0.424,0.8c 0.248,0.784, 0.168,1.64, 0.344,2.456c 0.28,1.432, 0.544,2.832, 0.544,4.312
1157
  C 512.392,224.872, 512.128,226.264, 511.84,227.712z M 256,79.704c-90.648,0-179.872,47.784-223.712,143.84
1158
  c 43.424,95.736, 133.84,144.752, 224.712,144.752c 90.84,0, 179.248-49.072, 222.688-144.856C 436.28,127.736, 346.872,79.704, 256,79.704z" />
1159
- <glyph unicode="&#xe088;" d="M 340,432.336c-80,0-101.328,48-202.656,48C 72,480.336, 32,430.992, 32,430.992l0-447.328
1160
  c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 64,187.6 c 16.88,10.888, 40.168,20.736, 69.344,20.736c 101.328,0, 130.656-48, 210.656-48s 136,48, 136,48l0,272
1161
  C 480,480.336, 420,432.336, 340,432.336z M 448,224.64c-18.080-11.792-56.392-32.304-104-32.304c-31.456,0-52.92,8.632-80.112,19.568
1162
  c-33.136,13.32-70.704,28.432-130.544,28.432c-27.344,0-50.536-6.88-69.344-16.080L 64,417.992 c 12.048,10.96, 38.312,30.344, 73.344,30.344
1163
  c 47.056,0, 73.544-11.424, 101.592-23.504c 27.936-12.040, 56.832-24.496, 101.064-24.496c 42.624,0, 80.064,11.784, 108,24.456L 448,224.64 z" />
1164
- <glyph unicode="&#xe089;" d="M 177.376,392l 39.312-38.624L 226.744,344L 240,344 l 240,0 l0-288 L 32,56 L 32,392 l 144,0 M 192,424L 32,424 c-17.672,0-32-14.328-32-32l0-336 c0-17.672, 14.328-32, 32-32l 448,0
1165
  c 17.672,0, 32,14.328, 32,32L 512,344 c0,17.672-14.328,32-32,32L 240,376 L 192,424L 192,424z" />
1166
- <glyph unicode="&#xe08a;" d="M 143.992,422.92c 15.688,0, 44.048-7.504, 90.048-52.808l 22.808-22.456l 22.464,22.816C 311.248,402.92, 345.232,423.072, 368,423.072
1167
  c 30.704,0, 54.904-10.504, 78.504-34.048c 22.232-22.184, 34.496-51.68, 34.496-83.056c 0.016-31.392-12.224-60.912-34.704-83.336
1168
  c-1.832-1.856-98.496-106.152-179.48-193.552c-3.816-3.624-8.176-4.16-10.496-4.16c-2.288,0-6.6,0.512-10.4,4.048
1169
  c-19.736,21.952-162.776,181-179.408,197.616C 44.248,248.792, 32,278.312, 32,309.696c 0.008,31.376, 12.256,60.864, 34.52,83.072
@@ -1171,17 +1171,17 @@
1171
  c 16.712-16.72, 178.928-197.168, 178.928-197.168c 9.24-9.248, 21.376-13.84, 33.48-13.84c 12.112,0, 24.2,4.592, 33.456,13.84
1172
  c0,0, 177.44,191.512, 179.328,193.424c 58.52,58.44, 58.52,153.12,0,211.504c-29.056,29-61.512,43.392-101.104,43.392
1173
  c-37.824,0-80-30.16-111.504-62.16C 223.992,424.92, 183.12,454.92, 143.992,454.92L 143.992,454.92z" />
1174
- <glyph unicode="&#xe08b;" d="M 288,112l-16,0 L 272,255 c0,0.168-0.048,0.328-0.048,0.504S 272,255.832, 272,256c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16
1175
  s 7.168-16, 16-16l 16,0 l0-128 l-16,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 64,0 c 8.832,0, 16,7.168, 16,16S 296.832,112, 288,112z M 256,304c 17.672,0, 32,14.328, 32,32
1176
  s-14.328,32-32,32s-32-14.328-32-32S 238.328,304, 256,304z M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256,114.608, 256,256
1177
  C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224S 379.512-0.504, 256-0.504z" />
1178
- <glyph unicode="&#xe08c;" d="M 327.848,480c-79.528,0-144-64.576-144-144.232c0-35.704, 13.016-68.312, 34.472-93.504
1179
  c-4.416,0.272-8.92-1.216-12.296-4.592L 44.832,75.48c-6.24-6.248-6.24-16.384,0-22.624c 0.12-0.12, 0.256-0.192, 0.384-0.312
1180
  c 0.040-0.040, 0.064-0.088, 0.104-0.128l 78.456-79.952c 6.24-6.248, 16.376-6.248, 22.624,0s 6.248,16.384,0,22.624l-67.736,69.032l 41.248,41.504
1181
  l 67.864-69.16c 6.24-6.248, 16.376-6.248, 22.624,0s 6.24,16.384,0,22.624l-67.928,69.224l 86.192,86.736c 3.336,3.336, 4.832,7.768, 4.608,12.136
1182
  c 25.312-22.144, 58.336-35.656, 94.584-35.656c 79.528,0, 144,64.576, 144,144.24C 471.848,415.424, 407.384,480, 327.848,480z M 327.848,224
1183
  c-61.624,0-112,50.136-112,112c0,61.872, 50.376,112, 112,112s 112-50.128, 112-112C 439.848,274.136, 389.48,224, 327.848,224z" />
1184
- <glyph unicode="&#xe08d;" d="M 147.832,113.776c 3.128-3.128, 7.216-4.688, 11.312-4.688s 8.184,1.56, 11.312,4.688L 364.288,309.12
1185
  c 6.248,6.248, 6.248,16.376,0,22.624s-16.376,6.248-22.624,0L 147.832,136.4C 141.576,130.152, 141.576,120.024, 147.832,113.776z M 237.936,147.848
1186
  c 5.288-23.312-0.416-46.2-18.432-64.216l-64.624-62.624c-13.6-13.592-31.68-21.080-50.912-21.080s-37.312,7.488-50.904,21.080
1187
  c-28.072,28.080-28.072,73.768-0.168,101.672l 63.128,65.128c 13.6,13.592, 31.68,21.088, 50.912,21.088c 6.576,0, 12.912-1.176, 19.088-2.872
@@ -1193,34 +1193,34 @@
1193
  c 28.064-28.080, 28.064-73.768, 0.16-101.672l-64.624-64.624c-13.592-13.592-31.688-21.080-50.904-21.080c-4.904,0-9.216-0.496-13.92,0.464
1194
  l-25.488-25.504c 12.736-5.296, 25.816-6.968, 39.408-6.968c 26.608,0, 53.216,10.152, 73.528,30.464l 64.472,64.472
1195
  C 522.176,343.144, 522.176,408.984, 481.568,449.608z" />
1196
- <glyph unicode="&#xe08e;" d="M 400,288l-16,0 l0,61.064 C 384,422.488, 330.872,480, 255.408,480C 179.64,480, 128,421.264, 128,349.064L 128,288 l-16,0
1197
  c-35.296,0-64-28.704-64-64l0-192 c0-35.296, 28.704-64, 64-64l 288,0 c 35.296,0, 64,28.704, 64,64L 464,224 C 464,259.296, 435.296,288, 400,288z M 160,349.064
1198
  C 160,403.608, 197.28,448, 255.408,448C 312.936,448, 352,404.544, 352,349.064L 352,288 L 160,288 L 160,349.064 z M 432,32c0-17.64-14.36-32-32-32L 112,0 c-17.64,0-32,14.36-32,32L 80,224
1199
  c0,17.64, 14.36,32, 32,32l 288,0 c 17.64,0, 32-14.36, 32-32L 432,32 z M 256,192c-17.672,0-32-14.328-32-32c0-11.816, 6.48-22.016, 16-27.56L 240,80 c0-8.832, 7.168-16, 16-16
1200
  s 16,7.168, 16,16l0,52.44 c 9.52,5.544, 16,15.752, 16,27.56C 288,177.672, 273.672,192, 256,192z" />
1201
- <glyph unicode="&#xe08f;" d="M 400,287.448L 171.52,287.448 l-8.28,37.136
1202
  c-14.12,52.688, 10.408,105.216, 66.544,120.256c 55.568,14.888, 104.544-16.968, 118.912-70.56l 6.8-26.984c 2.288-8.536, 11.056-13.6, 19.6-11.312
1203
  c 8.536,2.288, 13.6,11.056, 11.312,19.592l-6.808,26.984C 360.608,453.48, 294.408,495.28, 221.504,475.752C 148.32,456.144, 113.648,386.040, 132.336,316.296
1204
  l 6.432-28.848L 112,287.448 c-35.296,0-64-28.704-64-64l0-192 c0-35.296, 28.704-64, 64-64l 288,0 c 35.296,0, 64,28.704, 64,64l0,192 C 464,258.744, 435.296,287.448, 400,287.448z
1205
  M 432,31.448c0-17.64-14.36-32-32-32L 112-0.552 c-17.64,0-32,14.36-32,32l0,192 c0,17.64, 14.36,32, 32,32l 288,0 c 17.64,0, 32-14.36, 32-32L 432,31.448 z M 256,191.448
1206
  c-17.672,0-32-14.328-32-32c0-11.816, 6.48-22.016, 16-27.56l0-52.44 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,52.44 c 9.52,5.544, 16,15.752, 16,27.56
1207
  C 288,177.12, 273.672,191.448, 256,191.448z" />
1208
- <glyph unicode="&#xe090;" d="M 507.32-4.52L 351.856,151.896c 28.976,34.704, 46.44,79.352, 46.44,128.104
1209
  c0,110.456-89.544,200-200,200c-110.456,0-200-89.544-200-200c0-110.456, 89.544-200, 200-200c 50.184,0, 96.024,18.528, 131.144,49.072l 155.248-156.224
1210
  c 6.248-6.248, 16.384-6.248, 22.632,0C 513.56-20.904, 513.56-10.776, 507.32-4.52z M 198.296,111.736
1211
  C 105.368,111.736, 30.032,187.072, 30.032,280S 105.368,448.264, 198.296,448.264S 366.56,372.928, 366.56,280S 291.224,111.736, 198.296,111.736z" />
1212
- <glyph unicode="&#xe091;" d="M 507.312-4.52L 365.8,137.864c 30.304,36.2, 48.544,82.88, 48.544,133.856
1213
  C 414.344,386.752, 321.592,480, 206.568,480S-1.704,386.752-1.704,271.728c0-115.024, 93.248-208.272, 208.272-208.272
1214
  c 52.504,0, 100.336,19.48, 136.848,51.536l 141.264-142.152c 6.248-6.248, 16.384-6.248, 22.624,0C 513.56-20.904, 513.56-10.776, 507.312-4.52z
1215
  M 206.296,96c-96.776,0-176,79.224-176,176s 79.224,176, 176,176s 176-79.224, 176-176S 303.072,96, 206.296,96z M 286.296,288l-64,0 l0,64 c0,8.832-7.168,16-16,16
1216
  s-16-7.168-16-16l0-64 l-64,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 64,0 l0-64 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,64 l 64,0 c 8.832,0, 16,7.168, 16,16
1217
  S 295.136,288, 286.296,288z" />
1218
- <glyph unicode="&#xe092;" d="M 507.312-4.52L 365.8,137.864c 30.304,36.2, 48.544,82.88, 48.544,133.856
1219
  C 414.344,386.752, 321.592,480, 206.568,480S-1.704,386.752-1.704,271.728c0-115.024, 93.248-208.272, 208.272-208.272
1220
  c 52.504,0, 100.336,19.48, 136.848,51.536l 141.264-142.152c 6.248-6.248, 16.384-6.248, 22.624,0C 513.56-20.904, 513.56-10.776, 507.312-4.52z
1221
  M 206.296,96c-96.776,0-176,79.224-176,176s 79.224,176, 176,176s 176-79.224, 176-176S 303.072,96, 206.296,96z M 286.296,288l-160,0 c-8.832,0-16-7.168-16-16
1222
  s 7.168-16, 16-16l 160,0 c 8.832,0, 16,7.168, 16,16S 295.136,288, 286.296,288z" />
1223
- <glyph unicode="&#xe093;" d="M 86.36-23.816c-21.704,0-42.544,8.984-59.152,25.608C-9.616,38.736-9.616,98.824, 27.2,135.744L 314.336,440.656
1224
  c 44.8,44.872, 113.424,40.84, 163.504-9.304c 22.44-22.48, 35.032-54.888, 34.56-88.952c-0.472-33.704-13.64-65.96-36.144-88.504L 259.248,22.872
1225
  c-6.040-6.472-16.168-6.768-22.616-0.696c-6.432,6.080-6.744,16.224-0.68,22.672l 217.336,231.376c 17,17.032, 26.752,41.192, 27.112,66.624
1226
  c 0.36,25.448-8.832,49.44-25.184,65.832c-30.72,30.784-80.736,46.904-117.92,9.632L 50.168,113.4c-24.688-24.752-24.68-64.504-0.32-88.928
@@ -1229,29 +1229,29 @@
1229
  c-6.44,6.064-6.736,16.224-0.68,22.656l 172.272,183.232c 13.544,13.608, 27.392,20.984, 41.488,22.248c 11,0.976, 27.36-1.368, 44.048-18.104
1230
  c 24.768-24.816, 21.688-61.216-7.64-90.608L 153.592,6.64c-18.24-18.304-40.264-28.936-62.36-30.296
1231
  C 89.608-23.768, 87.984-23.816, 86.36-23.816z" />
1232
- <glyph unicode="&#xe094;" d="M 502.016,480c-3.048,0-6.76-0.864-11.048-2.68L 13.64,274.776c-17.184-7.288-18.272-21.344-2.416-31.224l 134.88-84.016
1233
  c 15.856-9.872, 36.824-31.040, 46.592-47.024l 80.856-132.384c 4.64-7.592, 10.248-11.36, 15.64-11.36c 5.96,0, 11.64,4.576, 15.512,13.616
1234
  L 508.832,459.256C 514.36,472.192, 511.208,480, 502.016,480z M 162.776,188.040L 53.448,256.144L 420.256,411.768L 184.16,171.672
1235
  C 176.944,178.072, 169.616,183.784, 162.776,188.040z M 286.36,22.368l-65.216,106.76c-3.848,6.304-8.928,13.024-14.592,19.696l 237.192,241.192
1236
  L 286.36,22.368z" />
1237
- <glyph unicode="&#xe095;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1238
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224
1239
  S 379.512-0.504, 256-0.504z M 368,240L 272,240 L 272,336 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-96 L 144,240 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 96,0 l0-96
1240
  c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 272,208 l 96,0 c 8.832,0, 16,7.168, 16,16S 376.832,240, 368,240z" />
1241
- <glyph unicode="&#xe096;" d="M 257.832,480.184C 152.88,480.184, 64,390.8, 64,284.912c0-110.88, 103.016-224.272, 172.312-303.968c 0.264-0.32, 11.464-12.76, 25.264-12.76
1242
  l 1.224,0 c 13.8,0, 24.92,12.44, 25.2,12.76c 65.032,74.76, 160,198.024, 160,303.968C 448,390.8, 378.672,480.184, 257.832,480.184z M 264.248,2.408
1243
  c-0.56-0.56-1.376-1.184-2.096-1.704c-0.736,0.504-1.536,1.144-2.128,1.704l-8.368,9.624C 185.96,87.4, 96,190.608, 96,284.912
1244
  c0,88.504, 74.112,163.28, 161.832,163.28C 367.096,448.192, 416,366.192, 416,284.912C 416,213.32, 364.936,118.264, 264.248,2.408z M 256.56,383.296
1245
  c-53.016,0-96-42.984-96-96s 42.984-96, 96-96s 96,42.984, 96,96S 309.576,383.296, 256.56,383.296z M 256.56,223.296
1246
  c-35.288,0-64.736,29.408-64.736,64.704c0,35.288, 28.712,64, 64,64c 35.312,0, 64-28.712, 64-64C 319.84,252.704, 291.872,223.296, 256.56,223.296z" />
1247
- <glyph unicode="&#xe097;" d="M 350.776,397.952c-8,3.728-17.512,0.296-21.264-7.712c-3.76-8-0.296-17.52, 7.704-21.272
1248
  c 81.168-38, 125.248-125.976, 107.176-213.936c-21.456-104.44-123.832-171.904-228.28-150.512c-50.584,10.392-92.104,39.856-120.528,82.968
1249
  c-28.432,43.128-38.368,94.752-27.976,145.336c 12.352,60.112, 51.312,109.664, 106.88,135.952c 7.984,3.776, 11.4,13.312, 7.616,21.304
1250
  c-3.776,7.976-13.296,11.368-21.296,7.616C 96.056,367.064, 50.664,309.328, 36.264,239.264c-12.112-58.968-0.536-119.128, 32.592-169.392
1251
  c 33.136-50.24, 81.848-84.584, 140.816-96.704c 15.216-3.128, 30.408-4.624, 45.376-4.624c 104.728,0, 198.824,73.56, 220.688,180.056
1252
  C 496.792,251.104, 445.408,353.648, 350.776,397.952z M 256.008,272c 8.832,0, 16,7.168, 16,16L 272.008,464 c0,8.832-7.168,16-16,16c-8.832,0-16-7.168-16-16l0-176
1253
  C 240.008,279.168, 247.176,272, 256.008,272z" />
1254
- <glyph unicode="&#xe098;" d="M 248.704,30.72c-0.040,0.096-0.136,0.16-0.192,0.24l-45.96,71.832
1255
  c-3.264,5.36-10.344,7.264-15.864,4.256l-4.096-2.52c-5.504-3-5.384-10.768-2.128-16.128l 29.464-45.704
1256
  c-2.512,0.552-5.048,1-7.528,1.648c-51.592,13.496-95.248,48.416-119.768,95.8c-23.168,44.76-27.52,95.848-12.256,143.872
1257
  c 15.256,48.024, 49.888,87.232, 94.648,110.392c 7.624,3.944, 10.6,13.32, 6.656,20.928c-3.936,7.632-13.32,10.616-20.928,6.664
@@ -1266,7 +1266,7 @@
1266
  c 6.504-1, 12.984-2.208, 19.312-3.88c 51.616-13.52, 93.696-48.432, 118.2-95.784c 23.16-44.76, 27.512-95.848, 12.24-143.864
1267
  c-15.256-48.024-48.328-87.224-93.088-110.408c-7.616-3.944-10.584-13.304-6.64-20.936c 2.76-5.32, 8.168-8.384, 13.8-8.384
1268
  c 2.4,0, 4.832,0.56, 7.136,1.744c 52.136,26.968, 90.624,72.64, 108.408,128.56C 489.008,207.968, 483.936,267.48, 456.952,319.592z" />
1269
- <glyph unicode="&#xe099;" d="M 255.64,480C 127.736,480, 23.68,375.936, 23.68,248.032
1270
  c0-120.224, 92.648-220.768, 211.784-231.048l-45.928-23.28c-5.672-3.112-9.048-10.112-5.688-15.64l 1.624-4.2
1271
  c 3.376-5.528, 10.688-7.488, 16.344-4.392l 76.656,39.248c 0.096,0.064, 0.2,0.048, 0.296,0.112l 5.144,2.816
1272
  c 2.84,1.56, 4.72,4.112, 5.472,6.952c 0.784,2.84, 0.424,6-1.264,8.752l-3.048,5c-0.048,0.096-0.144,0.16-0.2,0.248
@@ -1274,7 +1274,7 @@
1274
  c-0.152,0.008-0.288,0.064-0.432,0.072C 137.64,55.376, 55.68,143.032, 55.68,248.032C 55.68,358.296, 145.384,448, 255.64,448
1275
  c 110.272,0, 200.48-89.704, 200.48-199.968c0-63.488-29.16-121.8-80-159.984c-7.064-5.312-8.488-15.344-3.184-22.408
1276
  c 5.312-7.080, 15.344-8.488, 22.408-3.184c 58.968,44.296, 92.784,111.936, 92.784,185.576C 488.12,375.936, 383.552,480, 255.64,480z" />
1277
- <glyph unicode="&#xe09a;" d="M 480.248,272.472l-41.064,9.112c-3.2,10.24-7.392,20.040-12.2,29.464l 22.216,37.016c 8.296,13.256, 12.488,32.76,0,45.256l-22.64,22.624
1278
  c-12.488,12.496-33.576,10.248-46.312,1.416l-36.016-22.944c-9.344,4.848-19.112,9-29.264,12.28l-9.216,41.56
1279
  C 303,463.496, 289.672,480, 272,480l-32,0 c-17.672,0-28.504-16.752-32-32l-10.264-41.064c-10.84-3.456-21.248-7.872-31.168-13.104l-36.92,23.512
1280
  c-12.728,8.832-33.824,11.080-46.312-1.416l-22.632-22.624c-12.496-12.504-8.304-32,0-45.256l 23.376-38.96
@@ -1298,7 +1298,7 @@
1298
  c 3.576-0.664, 6.36-2.728, 6.952-3.848L 480.016,208.976z M 256.216,320.16c-53.136,0-96.368-43.144-96.368-96.16
1299
  c0-53.008, 43.232-96.152, 96.368-96.152c 53.136,0, 96.368,43.144, 96.368,96.152C 352.584,277.016, 309.352,320.16, 256.216,320.16z M 256,160
1300
  c-35.288,0-64,28.712-64,64c0,35.296, 28.712,64, 64,64c 35.296,0, 64-28.704, 64-64C 320,188.712, 291.288,160, 256,160z" />
1301
- <glyph unicode="&#xe09b;" d="M 256,441.256l 58.472-121.264l 10.264-21.28l 23.392-3.488l 132.912-19.744L 384.112,178.808l-16.28-16.248l 3.808-22.656l 22.64-135.080
1302
  l-117.136,63l-21.168,11.392l-21.168-11.392L 117.68,4.792l 22.648,135.112l 3.792,22.656l-16.28,16.248L 30.952,275.496l 132.912,19.744
1303
  l 23.384,3.488l 10.272,21.272L 256,441.256 M 255.992,472.224c-14.328,0-27.392-8.088-33.488-20.728l-57.952-120.32L 31.2,311.344
1304
  c-13.696-2.048-25.072-11.4-29.488-24.192c-4.408-12.832-1.072-26.952, 8.6-36.576l 97.704-97.6l-22.664-135.328
@@ -1306,13 +1306,13 @@
1306
  l 116.256-62.592c 5.592-2.992, 11.752-4.488, 17.888-4.488c 7.48,0, 14.952,2.208, 21.328,6.576c 11.552,7.976, 17.456,21.648, 15.16,35.288
1307
  l-22.672,135.328l 97.752,97.6c 9.672,9.624, 12.984,23.752, 8.576,36.576c-4.424,12.808-15.8,22.16-29.488,24.192l-133.328,19.832l-57.984,120.32
1308
  C 283.424,464.152, 270.352,472.224, 255.992,472.224L 255.992,472.224z" />
1309
- <glyph unicode="&#xe09c;" d="M 311.848,480.112c-110.456,0-200-89.536-200-200c0-49.256, 17.84-94.336, 47.368-129.184
1310
  l-63.656-64.048l-67.632,68.272c-6.24,6.248-16.376,6.248-22.624,0s-6.248-16.376,0-22.624l 67.696-68.344l-68.176-68.592
1311
  c-6.248-6.248-6.248-16.392,0-22.624c 6.24-6.248, 16.376-6.248, 22.624,0l 68.072,68.496l 68.232-68.88c 6.248-6.248, 16.376-6.248, 22.624,0
1312
  s 6.248,16.376,0,22.624l-68.304,68.952l 63.704,64.096c 34.976-29.984, 80.384-48.144, 130.064-48.144c 110.456,0, 200,89.544, 200,200
1313
  C 511.848,390.576, 422.304,480.112, 311.848,480.112z M 311.848,111.84c-92.928,0-168.264,75.344-168.264,168.272
1314
  c0,92.928, 75.336,168.264, 168.264,168.264s 168.264-75.336, 168.264-168.264C 480.12,187.184, 404.784,111.84, 311.848,111.84z" />
1315
- <glyph unicode="&#xe09d;" d="M 511.648,468.672c 0.072,3.24-0.688,6.144-2.792,8.216
1316
  c-2.072,2.088-4.976,3.36-8.2,3.264l-5.848-0.136c-0.112,0-0.192-0.040-0.32-0.056L 347.736,480.472
1317
  c-6.464-0.144-11.808-5.496-11.96-11.96L 335.76,460.296c 0.984-7.624, 6.976-12.080, 13.44-11.936l 107.608-0.216L 328.736,320.848
1318
  c-34.744,29.12-79.504,46.68-128.384,46.68c-110.464,0-200-89.536-200-200c0-110.456, 89.536-200, 200-200c 110.456,0, 200,89.544, 200,200
@@ -1320,13 +1320,13 @@
1320
  c 6.48,0.152, 11.824,4, 11.96,10.464l 0.336,147.504c0,0.12-0.44,0.2-0.44,0.312L 511.648,468.672z M 368.616,167.528
1321
  c0-92.928-75.336-168.264-168.272-168.264c-92.928,0-168.264,75.336-168.264,168.264s 75.336,168.264, 168.264,168.264
1322
  C 293.28,335.8, 368.616,260.464, 368.616,167.528z" />
1323
- <glyph unicode="&#xe09e;" d="M 496,240l-48.72,0 C 439.584,333.264, 365.256,407.52, 272,415.232L 272,464 c0,8.832-7.168,16-16,16
1324
  s-16-7.168-16-16l0-48.768 C 146.752,407.52, 72.416,333.264, 64.712,240L 16,240 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 48.712,0
1325
  C 72.416,114.744, 146.752,40.48, 240,32.768L 240-16 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,48.768 C 365.256,40.48, 439.584,114.744, 447.28,208L 496,208
1326
  c 8.832,0, 16,7.168, 16,16S 504.832,240, 496,240z M 240,383.208L 240,240 L 96.776,240 C 104.28,315.6, 164.4,375.704, 240,383.208z M 96.776,208L 240,208 l0-143.208
1327
  C 164.4,72.296, 104.28,132.4, 96.776,208z M 272,64.792L 272,208 l 143.224,0 C 407.72,132.4, 347.6,72.296, 272,64.792z M 272,240L 272,383.208
1328
  C 347.6,375.704, 407.72,315.6, 415.224,240L 272,240 z" />
1329
- <glyph unicode="&#xe09f;" d="M 327.384,447.048c-5.216,2.776-11.544,2.464-16.456-0.848L 150.384,320.144l-53.312-0.040c-27.256,0-49.44-19.328-49.44-43.2
1330
  l 0.856-105.568c0-23.768, 22.176-43.112, 49.432-43.112l 53.296-0.032l 159.696-126.376c 2.688-1.816, 5.816-2.736, 8.952-2.736
1331
  c 2.576,0, 5.16,0.624, 7.504,1.872c 5.232,2.768, 8.504,8.2, 8.504,14.128L 335.872,432.92 C 335.864,438.832, 332.6,444.264, 327.384,447.048z
1332
  M 303.864,45.184l-138.8,112.264c-2.64,1.784-5.76,2.736-8.944,2.736l-58.192,0.032c-10.272,0-17.44,5.856-17.44,11.232L 79.632,277.024
@@ -1334,7 +1334,7 @@
1334
  c-8.856,1.464-16.968-4.432-18.424-13.152c-1.456-8.712, 4.44-16.96, 13.144-18.416c 25.16-4.2, 42.736-26.152, 42.736-53.376
1335
  c0-25.92-18.184-48.344-43.248-53.344c-8.672-1.72-14.296-10.144-12.56-18.816c 1.512-7.608, 8.184-12.872, 15.672-12.872
1336
  c 1.032,0, 2.096,0.096, 3.144,0.312c 39.984,7.952, 69,43.592, 69,84.72C 464.368,263.752, 435.152,299.472, 394.912,306.184z" />
1337
- <glyph unicode="&#xe0a0;" d="M 287.248,447.048c-5.216,2.776-11.544,2.464-16.456-0.848L 110.248,320.144l-53.312-0.040c-27.256,0-49.44-19.328-49.44-43.2
1338
  l 0.856-105.568c0-23.768, 22.176-43.112, 49.432-43.112l 53.296-0.032l 159.696-126.376c 2.688-1.816, 5.816-2.736, 8.952-2.736
1339
  c 2.576,0, 5.16,0.624, 7.504,1.872c 5.232,2.768, 8.504,8.2, 8.504,14.128L 295.736,432.92 C 295.736,438.832, 292.472,444.264, 287.248,447.048z
1340
  M 263.736,45.184l-138.8,112.264c-2.64,1.784-5.76,2.736-8.944,2.736l-58.192,0.032c-10.272,0-17.44,5.856-17.44,11.232L 39.504,277.024
@@ -1346,7 +1346,7 @@
1346
  c 48.264-18.008, 80.688-64.952, 80.688-116.816c0-51.888-32.424-98.92-80.656-117c-8.28-3.112-12.472-12.328-9.376-20.592
1347
  c 2.408-6.44, 8.504-10.392, 14.984-10.392c 1.872,0, 3.768,0.328, 5.608,1.016c 60.672,22.752, 101.44,81.816, 101.44,146.968
1348
  C 504.504,286.4, 463.704,345.392, 403,368.048z" />
1349
- <glyph unicode="&#xe0a1;" d="M 287.768,447.048c-5.216,2.776-11.544,2.464-16.456-0.848L 110.76,320.144l-53.312-0.040
1350
  c-27.256,0-49.44-19.328-49.44-43.2l 0.856-105.568c0-23.768, 22.176-43.112, 49.432-43.112l 53.296-0.032l 159.696-126.376
1351
  c 2.688-1.816, 5.816-2.736, 8.952-2.736c 2.576,0, 5.16,0.624, 7.504,1.872c 5.232,2.768, 8.504,8.2, 8.504,14.128L 296.248,432.92
1352
  C 296.248,438.832, 292.984,444.264, 287.768,447.048z M 264.248,45.184l-138.8,112.264c-2.64,1.784-5.76,2.736-8.944,2.736l-58.192,0.032
@@ -1354,7 +1354,7 @@
1354
  l 139.664,112L 264.248,45.184 z M 447,223.744l 52.296,52.92c 6.248,6.248, 6.248,16.376,0,22.624c-6.232,6.248-16.376,6.248-22.624,0l-52.168-52.784
1355
  l-52.168,52.784c-6.232,6.248-16.376,6.248-22.624,0s-6.248-16.376,0-22.624l 52.296-52.92l-51.8-52.408c-6.232-6.24-6.248-16.376,0-22.624
1356
  s 16.392-6.248, 22.64,0l 51.656,52.272l 51.656-52.272c 6.248-6.248, 16.376-6.248, 22.624,0s 6.248,16.384,0,22.624L 447,223.744z" />
1357
- <glyph unicode="&#xe001;" d="M 373,62.36L 272.264,118.16c 37.44,29.456, 47.608,87.344, 47.608,119.8l0,67.56 c0,44.736-59.44,94.56-119.144,94.56
1358
  c-59.688,0-120.704-49.832-120.704-94.56l0-67.56 c0-29.512, 12.488-89.216, 50.312-119.544L 27,62.36c0,0-27-12.032-27-27.032l0-40.544
1359
  c0-14.92, 12.112-27.032, 27-27.032l 346,0 c 14.904,0, 27.016,12.112, 27.016,27.032l0,40.544 C 400.016,51.232, 373,62.36, 373,62.36z
1360
  M 368.016-0.248L 32-0.248 l0,28.608 c 2.296,1.672, 5.504,3.608, 8.032,4.768c 0.752,0.344, 1.504,0.704, 2.216,1.112l 103.344,56.048
@@ -1367,7 +1367,7 @@
1367
  c-8.456-6.656-13-17.112-12.112-27.832c 0.904-10.72, 7.128-20.264, 16.56-25.424l 102.232-55.8c 0.888-0.488, 2.016-1.016, 2.952-1.424
1368
  c 2.36-1, 5.264-2.672, 7.392-4.144l0-28.456 l-64.592,0 c 9.752-7.36, 12.704-17.888, 16.488-32l 53.096,0 c 14.904,0, 27.016,12.112, 27.016,27.032l0,40.048
1369
  C 512,130.904, 484.984,142.032, 484.984,142.032z" />
1370
- <glyph unicode="&#x20;" horiz-adv-x="256" />
1371
  </font>
1372
  </defs>
1373
  </svg>
9
  </metadata>
10
  <defs>
11
  <font id="Simple-Line-Icons" horiz-adv-x="512" >
12
+ <font-face units-per-em="512" ascent="480" descent="-32" />
13
+ <missing-glyph horiz-adv-x="512" />
14
+ <glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
15
+ <glyph unicode="&#xe000;" d="M 480.016,78.656l-139.248,66.032c 18.576,9.312, 91.128,12.264, 97.128,28.64c0,0-28.672,44.008-35.672,101.168
16
  c-2.72,22.184-7.376,51.296-12,92.296C 382.72,433.296, 326.784,480, 256.128,480C 256.088,480, 256.040,480, 256,480c-0.048,0-0.096,0-0.128,0
17
  C 185.216,480, 129.28,433.296, 121.784,366.8c-4.624-41-9.28-70.112-12-92.296c-7-57.168-35.672-101.168-35.672-101.168
18
  c 6-16.376, 78.544-19.328, 97.128-28.64L 31.984,78.656c0,0-31.984-11.232-31.984-37.736l0-42.264 C0-19.032, 14.312-32, 31.984-32l 448.032,0
24
  c 1.408-10.088, 2.672-19.2, 3.656-27.296c 3.984-32.512, 14.112-61.256, 23.264-81.816c-7.064-1.408-14.344-2.72-19.672-3.656
25
  c-22.456-3.888-36.784-6.576-47.624-12.016c-10.936-5.488-17.784-16.736-17.656-28.968c 0.144-12.232, 7.232-23.344, 18.296-28.576l 139.248-66.032
26
  c 1-0.488, 1.656-0.784, 2.72-1.16c 4.92-1.872, 10.248-5.968, 10.968-7.672L 480.016,0L 32,0 z" />
27
+ <glyph unicode="&#xe002;" d="M 32.032,32.656c0,12.72, 9.544,16.704, 13.36,18.472l 140.52,66.312
28
  c 10.072,4.624, 17.024,14.16, 18.376,25.16c 1.36,11-3.080,21.92-11.728,28.856c-33.24,26.688-48.728,85.344-48.728,116.592L 143.832,368
29
  c0,33.432, 58.2,79.928, 112.064,79.928c 54.336,0, 111.96-45.768, 111.96-79.928l0-79.96 c0-30.776-12.8-89.656-47.128-116.68
30
  c-8.752-6.888-13.296-17.84-11.984-28.904c 1.312-11.080, 8.296-20.656, 18.424-25.312l 47.96-22.752l 7.904,31.936l-42.504,19.888
32
  c0-34.936, 15.944-105.624, 60.696-141.544L 32.008,80.184c0,0-31.976-14.248-31.976-31.984l0-48.016 c0-17.672, 14.32-31.984, 31.976-31.984l 351.96,0 l0,32
33
  L 32.032,0.184L 32.032,32.656 z M 495.968,64.064l-48,0 l0,48 c0,8.84-7.168,16-16,16s-16-7.16-16-16l0-48 l-48,0 c-8.832,0-16-7.16-16-16c0-8.832, 7.168-16, 16-16l 48,0 l0-48
34
  c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,48 l 48,0 c 8.832,0, 16,7.168, 16,16C 511.968,56.904, 504.808,64.064, 495.968,64.064z" />
35
+ <glyph unicode="&#xe003;" d="M 31.752,0.12l0,32.472 c0,12.72, 9.552,16.712, 13.36,18.472l 140.52,66.312
36
  c 10.072,4.624, 17.024,14.16, 18.376,25.16c 1.36,11-3.080,21.92-11.728,28.856c-33.24,26.688-48.728,85.352-48.728,116.592l0,79.96
37
  c0,33.432, 58.2,79.928, 112.064,79.928c 54.336,0, 111.968-45.768, 111.968-79.928l0-79.96 c0-30.776-12.8-89.656-47.128-116.688
38
  c-8.752-6.888-13.296-17.84-11.984-28.904c 1.312-11.080, 8.296-20.656, 18.424-25.312l 81.12-38.624l 19.072,27.032l-86.832,40.672
41
  l-26,31.992L 31.752,0.12z M 506.104,118.248c-6.952,5.456-17.016,4.216-22.456-2.736l-68.424-104.352l-42.528,42.536
42
  c-6.248,6.248-16.384,6.248-22.632,0s-6.248-16.376,0-22.624l 56.568-56.568c 6.248-6.248, 16.376-6.248, 22.624,0
43
  c 1.52,1.512, 2.656,3.272, 3.44,5.144l 76.152,116.152C 514.288,102.752, 513.064,112.808, 506.104,118.248z" />
44
+ <glyph unicode="&#xe004;" d="M 399.56,288.072l0,79.96 c0,52.96-73.304,111.928-143.952,111.928c-70.656,0-144.064-58.968-144.064-111.928l0-79.96
45
  c0-34.936, 15.944-105.616, 60.696-141.536L 31.72,80.216c0,0-31.976-14.248-31.976-31.984l0-48.016 c0-17.672, 14.32-31.984, 31.976-31.984l 303.968,0 l0,32
46
  L 31.744,0.216l0,32.472 c0,12.72, 9.552,16.712, 13.36,18.472l 140.52,66.312c 10.072,4.624, 17.024,14.168, 18.376,25.168
47
  c 1.36,11-3.080,21.912-11.728,28.848c-33.24,26.688-48.728,85.344-48.728,116.6l0,79.96 c0,33.432, 58.2,79.928, 112.064,79.928
51
  c-6.248,6.24-16.384,6.24-22.624,0c-6.248-6.248-6.248-16.392,0-22.624l 45.248-45.256l-45.248-45.248c-6.248-6.24-6.248-16.384,0-22.632
52
  c 6.24-6.232, 16.376-6.232, 22.624,0l 45.248,45.256l 45.256-45.256c 6.24-6.232, 16.376-6.232, 22.616,0c 6.248,6.248, 6.248,16.392,0,22.632
53
  L 462.312,40.6z" />
54
+ <glyph unicode="&#xe006;" d="M 367.904,16.064L 142.936,16.064 c-8.84,0-16-7.16-16-16s 7.16-16, 16-16l 224.968,0 c 8.84,0, 16,7.16, 16,16S 376.752,16.064, 367.904,16.064z
55
  M 508.656,419.184c-1.512,7.44-8.080,12.784-15.672,12.784l-78.312,0 L 414.672,447.936 c0,8.84-7.16,16-16,16L 110.904,463.936 c-8.84,0-16-7.16-16-16l0-15.968 L 19.016,431.968
56
  c-7.592,0-14.16-5.344-15.672-12.784c-0.472-2.312-11.2-58.376, 19.952-96.576c 17.92-21.96, 45.304-33.464, 81.248-34.488
57
  C 125.040,227.544, 176.576,182.688, 238.64,176l0-111.456 l-47.888,0 c-8.84,0-16-7.16-16-16s 7.16-16, 16-16l 129.344,0 c 8.84,0, 16,7.16, 16,16s-7.16,16-16,16
60
  c0-8.648, 0.8-17.080, 1.968-25.384C 75.032,322.608, 58.648,329.984, 48.2,342.72z M 382.672,345.952c0-76.544-57.36-138.832-127.856-138.832
61
  c-70.528,0-127.904,62.28-127.904,138.832L 126.912,431.936 l 255.768,0 L 382.68,345.952 z M 463.8,342.72c-10.84-13.216-28.016-20.744-51.136-22.432
62
  c 1.192,8.392, 2.008,16.92, 2.008,25.664l0,54.016 l 64,0 C 479.392,385.408, 477.968,359.968, 463.8,342.72z" />
63
+ <glyph unicode="&#xe010;" d="M 352.072,480L 159.928,480 c-26.512,0-48-21.488-48-48l0-416 c0-26.512, 21.488-48, 48-48l 192.144,0
64
  c 26.512,0, 48,21.488, 48,48L 400.072,432 C 400.072,458.512, 378.584,480, 352.072,480z M 368.072,16c0-8.832-7.168-16-16-16L 159.928,0 c-8.832,0-16,7.168-16,16L 143.928,432
65
  c0,8.832, 7.168,16, 16,16l 192.144,0 c 8.832,0, 16-7.168, 16-16L 368.072,16 z M 256.024,79.912c-17.64,0-31.92-14.296-31.92-31.912s 14.288-31.92, 31.92-31.92
66
  c 17.64,0, 31.92,14.304, 31.92,31.92S 273.664,79.912, 256.024,79.912z M 288.024,432l-64,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 64,0
67
  c 8.832,0, 16,7.168, 16,16S 296.856,432, 288.024,432z" />
68
+ <glyph unicode="&#xe011;" d="M 480,432.096L 32,432.096 c-17.592,0-32-14.4-32-32L0,128 c0-17.592, 14.408-31.992, 32-31.992l 208,0 l0-48.104 L 160,47.904
69
  c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 192,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 272,47.904 l0,48.104 l 208,0 c 17.592,0, 32,14.4, 32,31.992L 512,400.096
70
  C 512,417.696, 497.592,432.096, 480,432.096z M 480,128L 32,128 L 32,400.096 l 448,0 L 480,128 z" />
71
+ <glyph unicode="&#xe012;" d="M 467.16,447.048L 467.16,447.048c 5.216,0, 8.888-0.968, 10.8-1.704c 2.296-6.112, 5.376-28.016-17.264-50.672L 355.36,289.344l-10.16-10.16
72
  l 0.832-14.328c 1.752-29.984, 5-83.72, 7.8-129.784c 2.472-41, 4.816-79.72, 4.968-83.016c 0.080-2.264, 0.112-2.8-2-5.344
73
  c-4.72-5.736-13.528-15.456-20.952-23.512c-11.512,31.016-35.704,96.528-49.064,133.2l-17.168,47.184l-35.512-35.512L 168.8,105.28l-9.096-9.080
74
  l-0.28-12.84c-0.216-10.248-0.168-28.64-0.144-44.856c 0.032-11.296, 0.064-21.56-0.016-27.216c-0.144-0.264, 2.184-0.576, 1.968-0.952
88
  c 0.688-0.080, 1.392-0.112, 2.080-0.112c 6.312,0, 12.856,2.968, 18.216,8.328c0,0, 23.128,24.544, 32.952,36.488
89
  c 9.84,11.936, 9.456,22.128, 9.264,26.936c-0.080,3.328-9.344,154.408-12.784,213.408l 105.328,105.328c 37.328,37.344, 31.392,82.344, 17.528,96.184
90
  C 494.688,474.392, 482.296,479.048, 467.16,479.048L 467.16,479.048z" />
91
+ <glyph unicode="&#xe013;" d="M 424.576,480L 105.576,480 C 82.576,480, 72.56,463, 72.56,447l0-63.656 L 55.096,383.344 c-8.656,0-15.672-7.016-15.672-15.672S 46.44,352, 55.096,352L 72.56,352
92
  l0-64.376 L 56.592,287.624 c-8.656,0-15.672-7.016-15.672-15.672s 7.016-15.672, 15.672-15.672L 72.56,256.28 l0-64.72 L 56.248,191.56 c-8.656,0-15.672-7.016-15.672-15.672
93
  s 7.016-15.672, 15.672-15.672L 72.56,160.216 l0-64.232 L 56.248,95.984 c-8.656,0-15.672-7.016-15.672-15.672s 7.016-15.672, 15.672-15.672L 72.56,64.64 L 72.56,0
94
  c0-26.512, 20.768-32, 32.264-32l 319.752,0 c 26.512,0, 48,21.488, 48,48L 472.576,432 C 472.576,458.512, 451.096,480, 424.576,480z M 104.56,0l0,64.64 l 16.672,0
96
  s-7.016,15.672-15.672,15.672L 104.56,191.56 l0,64.72 l 17.016,0 c 8.656,0, 15.672,7.016, 15.672,15.672s-7.016,15.672-15.672,15.672L 104.56,287.624 L 104.56,352 l 15.512,0
97
  c 8.656,0, 15.672,7.016, 15.672,15.672s-7.016,15.672-15.672,15.672L 104.56,383.344 L 104.56,447 c0,0.376, 0.032,0.688, 0.080,0.968
98
  C 104.888,447.984, 105.2,448, 105.576,448l 255,0 l0-448 L 104.56,0 z M 440.576,16c0-8.832-7.168-16-16-16l-32,0 L 392.576,448 l 32,0 c 8.832,0, 16-7.168, 16-16L 440.576,16 z" />
99
+ <glyph unicode="&#xe014;" d="M 396.424,111.64c-50.672,0-79.432,23.816-98.472,39.576c-6.736,5.576-12.864,10.952-18.44,15.832
100
  c-8.456,7.424-19,16.672-22.672,17.952c-0.112,0-1.856,0.080-1.968,0.096c-0.584-0.048-2.072-0.344-2.224-0.36
101
  c-2.536-1.032-11.544-8.784-18.784-15c-6.568-5.64-14.056-12.080-22.52-18.688l-1.544-1.184c-21.736-16.968-48.792-38.080-96.576-38.080
102
  c-35.496,0-70.464,16.064-91.288,41.936c-13.96,17.344-28.648,47.512-19.336,92.736c 1.128,5.472, 5.008,9.952, 10.216,11.816
114
  c-13.696-6.096-27.552-9.184-41.152-9.184c-10.2,0-19.032,1.704-26.312,4.016c-0.016-17.36, 5.056-32.456, 15.168-45.016
115
  c 14.968-18.576, 40.52-30.128, 66.72-30.128c 37,0, 57.448,15.968, 77.232,31.408L 192,176.392c 8.024,6.264, 15.12,12.376, 21.344,17.72
116
  c 14.256,12.248, 23.664,20.344, 33.824,22.144l0,0C 247.176,216.248, 252.016,217.064, 255.368,217.064z" />
117
+ <glyph unicode="&#xe015;" d="M 256.792,480c-79.064,0-144.752-64.112-144.752-143.168l0-225.656
118
  C 112.040,32.112, 177.728-32, 256.792-32s 143.176,64.112, 143.176,143.168L 399.968,336.832 C 399.968,415.888, 335.856,480, 256.792,480z M 367.968,111.168
119
  C 367.968,49.872, 318.096,0, 256.792,0s-112.752,49.872-112.752,111.168L 144.040,336.832 C 144.040,398.128, 195.496,448, 256.792,448
120
  s 111.176-49.872, 111.176-111.168L 367.968,111.168 z M 256.168,384c-8.832,0-16-7.168-16-16l0-80 c0-8.832, 7.168-16, 16-16c 8.832,0, 16,7.168, 16,16L 272.168,368
121
  C 272.168,376.832, 265,384, 256.168,384z" />
122
+ <glyph unicode="&#xe016;" d="M 480.144,449.912L 480.144,464.416 c0,8.84-7.16,16-16,16L 351.832,480.416 c-8.84,0-16-7.16-16-16l0-65.328
123
  c0-0.024, 0.016-0.048, 0.016-0.072l0-198.76 c0-48.16-27.168-87.328-75.328-87.328s-84.328,39.168-84.328,87.328L 176.192,449.912 l-0.048,0 L 176.144,464.416
124
  c0,8.84-7.16,16-16,16L 47.832,480.416 c-8.84,0-16-7.16-16-16l0-65.328 c0-0.328, 0.168-0.6, 0.184-0.92l0-205.248
125
  c0-124.456, 99.392-225.328, 223.832-225.328s 224.328,100.872, 224.328,225.328L 480.176,449.912 L 480.144,449.912 z M 448.144,448.416l0-64.168 L 368.016,384.248 L 368.016,448.416 L 448.144,448.416 z
126
  M 144.144,448.416l0-64.168 L 64.016,384.248 L 64.016,448.416 L 144.144,448.416 z M 255.84-0.416c-106.608,0-191.832,86.736-191.832,193.328L 64.008,352.248 l 80.168,0 l0-151.992
127
  c0-65.904, 50.424-119.328, 116.328-119.328S 367.84,134.352, 367.84,200.256L 367.84,352.248 l 80.328,0 l0-159.336 C 448.168,86.32, 362.456-0.416, 255.84-0.416z" />
128
+ <glyph unicode="&#xe020;" d="M 297.672,447.64l 0.088,0 M 297.672,447.64l-36.104-189.688l 130.792-0.44L 214.328,0.36l 36.104,208.688l-130.784,0.456L 297.672,447.64
129
  M 297.696,479.64c-0.864,0-1.728-0.032-2.576-0.096c-5.648-0.456-9.392-2.344-13.832-5.328c-2.464-1.64-4.72-3.64-6.696-5.968
130
  c-0.584-0.688-1.136-1.408-1.648-2.144L 93.64,228.8c-7.080-9.704-8.12-22.512-2.68-33.216c 5.432-10.704, 16.416-17.488, 28.456-17.576
131
  l 92.368-0.672l-29.040-171.096c-2.76-14.704, 5.080-29.36, 18.88-35.264c 4.112-1.768, 8.432-2.608, 12.696-2.608c 10.056,0, 18.32,4.704, 24.52,13.2
132
  L 418.368,238.72c 7.080,9.704, 8.112,22.528, 2.68,33.216c-5.432,10.704-16.416,17.488-28.456,17.576l-92.368,0.16l 28.728,150.44
133
  c 0.6,2.424, 0.912,4.936, 0.912,7.528c0,17.312-13.784,31.424-31.032,31.984C 298.448,479.64, 298.072,479.64, 297.696,479.64L 297.696,479.64z" />
134
+ <glyph unicode="&#xe021;" d="M 390.632,176.424c-8.128,3.64-17.544-0.032-21.128-8.096c-0.328-0.712-33.064-72.104-114.72-73.064
135
  c-0.504,0-1-0.016-1.504-0.016c-76.832,0-109.968,70.184-111.344,73.2c-3.656,8-13.096,11.56-21.16,7.936
136
  c-8.048-3.64-11.624-13.104-7.984-21.168c 1.704-3.784, 42.688-91.968, 140.424-91.968c 0.64,0, 1.296,0.016, 1.936,0.016
137
  c 101.936,1.2, 141.92,88.328, 143.56,92.032C 402.336,163.376, 398.696,172.832, 390.632,176.424z M 256,480C 114.608,480,0,365.392,0,224
139
  M 175.752,240.088c 17.632,0, 31.92,14.296, 31.92,31.912s-14.288,31.912-31.92,31.912c-17.64,0-31.92-14.296-31.92-31.912
140
  S 158.112,240.088, 175.752,240.088z M 335.752,240.088c 17.632,0, 31.92,14.296, 31.92,31.912s-14.288,31.912-31.92,31.912
141
  c-17.64,0-31.92-14.296-31.92-31.912S 318.112,240.088, 335.752,240.088z" />
142
+ <glyph unicode="&#xe022;" d="M 256,480C 114.608,480,0,365.392,0,224s 114.608-256, 256-256s 256,114.608, 256,256S 397.392,480, 256,480z M 480,224c0-33.16-7.296-64.632-20.28-92.968
143
  l-141.608,75.776c 1.512,5.488, 2.392,11.232, 2.392,17.192c0,35.624-28.872,64.504-64.504,64.504c-7.312,0-14.312-1.272-20.856-3.512
144
  L 150.336,421.448C 181.832,438.368, 217.808,448, 256,448C 379.512,448, 480,347.512, 480,224z M 256,256.496c 17.92,0, 32.504-14.576, 32.504-32.504
145
  S 273.92,191.496, 256,191.496S 223.504,206.080, 223.504,224S 238.080,256.496, 256,256.496z M 123.288,404.312l 85.088-136.92
147
  c0,31.84, 6.72,62.128, 18.752,89.584l 142.184-76.080c-0.928-4.36-1.44-8.864-1.44-13.504c0-35.624, 28.872-64.504, 64.504-64.504
148
  c 6.2,0, 12.176,0.92, 17.848,2.552l 85.096-136.896C 328.104,9.128, 293.112,0, 256,0C 132.488,0, 32,100.488, 32,224z M 386.224,41.92
149
  L 301.472,178.264c 0.248,0.248, 0.48,0.512, 0.728,0.768l 142.144-76.072C 428.968,79.144, 409.224,58.416, 386.224,41.92z" />
150
+ <glyph unicode="&#xe023;" d="M 508.2,231.68l-4.24,4.040c-0.080,0.080-0.168,0.112-0.264,0.184l-64.872,59.216
151
  c-4.672,4.472-12.224,4.472-16.912,0l-2.744-4.032c-4.672-4.472-3.152-11.704, 1.52-16.168l 38.232-34.672L 273.248,240.248 L 273.248,426.92 l 34.672-38.232
152
  c 4.472-4.672, 11.704-6.192, 16.168-1.512l 4.032,2.736c 4.472,4.688, 4.472,12.24,0,16.92l-56.584,61.984
153
  c-1.376,2.776-3.504,5.072-6.16,6.648l-0.712,0.744c-2.216,2.336-5.168,3.504-8.112,3.488c-2.952,0.016-5.888-1.152-8.144-3.488
162
  c-4.472,4.672-11.704,3.152-16.168-1.52l-34.672-38.232L 273.256,208.248 L 460.24,208.248 l-38.552-34.576c-4.672-4.472-6.184-11.72-1.512-16.184l 2.736-4.032
163
  c 4.688-4.464, 12.248-4.464, 16.912,0l 63.872,57.752c 0.088,0.088, 0.184,0.096, 0.264,0.168l 4.24,4.048
164
  c 2.336,2.248, 3.504,5.184, 3.488,8.144C 511.704,226.496, 510.536,229.456, 508.2,231.68z" />
165
+ <glyph unicode="&#xe024;" d="M 496,80l-64,0 L 432,376.952 l 59.728,59.648c 6.24,6.248, 6.24,16.384,0,22.632c-6.248,6.248-16.384,6.248-22.632,0L 409.792,400L 112,400 L 112,464
166
  c0,8.84-7.16,16-16,16s-16-7.16-16-16l0-64 L 16,400 c-8.84,0-16-7.16-16-16c0-8.832, 7.16-16, 16-16l 64,0 l0-304 c0-1.472, 0.472-2.8, 0.84-4.144
167
  c 0.16-0.608, 0.128-1.232, 0.36-1.816c 1.608-4.032, 4.8-7.216, 8.832-8.84c 0.688-0.28, 1.44-0.248, 2.144-0.424
168
  C 93.44,48.456, 94.64,48, 96,48l 304,0 l0-64 c0-8.84, 7.16-16, 16-16s 16,7.16, 16,16l0,64 l 64,0 c 8.84,0, 16,7.16, 16,16S 504.84,80, 496,80z M 377.744,368
169
  L 112,102.608L 112,368 L 377.744,368 z M 134.64,80L 400,344.992L 400,80 L 134.64,80 z" />
170
+ <glyph unicode="&#xe025;" d="M 464.072,392L 47.928,392 c-26.512,0-48-21.488-48-48l0-240 c0-26.512, 21.488-48, 48-48l 416.144,0
171
  c 26.512,0, 48,21.488, 48,48L 512.072,344 C 512.072,370.512, 490.584,392, 464.072,392z M 47.928,360l 416.144,0 c 8.832,0, 16-7.168, 16-16l0-32 L 31.928,312 l0,32
172
  C 31.928,352.832, 39.104,360, 47.928,360z M 464.072,88L 47.928,88 c-8.832,0-16,7.168-16,16L 31.928,248 l 448.144,0 l0-144 C 480.072,95.168, 472.896,88, 464.072,88z" />
173
+ <glyph unicode="&#xe026;" d="M 405.208-5.36l-85.2,100.832L 320.008,272.224 l 10.656,0 c 8.84,0, 16,7.16, 16,16s-7.16,16-16,16l-26.656,0 c-8.84,0-16-7.16-16-16l0-198.912
174
  c0-3.968, 1.472-7.784, 4.128-10.72l 65.184-78.672l-202.64,0 l 65.184,78.672c 2.656,2.936, 4.128,6.752, 4.128,10.72L 223.992,288.224 c0,8.84-7.16,16-16,16
175
  l-26.656,0 c-8.84,0-16-7.16-16-16s 7.16-16, 16-16l 10.656,0 l0-176.752 L 106.792-5.36c-4.232-4.688-5.312-11.44-2.752-17.216
176
  c 2.576-5.784, 8.296-9.504, 14.624-9.504l 274.672,0 c 6.328,0, 12.048,3.72, 14.624,9.504C 410.52-16.8, 409.448-10.048, 405.208-5.36z M 240,320.16
178
  C 208.080,334.456, 222.36,320.16, 240,320.16z M 344.24,367.656c 31.184,0, 56.464,25.168, 56.464,56.208s-25.272,56.208-56.464,56.208
179
  c-31.176,0-56.464-25.168-56.464-56.208S 313.064,367.656, 344.24,367.656z M 343.992,448.168c 13.328,0, 24.168-10.792, 24.168-24.064
180
  c0-13.264-10.84-24.064-24.168-24.064s-24.168,10.8-24.168,24.064C 319.832,437.376, 330.664,448.168, 343.992,448.168z" />
181
+ <glyph unicode="&#xe005;" d="M 255.864,448c 54.336,0, 111.96-45.768, 111.96-79.928l0-79.96 c0-30.776-12.8-89.656-47.128-116.688c-8.752-6.888-13.296-17.84-11.984-28.904
182
  c 1.312-11.080, 8.296-20.656, 18.424-25.312l 139.248-66.032c 1.088-0.496, 13.344-2.552, 13.344-19.672l 0.016-31.232L 32,0.248L 32,32.72
183
  c0,12.72, 9.544,16.712, 13.36,18.472l 140.512,66.312c 10.080,4.624, 17.032,14.16, 18.384,25.16c 1.36,11-3.080,21.92-11.728,28.856
184
  c-33.24,26.688-48.728,85.352-48.728,116.592l0,79.96 C 143.808,401.496, 202.008,448, 255.864,448 M 255.864,480c-70.656,0-144.064-58.968-144.064-111.928
185
  l0-79.96 c0-34.936, 15.944-105.624, 60.696-141.544L 31.976,80.248c0,0-31.976-14.248-31.976-31.984l0-48.016 c0-17.672, 14.32-31.984, 31.976-31.984l 447.776,0
186
  c 17.672,0, 31.984,14.312, 31.984,31.984l0,48.016 c0,18.8-31.984,31.984-31.984,31.984l-139.248,66.032c 44.328,34.888, 59.328,103.424, 59.328,141.832
187
  l0,79.96 C 399.832,421.032, 326.512,480, 255.864,480L 255.864,480z" />
188
+ <glyph unicode="&#xe007;" d="M 255.992,461.936C 115.008,461.936, 0.32,347.232, 0.32,206.248
189
  c0-88.576, 44.84-169.592, 119.952-216.704c 7.472-4.736, 17.344-2.44, 22.048,5.048s 2.44,17.36-5.048,22.048
190
  c-27.048,16.976-49.52,39.024-66.712,64.44l 16.776,9.688c 7.656,4.424, 10.28,14.2, 5.856,21.856c-4.44,7.672-14.232,10.28-21.856,5.856
191
  l-16.8-9.696c-12.2,25.256-19.648,52.896-21.64,81.712l 17.808,0 c 8.84,0, 16,7.16, 16,16s-7.16,16-16,16L 32.976,222.496
202
  M 374.056,256.136c 7.648,4.424, 10.272,14.2, 5.856,21.856c-4.416,7.648-14.208,10.272-21.856,5.848l-86.912-50.176
203
  c-4.64,2.624-9.928,4.248-15.64,4.248c-17.64,0-31.92-14.296-31.92-31.904c0-17.624, 14.288-31.92, 31.92-31.92c 17.64,0, 31.92,14.296, 31.92,31.92
204
  c0,0.032-0.008,0.072-0.008,0.104L 374.056,256.136z" />
205
+ <glyph unicode="&#xe008;" d="M 470.368,385.152c-13.872,9.984-52.528,23.248-214.504,23.248c-173.576,0-199.328-15.232-207.592-20.216
206
  c-43.984-26.424-48.16-143.408-48.544-167.128c 0.528-31.328, 5.592-135.56, 48.512-161.344c 8.248-4.968, 33.856-20.112, 207.624-20.112
207
  c 162.080,0, 200.688,13.2, 214.504,23.144c 37.488,26.968, 41.8,119.84, 41.904,158.72C 512.176,252.728, 508.896,357.4, 470.368,385.152z
208
  M 451.68,88.712c-5.576-4.016-37.592-17.112-195.816-17.112c-152.968,0-185.064,11.872-191.128,15.528c-15.44,9.264-31.736,58.44-33.016,134.016
211
  c-4.952,2.984-11.112,3.064-16.128,0.232c-5.032-2.84-8.144-8.168-8.144-13.936l0-176.72 c0-5.768, 3.112-11.096, 8.144-13.936
212
  c 2.44-1.376, 5.16-2.064, 7.856-2.064c 2.856,0, 5.736,0.768, 8.264,2.296l 143.968,88.376c 4.8,2.904, 7.736,8.096, 7.736,13.704
213
  S 365.008,233.696, 360.208,236.584z M 223.976,162.848L 223.976,282.896 l 97-60.016L 223.976,162.848z" />
214
+ <glyph unicode="&#xe009;" d="M 342.2,400.656c 26.44,0, 50.312-10.816, 67.128-28.184c 20.92,4.048, 40.64,11.424, 58.36,21.64c-6.856-20.816-21.44-38.28-40.408-49.328
215
  c 18.56,2.184, 36.328,6.952, 52.816,14.080c-12.36-17.872-27.92-33.608-45.888-46.184c 0.168-3.816, 0.264-7.672, 0.264-11.512
216
  c0-117.864-92.504-253.808-261.656-253.808c-51.92,0-100.28,14.816-140.952,40.112c 7.184-0.84, 14.504-1.264, 21.92-1.264
217
  c 43.080,0, 82.752,14.248, 114.232,38.2c-40.264,0.688-74.248,26.504-85.904,61.92c 5.608-1.048, 11.376-1.608, 17.312-1.608
227
  c 182.016,0, 291.504,142.488, 293.632,281.672c 14.896,12.328, 28.064,26.592, 39.224,42.576c 4.064,5.344, 6.48,12.016, 6.48,19.248
228
  c0,10.888-5.448,20.512-13.744,26.296c 3.592,12.312-0.504,25.64-10.504,33.784c-5.84,4.752-13,7.168-20.2,7.168
229
  c-5.504,0-11.016-1.408-15.984-4.28c-10.576-6.096-21.888-10.92-33.8-14.392C 396.36,423.624, 369.64,432.656, 342.2,432.656L 342.2,432.656z" />
230
+ <glyph unicode="&#xe00a;" d="M 264.008,448.128l0-111.936 l 112.16,0 l0-47.984 L 264.504,288.208 l-0.16-139.264c0-25.888, 1.344-42.504, 4.080-49.872c 4.264-11.624, 19.784-26.504, 48.592-26.504
231
  c 22.344,0, 52.488,6.72, 75.080,23.624l0-74.656 c-18.84-8.984-36.36-12.608-51.624-16.232c-15.28-3.608-31.832-5.424-49.576-5.424
232
  c-19.768,0-76.832,0.544-100.248,60.2c-4.216,10.736-6.328,26.328-6.328,46.736L 184.32,288.128 l-64.424,0 l 0.312,49.064
233
  c 21.328,0, 85.312,12.952, 85.312,110.936L 264.008,448.128 M 264.008,480.128L 205.52,480.128 c-17.672,0-32-14.328-32-32c0-73.248-40.816-78.936-53.312-78.936
237
  c-4.528,2.28-9.44,3.392-14.328,3.392c-6.784,0-13.528-2.16-19.168-6.376c-19.048-14.264-43.424-17.248-55.904-17.248
238
  c-12.8,0-17.56,4.64-18.608,5.872c-0.544,2.512-2.064,11.888-2.064,38.504l 0.112,107.264l 79.704,0 c 17.672,0, 32,14.328, 32,32l0,47.984
239
  c0,17.672-14.328,32-32,32l-80.16,0 L 296.008,448.128 C 296.008,465.8, 281.68,480.128, 264.008,480.128L 264.008,480.128z" />
240
+ <glyph unicode="&#xe00b;" d="M 290.88,439.752c 1.904,0, 3-0.080, 3-0.080l 41.784,0 l-0.216-48l-41.504,0 c-22.84,0-22.312-19.504-22.312-19.504l0-76.096 l 80.816,0
241
  l-11.28-47.936l-69.8,0 l0-239.888 l-47.952,0 l-0.032,239.888L 159.68,248.136 l-0.128,47.936l 63.856,0 c0,0,0,58.688,0,74.592
242
  C 223.416,435.704, 277.432,439.752, 290.88,439.752 M 335.664,439.672l 0.080,0 M 290.88,471.752L 290.88,471.752c-11.504,0-33.984-1.904-55.28-14.736
243
  c-20.16-12.128-44.184-36.968-44.184-86.344l0-42.592 l-31.856,0 c-8.504,0-16.656-3.392-22.672-9.408c-6-6.032-9.36-14.184-9.328-22.704
245
  c 14.2,0, 26.704,9.36, 30.704,22.984l 11.28,47.936c 2.84,9.672, 0.952,20.128-5.096,28.184c-6.032,8.080-15.528,12.832-25.608,12.832l-48.816,0
246
  l0,31.576 l 31.816,0.016c 17.608,0, 31.92,14.232, 32,31.856l 0.216,46.376c 0.032,0.592, 0.048,1.168, 0.048,1.768c0,17.672-14.296,32-31.968,32l-0.080,0
247
  l-40.888,0 C 293.864,471.72, 292.536,471.752, 290.88,471.752L 290.88,471.752z" />
248
+ <glyph unicode="&#xe00c;" d="M 511.712,367.624c-0.36,5.112-3.144,9.736-7.488,12.456L 361.632,469.064c-5.8,3.608-13.216,3.16-18.528-1.144l-87.112-70.472
249
  L 168.896,467.92c-5.296,4.28-12.768,4.768-18.528,1.144L 7.776,380.080c-4.344-2.72-7.128-7.344-7.488-12.456
250
  c-0.376-5.112, 1.736-10.080, 5.656-13.376l 82.608-69.408l-70.768-55.592c-4.048-3.16-6.312-8.088-6.112-13.208
251
  c 0.2-5.12, 2.84-9.832, 7.112-12.68l 65.488-43.656c-3.216-2.92-5.272-7.104-5.272-11.8l0-64.168 c0-5.56, 2.888-10.72, 7.624-13.64
257
  L 111.008,141.888 z M 399.104,92.672l-128.128-72.84L 270.976,163.72 l 66.328-50.984c 2.856-2.2, 6.312-3.312, 9.752-3.312c 3.096,0, 6.184,0.888, 8.872,2.688
258
  l 43.168,28.784L 399.096,92.672 z M 456.728,217.76l-109.016-72.664l-63.72,48.968l 113,70.816L 456.728,217.76z M 396.832,304.296l-113.672,73.984
259
  l 71.2,57.592l 114.232-71.296L 396.832,304.296z" />
260
+ <glyph unicode="&#xe00d;" d="M 255.992,479.864c-34.928,0-68.232-7.056-98.592-19.784c-1.056-0.336-2.088-0.776-3.072-1.336
261
  C 63.696,419.336, 0.136,328.968, 0.136,223.992c0-141.080, 114.784-255.856, 255.856-255.856c 141.096,0, 255.872,114.784, 255.872,255.856
262
  C 511.864,365.088, 397.088,479.864, 255.992,479.864z M 479.864,223.992c0-1.792-0.096-3.56-0.136-5.336
263
  c-24.512,6.504-86.696,18.72-163.4,1.872c-6.76,15.448-14.256,31.288-22.64,47.408c-0.704,1.352-1.392,2.64-2.088,3.976
271
  c 13.984,6.336, 27.76,11.392, 41.192,15.456c 30.368-77.16, 40.904-140.784, 44.088-165.296c-26.376-10.952-55.264-17.032-85.56-17.032
272
  C 203.984,0.136, 156.096,18.016, 118.048,47.88z M 371.808,32.48c-4.616,30.8-16.072,88.696-42.984,157.832
273
  c 74.224,14.776, 132.976,0.28, 147.808-4.040C 465.52,121.168, 426.264,65.528, 371.808,32.48z" />
274
+ <glyph unicode="&#xe00e;" d="M 453.976,407.76c-5.936,5.544-13.752,8.608-21.832,8.608
275
  c-0.736,0-1.472-0.032-2.2-0.080c-0.456-0.032-5.592-0.344-13.64-0.344c-13.328,0-39.344,0.904-63.984,6.968
276
  c-31.832,7.816-68.56,44.080-79.248,51.232c-5.376,3.592-11.576,5.392-17.784,5.392c-6.184,0-12.392-1.8-17.768-5.376
277
  c-1.296-0.872-39.752-42.016-77.376-51.248c-24.624-6.064-51.144-6.968-64.456-6.968c-8.048,0-13.184,0.312-13.688,0.344
284
  c-6.248,6.248-16.384,6.248-22.624,0l-45.256-45.256l-45.256,45.256c-6.248,6.248-16.384,6.248-22.632,0s-6.248-16.384,0-22.624l 45.256-45.256
285
  l-45.256-45.256c-6.248-6.24-6.248-16.376,0-22.624s 16.384-6.248, 22.632,0l 45.256,45.256l 45.256-45.256c 6.24-6.248, 16.376-6.248, 22.624,0
286
  s 6.248,16.384,0,22.624l-45.256,45.256l 45.256,45.256C 330.048,290.496, 330.048,300.632, 323.8,306.88z" />
287
+ <glyph unicode="&#xe00f;" d="M 416.072,480L 95.928,480 c-26.512,0-48-21.488-48-48l0-416 c0-26.512, 21.488-48, 48-48l 320.144,0
288
  c 26.512,0, 48,21.488, 48,48L 464.072,432 C 464.072,458.512, 442.584,480, 416.072,480z M 432.072,16c0-8.832-7.168-16-16-16L 95.928,0 c-8.832,0-16,7.168-16,16L 79.928,432
289
  c0,8.832, 7.168,16, 16,16l 320.144,0 c 8.832,0, 16-7.168, 16-16L 432.072,16 z M 256.024,79.912c-17.64,0-31.92-14.296-31.92-31.912s 14.28-31.92, 31.92-31.92
290
  c 17.632,0, 31.92,14.304, 31.92,31.92S 273.656,79.912, 256.024,79.912z M 288.024,432l-64,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 64,0
291
  c 8.832,0, 16,7.168, 16,16S 296.856,432, 288.024,432z" />
292
+ <glyph unicode="&#xe017;" d="M 510.256,265.312l-51.392,76.84l 25.576,89.408c 1.592,5.608, 0.032,11.64-4.112,15.752c-4.128,4.128-10.128,5.656-15.768,4.016
293
  L 375.304,425.264l-77.144,51.952c-4.856,3.264-11.080,3.656-16.232,0.968c-5.184-2.656-8.512-7.936-8.704-13.752l-2.768-92.968
294
  l-73.248-57.296c-4.592-3.592-6.856-9.408-5.936-15.16s 4.904-10.544, 10.408-12.512l 68.728-24.64c-0.464-0.368-0.952-0.696-1.384-1.128
295
  L 3.648-4.648c-6.248-6.248-6.248-16.376,0-22.624c 3.128-3.128, 7.216-4.688, 11.312-4.688s 8.184,1.56, 11.312,4.688l 265.376,265.376
299
  c-1.624,4.472-5.16,7.968-9.64,9.576l-67.296,24.128l 56.312,44.032c 3.752,2.936, 5.984,7.376, 6.144,12.128l 2.128,71.472l 59.296-39.936
300
  c 3.952-2.656, 8.888-3.408, 13.424-2.096l 68.624,20.048l-19.672-68.736c-1.296-4.576-0.504-9.488, 2.168-13.424l 40.28-59.064L 397.024,268.728z
301
  " />
302
+ <glyph unicode="&#xe018;" d="M 416.528,447.696l-32.232,0 l0-107.704 c0-52.192-28.328-91.68-89.048-122.6
303
  C 358.28,185.488, 384.8,146.312, 384.8,87.856c0-38.064-0.168-70-0.296-87.56l 32.032,0 c 8.84,0, 16-7.144, 16-15.984s-7.16-16-16-16L 95.472-31.688
304
  c-8.84,0-16,7.16-16,16s 7.16,15.984, 16,15.984l 32.968,0 c-0.12,17.56-0.296,49.504-0.296,87.56c0,58.456, 26.144,97.624, 89.072,129.528
305
  c-60.616,30.92-88.568,70.408-88.568,122.6L 128.648,447.696 l-33.176,0 c-8.84,0-16,7.152-16,16c0,8.832, 7.16,15.992, 16,15.992l 321.064,0
306
  c 8.84,0, 16-7.16, 16-15.992C 432.528,454.848, 425.376,447.696, 416.528,447.696z M 160.136,87.856c0-38.144, 0.176-70.112, 0.296-87.56l 192.088,0
307
  c 0.112,17.456, 0.296,49.424, 0.296,87.56c0,44.504-16.56,79.016-96.592,112.2C 176.216,166.872, 160.136,132.36, 160.136,87.856z M 352.312,447.696
308
  l-191.68,0 l0-107.704 c0-30.688, 10.32-70.208, 95.584-105.264c 85.28,35.056, 96.096,74.576, 96.096,105.264L 352.312,447.696 z" />
309
+ <glyph unicode="&#xe019;" d="M 495.424,131.848L 495.424,260.92 l 8.048,4.248c 5.232,2.72, 8.528,8.112, 8.592,14.016
310
  c 0.064,5.888-3.128,11.344-8.296,14.184l-240.72,128.8c-4.816,2.64-10.64,2.624-15.488-0.048L 8.16,293.16
311
  c-5.096-2.84-8.248-8.232-8.216-14.080s 3.248-11.2, 8.408-13.984l 105.192-55.992c-1.32-2.328-2.136-4.984-2.136-7.848l0-135.392
312
  c0-4.56, 1.952-8.92, 5.36-11.952c 3.472-3.080, 36.72-30.048, 138.376-30.048c 101.296,0, 135.44,25.488, 139,28.392
314
  c-9.488-5.552-15.92-15.736-15.92-27.512c0-17.672, 14.328-32, 32-32s 32,14.328, 32,32C 511.504,116.096, 504.984,126.32, 495.424,131.848z M 368.016,73.816
315
  c-12.576-6.048-45.856-17.952-112.872-17.952c-67.44,0-99.968,12.672-111.736,18.768L 143.408,193.2 l 103.904-55.312c 2.36-1.28, 4.984-1.92, 7.592-1.92
316
  c 2.544,0, 5.096,0.608, 7.408,1.832l 105.704,55.832L 368.016,73.816 z M 255.032,170.096L 49.232,279.376l 206.16,110.488l 206.8-110.168L 255.032,170.096z" />
317
+ <glyph unicode="&#xe01a;" d="M 255.992,480.064c-114.608,0-207.84-99.952-207.84-222.8l0-273.336 c0-6.608, 4.080-12.544, 10.248-14.92
318
  c 1.856-0.736, 3.816-1.080, 5.752-1.080c 4.424,0, 8.768,1.84, 11.856,5.264l 60.296,66.56l 47.216-65.216
319
  c 2.984-4.128, 7.752-6.576, 12.84-6.608l 0.112,0 c 5.048,0, 9.816,2.392, 12.832,6.456l 47.408,63.672l 46.592-63.576
320
  c 3.016-4.112, 7.8-6.544, 12.904-6.544c 5.096,0, 9.888,2.424, 12.904,6.528l 47.784,65.144l 59-66.312
325
  L 80.144,257.272 c0,105.2, 78.888,190.8, 175.84,190.8c 96.968,0, 175.856-85.592, 175.856-190.8L 431.84,25.984 z M 336,303.92c-17.64,0-31.92-14.296-31.92-31.904
326
  c0-17.624, 14.28-31.92, 31.92-31.92s 31.92,14.296, 31.92,31.92C 367.92,289.624, 353.64,303.92, 336,303.92z M 176,303.92
327
  c-17.64,0-31.92-14.296-31.92-31.904c0-17.624, 14.288-31.92, 31.92-31.92s 31.92,14.296, 31.92,31.92C 207.92,289.624, 193.64,303.92, 176,303.92z" />
328
+ <glyph unicode="&#xe01b;" d="M 371.608,442.224c-12.8,6.008-24.904,11.664-35.92,17.192
329
  c-28.232,14.144-53.832,21.016-78.232,21.016c-49.144,0-83.152-28.352-104.48-49.68l-17.792-17.808l-11.872-11.888l-17.232-17.256l-26.864-26.896
330
  l-29.664-29.688c-55.344-55.4-64.184-111.8-28.632-182.904c 5.512-11.040, 11.184-23.168, 17.184-36.016
331
  c 32.352-69.192, 65.792-140.744, 120.528-140.744c 1.536,0, 3.056,0.048, 4.608,0.168c 56.488,4.424, 72.512,77.144, 86.656,141.296
341
  c 6,6, 6,15.736,0,21.728c-6,6-15.72,6-21.72,0l-12.176-12.176l-12.176,12.176c-6,6-15.72,6-21.72,0
342
  c-6-6-6-15.728,0-21.728l 12.176-12.176l-12.176-12.176c-6-5.992-6-15.72,0-21.72c 6-6, 15.728-6, 21.72,0
343
  l 12.176,12.168l 12.528-12.528c 6-6, 15.72-6, 21.72,0s 6,15.736,0,21.736L 164.944,208.28z" />
344
+ <glyph unicode="&#xe01c;" d="M 254.208-31.64c-120.624,0-206.184,83.64-206.184,198.888c0,61.184, 36.688,127.096, 38.248,129.856
345
  c 3.184,5.672, 9.44,8.752, 15.968,8.032c 6.456-0.832, 11.768-5.488, 13.44-11.784c 0.096-0.376, 9.984-37.376, 23.032-57.92
346
  c 8.768-13.824, 17.656-23.592, 27.656-30.376c-6.768,29.328-11.952,73.456-3.512,118.736C 186.024,448.080, 283.848,477.816, 288.040,479.016
347
  c 5.392,1.544, 11.112,0.16, 15.216-3.576c 4.096-3.752, 5.968-9.376, 4.904-14.832c-0.16-0.872-16.312-87.888, 17.968-162.032
354
  c-1.2,1.704-29.656,41.984-42.2,69.12c-26.048,56.296-25.608,117.168-22.952,152.232c-26.36-15.36-66.832-49.672-79.832-119.456
355
  c-12.656-67.904, 11.936-135.8, 12.2-136.472c 2.128-5.544, 1-11.832-2.904-16.296c-3.92-4.44-9.952-6.408-15.768-5.016
356
  c-1.984,0.488-47.016,12.2-76.168,58.144C 106.464,226.512, 101.792,236.472, 97.848,246.16z" />
357
+ <glyph unicode="&#xe01d;" d="M 512.688,154.104c-0.488,6.92-26.504,159.656-30.576,184.112c-0.392,2.344-0.704,4.84-1.048,7.472
358
  c-3.144,24.576-9.016,70.312-82.736,70.312c-8.84,0-16-7.16-16-16s 7.16-16, 16-16c 45.56,0, 47.968-18.704, 51-42.392
359
  c 0.392-3.032, 0.768-5.936, 1.216-8.64c 1.872-11.264, 10.352-56.080, 17.672-100.512c-18.776,14.312-42.144,22.904-67.56,22.904
360
  c-40.824,0-77.16-21.976-97.136-54.68c-9.608,3.632-25.912,8.168-47.696,8.168c-21.472,0-37.256-4.568-47.016-8.544
369
  c-44.096,0-81.344,36.488-81.344,79.672s 37.248,79.672, 81.344,79.672c 38,0, 69.816-26.744, 77.728-62.392
370
  c 0.328-3.264, 0.6-6.336, 0.808-9.144c 0.096-1.344, 0.456-2.608, 0.92-3.832c 0.080-1.44, 0.216-2.856, 0.216-4.312
371
  C 480.328,99.744, 444.592,64.008, 400.656,64.008z" />
372
+ <glyph unicode="&#xe01e;" d="M 511.656,243.352c-0.68,5.656-2.808,10.856-6.048,15.232l 0.080,0 l-0.44,0.44c-1.64,2.16-3.56,4.064-5.704,5.752L 290.904,466.48
373
  c-18.112,18.112-49.752,18.144-67.888,0L 14.408,266.352c-4.512-4.2-14.44-15.544-14.44-26.672l0-239.76 c0-17.592, 14.408-32, 32-32l 448,0
374
  c 17.592,0, 32,14.408, 32,32L 511.968,239.048 C 512.080,240.488, 511.936,241.928, 511.656,243.352z M 134.896,116.832L 31.968,22.048L 31.968,207.64 L 134.896,116.832z
375
  M 167.784,103.64c 1.144,0.76, 2.232,1.624, 3.184,2.704c 0.184,0.208, 0.312,0.456, 0.48,0.672l 70.584,65
377
  l 101.24,89.848l0-180.92 L 378.728,114.72z M 51.888,258.584L 245.64,443.856c 3.032,3.016, 7.048,4.688, 11.312,4.688
378
  c 4.28,0, 8.296-1.672, 11.328-4.688L 448.968,271.68l-0.488,0 l 27.448-27.896l-121.152-107.52l-67.624,60.832
379
  c-18.84,14.768-45.888,15.408-65.84-0.688l-62.752-57.792L 37.664,245.288l 13.496,13.296L 51.888,258.584 z" />
380
+ <glyph unicode="&#xe01f;" d="M 511.656,243.36c-0.68,5.656-2.808,10.856-6.048,15.232l 0.080,0 l-0.44,0.44c-1.64,2.16-3.56,4.064-5.704,5.752
381
  L 415.968,348.976L 415.968,400.608 c0,8.84-7.16,16-16,16l-50.664,0 l-58.4,49.856c-18.112,18.112-49.752,18.144-67.888,0l-58.2-49.856l-52.848,0
382
  c-8.84,0-16-7.16-16-16l0-52.688 L 14.408,266.36c-8.672-5.736-14.44-15.544-14.44-26.672l0-239.752 c0-17.592, 14.408-32, 32-32l 448,0
383
  c 17.592,0, 32,14.408, 32,32l0,239.12 C 512.080,240.496, 511.936,241.936, 511.656,243.36z M 134.432,117.248L 31.968,22.208L 31.968,207.656 L 134.432,117.248z
387
  c 3.032,3.016, 7.048,4.688, 11.312,4.688c 4.28,0, 8.296-1.672, 11.328-4.688l 32.312-27.232L 213.376,416.608 L 245.64,443.84z M 383.968,384.608l0-222.424
388
  l-28.656-25.44l-68.16,61.784c-18.84,14.768-45.888,15.408-65.84-0.688L 158,139.12l-30.032,26.504L 127.968,384.608 L 383.968,384.608 z M 51.888,258.592l 44.080,44.064
389
  l0-108.808 l-58.312,51.448l 13.496,13.296L 51.888,258.592 z" />
390
+ <glyph unicode="&#xe027;" d="M 452.808,124.056c-18.672,22.712-44.24,54.872-44.24,87.68l0,104.48
391
  c0,90.008-67.32,163.24-153.344,163.24c-86.040,0-152.832-73.232-152.832-163.24l0-104.48 c0-32.256-27.744-62.744-45.336-86.4
392
  c-15.824-21.256-28.312-38.048-19.88-54.832c 7.416-14.768, 25.984-16.664, 41.328-16.664l 91.68,0 c 0.024-47.104, 38.224-85.288, 85.336-85.288
393
  c 47.12,0, 85.32,38.184, 85.344,85.288l 93.832,0 c 9.76,0, 32.576,0, 40.432,16.6C 483.056,87.248, 470.368,102.696, 452.808,124.056z
395
  c-2.448,0-4.496,0.080-6.184,0.184c 3.296,5.104, 8.136,11.624, 12.072,16.928c 19.496,26.2, 52.072,63.184, 52.072,106.712l0,104.48
396
  c0,71.232, 51.52,129.176, 118.76,129.176c 67.24,0, 119.28-57.944, 119.28-129.176l0-104.48 c0-45.008, 30.040-82.624, 51.984-109.304
397
  c 3.696-4.496, 8.12-9.88, 11.56-14.48C 437.032,87.92, 435.912,87.904, 434.696,87.904z" />
398
+ <glyph unicode="&#xe028;" d="M 510.528,60.016L 416.896,233.168c 9.552,21.68, 14.896,45.64, 14.896,70.848c0,97.152-78.76,175.904-175.904,175.904
399
  c-97.168,0-175.92-78.76-175.92-175.904c0-25.816, 5.608-50.312, 15.592-72.392L 1.512,60.096c-3.032-5.512-2.528-12.312, 1.264-17.344
400
  c 3.8-5.016, 10.216-7.376, 16.344-5.936l 80.312,18.424l 27.488-76.56c 2.144-5.952, 7.576-10.080, 13.872-10.544
401
  c 0.408-0.032, 0.8-0.048, 1.184-0.048c 5.856,0, 11.296,3.216, 14.096,8.44l 81.848,152.488c 5.904-0.6, 11.896-0.904, 17.96-0.904
406
  c 79.272,0, 143.768-64.496, 143.768-143.768s-64.496-143.784-143.768-143.784C 176.608,160.232, 112.112,224.744, 112.112,304.016z M 405.872,89.592
407
  c-7.936,1.872-15.888-2.56-18.64-10.184l-20.264-56.488L 305.392,135.2c 37.72,11.048, 70.168,34.368, 92.752,65.368l 67.424-124.664L 405.872,89.592z
408
  " />
409
+ <glyph unicode="&#xe029;" d="M 510.512,114.296l-41.144,75.648c-0.064,0.104-0.048,0.2-0.112,0.296l-2.936,5.072
410
  c-1.64,2.808-4.216,4.616-7.096,5.296c-2.848,0.704-5.992,0.272-8.704-1.488l-4.92-3.168c-0.096-0.056-0.152-0.144-0.248-0.208
411
  l-72.8-49.16c-5.44-3.504-7.208-10.84-3.968-16.456l 3.272-3.6c 3.24-5.592, 10.632-5.824, 16.080-2.32l 43.52,29.592
412
  c-10.304-83-77.368-146.696-159.48-154.088L 271.976,320.512 L 336,320.512 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16l-64.72,0
419
  c 14.688-102.36, 102.552-178.912, 206.64-178.912c 104.032,0, 191.96,76.544, 206.68,178.856l 23.92-44.432c 3.248-5.592, 9.944-8.768, 15.384-5.272
420
  l 4.56,1.712C 511.984,101.36, 513.76,108.712, 510.512,114.296z M 223.752,416.512c0,17.92, 14.576,32.504, 32.496,32.504
421
  c 17.92,0, 32.504-14.576, 32.504-32.504s-14.576-32.504-32.504-32.504C 238.336,384.016, 223.752,398.592, 223.752,416.512z" />
422
+ <glyph unicode="&#xe02a;" d="M 511.824,334.76c 0.232,11.832-2.952,39.424-38.92,49.032L 115.024,455.76l-3.328,0.344
423
  c-26.472,0-48-21.528-48-48l0-64.352 l-16,0.040c-26.376-0.112-47.816-21.576-47.816-47.984l0-255.904 c0-26.472, 21.528-48, 48-48l 416.232,0
424
  c 26.472,0, 48,21.528, 48,48L 511.824,334.76z M 95.696,408.104c0,8.36, 6.44,15.232, 14.608,15.936l 353-71.44
425
  c 0.128-0.064-2.624-8.968-15.44-8.8L 95.696,343.8 L 95.696,408.104 z M 480.12,39.896c0-8.832-7.168-16-16-16L 47.88,23.896 c-8.832,0-16,7.168-16,16L 31.88,295.808
426
  c0,8.832, 7.168,16, 16,16l 400.032,0 c 15.704,0, 32.2,5.352, 32.2,15.944L 480.112,39.896 z M 95.912,199.752c-17.672,0-32-14.328-32-32s 14.328-32, 32-32
427
  s 32,14.328, 32,32S 113.584,199.752, 95.912,199.752z" />
428
+ <glyph unicode="&#xe02b;" d="M 496,144l-16.136,0 l0,0.808 c0,80.96-43.264,151.904-107.832,191.192l 80.408,0
429
  c 5.544-9.52, 15.752-16, 27.56-16c 17.672,0, 32,14.328, 32,32s-14.328,32-32,32c-11.816,0-22.016-6.48-27.56-16L 304,368 l0,16 c0,8.832-7.168,16-16,16l-64,0
430
  c-8.832,0-16-7.168-16-16l0-16 L 59.56,368 C 54.016,377.52, 43.816,384, 32,384c-17.672,0-32-14.328-32-32s 14.328-32, 32-32c 11.816,0, 22.016,6.48, 27.56,16l 80.4,0
431
  C 75.392,296.704, 32.136,225.768, 32.136,144.808L 32.136,144 L 16,144 c-8.832,0-16-7.168-16-16l0-64 c0-8.832, 7.168-16, 16-16l 64,0 c 8.832,0, 16,7.168, 16,16l0,64
432
  c0,8.832-7.168,16-16,16L 64.136,144 l0,0.808 c0,89.224, 61.232,164.336, 143.864,185.696L 208,320 c0-8.832, 7.168-16, 16-16l 64,0 c 8.832,0, 16,7.168, 16,16l0,10.504
433
  c 82.632-21.368, 143.864-96.48, 143.864-185.696L 447.864,144 L 432,144 c-8.832,0-16-7.168-16-16l0-64 c0-8.832, 7.168-16, 16-16l 64,0 c 8.832,0, 16,7.168, 16,16l0,64
434
  C 512,136.832, 504.832,144, 496,144z M 64,80L 32,80 l0,32 l 32,0 L 64,80 z M 272,336l-32,0 l0,32 l 32,0 L 272,336 z M 480,80l-32,0 l0,32 l 32,0 L 480,80 z" />
435
+ <glyph unicode="&#xe02c;" d="M 480,448.2L 32,448.2 c-17.672,0-32-14.328-32-32l0-288.752 c0-17.672, 14.328-32, 32-32l 63.768,0 l0-79.656
436
  c0-6.456, 3.872-12.264, 9.816-14.752c 2-0.84, 4.112-1.248, 6.184-1.248c 4.128,0, 8.168,1.592, 11.216,4.592l 92.512,91.064L 480,95.448
437
  c 17.672,0, 32,14.328, 32,32L 512,416.2 C 512,433.872, 497.672,448.2, 480,448.2z M 480,127.456L 202.392,127.456 l-74.624-73.456l0,73.456 L 32,127.456 L 32,416.2 l 448,0 L 480,127.456 z
438
  M 112,255.496l 288,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 112,287.496 c-8.832,0-16-7.168-16-16S 103.168,255.496, 112,255.496z M 112,319.496l 288,0
439
  c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 112,351.496 c-8.832,0-16-7.168-16-16S 103.168,319.496, 112,319.496z M 112,191.496l 192,0 c 8.832,0, 16,7.168, 16,16
440
  s-7.168,16-16,16L 112,223.496 c-8.832,0-16-7.168-16-16S 103.168,191.496, 112,191.496z" />
441
+ <glyph unicode="&#xe02d;" d="M 256-32.080c-10.144,0-19.688,3.936-26.872,11.096L 10.872,197.264c-14.768,14.84-14.768,38.976-0.032,53.784l 79.952,79.936
442
  c 4.936,4.936, 12.512,6.112, 18.72,2.872c 6.184-3.232, 9.56-10.112, 8.344-16.984c-0.816-4.576-1.184-8.248-1.184-11.56
443
  c0-35, 28.488-64.072, 63.504-64.072c 35.048,0, 60.64,29.072, 60.64,64.072c0,35.048-25.592,63.544-60.64,63.544c-3.28,0-6.936-0.376-11.512-1.184
444
  c-6.936-1.28-13.752,2.16-16.984,8.344c-3.232,6.2-2.064,13.784, 2.872,18.72l 74.544,74.56c 14.44,14.376, 39.408,14.344, 53.784,0.032
450
  c-30.856,0-55.968-25.128-55.968-56.016c0-1.28, 0.2-2.528, 0.376-3.784l 0.344-2.856c 0.72-6.752-2.888-13.216-9.016-16.144
451
  c-6.080-2.904-13.408-1.656-18.2,3.128l-78.472,78.512c-3.064,3.032-5.472,3.064-8.592-0.032l-48.56-48.56
452
  c 41.64-10.312, 69.688-47.984, 69.688-92.768c0-52.656-39.96-96.064-92.648-96.064C 135.4,209.248, 97.744,240.784, 87.448,282.392z" />
453
+ <glyph unicode="&#xe02e;" d="M 476.368,352.536l-60.36,0 L 416.008,479.76 L 95.992,479.76 l0-127.224 L 35.632,352.536 c-19.656,0-35.656-16-35.656-35.672
454
  L-0.024,99.92 c0-19.672, 16-35.672, 35.656-35.672l 60.36,0 L 95.992-31.76 l 320.016,0 L 416.008,64.248 l 60.36,0 c 19.656,0, 35.656,16, 35.656,35.672L 512.024,316.864
455
  C 512.024,336.536, 496.024,352.536, 476.368,352.536z M 127.992,448.256l 256.016,0 l0-95.72 L 127.992,352.536 L 127.992,448.256 z M 384.008,0.24L 127.992,0.24 L 127.992,176.44 l 256.016,0
456
  L 384.008,0.24 z M 480.024,99.92c0-2.040-1.64-3.672-3.656-3.672l-60.36,0 L 416.008,208.44 L 95.992,208.44 l0-112.184 L 35.632,96.256 c-2.016,0-3.656,1.632-3.656,3.672
457
  L 31.976,316.864 c0,2.032, 1.64,3.672, 3.656,3.672l 440.736,0 c 2.016,0, 3.656-1.64, 3.656-3.672L 480.024,99.92 z M 416,288.28l-16,0 c-8.832,0-16-7.168-16-16
458
  s 7.168-16, 16-16l 16,0 c 8.832,0, 16,7.168, 16,16S 424.832,288.28, 416,288.28z" />
459
+ <glyph unicode="&#xe02f;" d="M 512,319.752c0,17.672-14.328,32-32,32l-54.624,0 c 14.136,13.944, 23.184,32.224, 23.184,54.736c0,27.72-15.92,57.832-60.608,57.832
460
  c-58.8,0-107.92-62.608-131-97.704C 233.856,401.704, 183.232,464.312, 124.44,464.312c-44.688,0-60.608-30.112-60.608-57.832
461
  c0-22.504, 9.296-40.792, 23.72-54.736L 32,351.744 c-17.672,0-32-14.328-32-32l0-95.784 l 32.28,0 l0-208.28 c0-17.672, 14.328-32, 32-32l 383.84,0 c 17.672,0, 32,14.328, 32,32
462
  L 480.12,223.968 L 512,223.968 L 512,319.752 z M 387.952,432.312c 19.784,0, 28.608-8.312, 28.608-25.832c0-35.544-39.672-54.72-76.984-54.72l-54.168,0
463
  C 308.144,385.528, 348.16,432.312, 387.952,432.312z M 124.44,432.312c 39.8,0, 81.328-46.784, 104.064-80.544l-54.184,0
464
  c-37.312,0-78.488,19.672-78.488,55.216C 95.832,424.496, 104.656,432.312, 124.44,432.312z M 480,255.968L 272,255.968 l0,63.784 l 208,0 L 480,255.968 z M 32,319.752l 208,0 l0-63.784
465
  L 32,255.968 L 32,319.752 z M 64.28,223.968L 240,223.968 l0-208.28 L 64.28,15.688 L 64.28,223.968 z M 448.128,15.688L 272,15.688 L 272,223.968 l 176.128,0 L 448.128,15.688 z" />
466
+ <glyph unicode="&#xe030;" d="M 16.88,448.12l 224,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16l-224,0 c-8.832,0-16-7.168-16-16
467
  S 8.040,448.12, 16.88,448.12z M 16.88,352.12l 224,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16l-224,0 c-8.832,0-16-7.168-16-16S 8.040,352.12, 16.88,352.12z
468
  M 256.88,272.12c0,8.832-7.168,16-16,16l-224,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 224,0 C 249.712,256.12, 256.88,263.288, 256.88,272.12z
469
  M 506.44,317.728L 349.984,474.176c-4.952,4.96-12.328,5.92-18.296,3.008c-6.272-2.168-10.808-8.056-10.808-15.064L 320.88,107.92
471
  c 53.064,0, 96.048,35.904, 96.048,80.168c0,2.008-0.184,3.968-0.36,5.936L 352.88,426.024 l 130.92-130.928c 6.248-6.248, 16.384-6.248, 22.632,0
472
  C 512.68,301.344, 512.68,311.48, 506.44,317.728z M 320.88,46.488c-1.152-22.248-27.096-46.408-64.064-46.408
473
  c-37.824,0-64.176,25.28-64.176,47.936c0,22.672, 26.352,47.92, 64.176,47.92c 36.968,0, 62.912-24.128, 64.064-46.392L 320.88,46.488 z" />
474
+ <glyph unicode="&#xe031;" d="M 507.424,290.168L 323.344,475.176c-3.968,3.984-9.688,5.608-15.16,4.248c-5.456-1.328-9.8-5.424-11.472-10.784
475
  c-11.080-35.656-12.36-67.92-3.896-97.344c-0.776-0.536-1.52-1.12-2.208-1.808L 205.056,283.952c-27.6,12.8-57.272,19.728-86.848,19.728
476
  c-18.8,0-37.232-2.784-54.784-8.232c-5.344-1.672-9.44-6-10.784-11.424c-1.344-5.44, 0.232-11.168, 4.184-15.144l 109.488-110.192
477
  L 13.232,3.168l-13.312-35.064l 32.184,12.44l 156.68,155.52l 110.912-111.632c 3.032-3.064, 7.144-4.72, 11.344-4.72
482
  c-8.416,12.864-18.232,25.088-29.512,36.376c-11.232,11.232-23.504,21.128-36.48,29.664l 72.064,72.048c 7.352-12.784, 16.832-25, 28.504-36.664
483
  c 11.928-11.92, 24.544-21.568, 37.8-29.032L 300.112,201.728z M 357.312,325.776c-30.768,30.768-42.624,65.064-36.344,106.44l 143.456-144.2
484
  C 423.096,282.088, 388.624,294.464, 357.312,325.776z" />
485
+ <glyph unicode="&#xe032;" d="M 480,440.048L 32,440.048 c-17.592,0-32-14.408-32-32l0-368.096 c0-17.592, 14.408-32, 32-32l 448,0 c 17.592,0, 32,14.408, 32,32L 512,408.048
486
  C 512,425.64, 497.592,440.048, 480,440.048z M 480,39.952L 32,39.952 L 32,134.232 l 128.424,124.456l 132.392-132.248c 5.456-6.624, 15.168-5.784, 22.064-0.56
487
  l 58.44,52.904L 478.72,70.592c 0.4-0.4, 0.848-0.696, 1.28-1.040L 480,39.952 z M 480,115.104L 385.984,211.312
488
  c-5.704,5.624-14.64,6.2-20.968,1.376l-60.28-52.512L 172.264,291.216c-2.832,3.424-6.92,5.512-11.344,5.8
489
  c-4.408,0.16-8.752-1.28-11.984-4.312L 32,178.904L 32,408.048 l 448,0 L 480,115.104 z M 368,279.936c 17.64,0, 31.92,14.304, 31.92,31.92
490
  c0,17.608-14.28,31.912-31.92,31.912s-31.92-14.304-31.92-31.912C 336.080,294.24, 350.36,279.936, 368,279.936z" />
491
+ <glyph unicode="&#xe033;" d="M 496.592,412.496L 336.112,479.032L 176.392,415.816L 15.408,479
492
  c-1.376,0.408-2.72,0.56-3.984,0.56C 4.856,479.592,0,474.688,0,467.312l0-415 c0-8.784, 6.936-17.936, 15.408-20.28l 161.168-63.592
493
  l 159.504,64.752l 160.512-63.064c 1.376-0.376, 2.72-0.56, 3.984-0.56c 6.56,0, 11.424,4.872, 11.424,12.248L 512,392.184
494
  C 512,400.968, 505.064,410.128, 496.592,412.496z M 192,389.432l 128,50.152l0-380.752 l-128-50.592L 192,389.432 z M 32,436.656l 128-47.288l0-380.88 L 32,60.624L 32,436.656 z
495
  M 480,11l-128,48.192L 352,439.104 l 128-55.192L 480,11 z" />
496
+ <glyph unicode="&#xe034;" d="M 10.92,329.096l 237.544-129.36c 2.392-1.296, 5.016-1.952, 7.656-1.952c 2.608,0, 5.216,0.64, 7.592,1.92l 240.048,129.36
497
  c 5.232,2.816, 8.488,8.312, 8.408,14.264c-0.080,5.968-3.456,11.376-8.752,14.080L 265.856,478.048c-4.528,2.296-9.872,2.312-14.44,0.032
498
  L 11.392,357.44c-5.312-2.672-8.72-8.080-8.816-14.032S 5.704,331.936, 10.92,329.096z M 258.576,445.856L 461.656,342.72L 256.168,231.984
499
  L 53.080,342.576L 258.576,445.856z M 500.672,239.84l-47.488,24.112l-34.28-18.488l 40-20.312L 253.424,114.424L 50.328,225.016l 42.656,21.44L 58.8,265.080
502
  M 500.672,127.84l-44.984,22.112l-34.28-18.488l 37.504-18.312L 253.424,2.424L 50.328,113.016l 39.656,17.936l-34.184,18.624L 8.64,127.872
503
  c-5.312-2.672-8.72-8.080-8.816-14.032s 3.128-11.472, 8.344-14.312l 237.544-129.36c 2.392-1.296, 5.016-1.952, 7.656-1.952
504
  c 2.608,0, 5.216,0.64, 7.592,1.92l 240.048,129.36c 5.232,2.816, 8.488,8.312, 8.408,14.264C 509.344,119.736, 505.968,125.144, 500.672,127.84z" />
505
+ <glyph unicode="&#xe035;" d="M 511.368,8.68l-41.704,251.888c-3.72,32.656-33.488,59.216-66.36,59.216l-35.328,0 l0,42.64 c0,65.080-46.424,118.016-111.488,118.016
506
  c-65.048,0-112.472-52.936-112.472-118.016l0-42.64 L 105.68,319.784 c-32.872,0-62.64-26.56-66.264-58.528l-38.64-252.080
507
  c-1.488-13.28, 1.112-23.752, 7.704-31.144c 6.216-6.952, 15.264-10.488, 26.872-10.488l 436.784,0 c 16.456,0, 25.888,6.608, 30.92,12.16
508
  C 507.664-15.192, 512.88-6.224, 511.368,8.68z M 176.024,362.432c0,47.424, 33.064,86.016, 80.472,86.016s 79.488-38.592, 79.488-86.016l0-42.64
510
  l 38.344,0 l0-36.464 C 134.488,245.784, 128,235.576, 128,223.752c0-17.672, 14.328-32, 32-32s 32,14.328, 32,32c0,11.808-6.464,22-15.976,27.544l0,36.496 l 159.952,0
511
  l0-36.496 C 326.472,245.752, 320,235.552, 320,223.752c0-17.672, 14.328-32, 32-32s 32,14.328, 32,32c0,11.824-6.488,22.032-16.024,27.576l0,36.464 l 35.328,0
512
  c 16.832,0, 32.656-14.128, 34.704-31.72l 41.672-251.64C 479.88,2.384, 478.272-0.224, 473.584-0.224z" />
513
+ <glyph unicode="&#xe036;" d="M 464.752,272.792c0,84.392-44.488,160.936-118.984,204.784c-7.624,4.504-17.44,1.936-21.904-5.688
514
  c-4.472-7.608-1.936-17.424, 5.688-21.904c 64.624-38.016, 103.2-104.264, 103.2-177.184c0-121.184-87.968-209.144-209.16-209.144
515
  c-27.096,0-53.392,5.080-78.16,15.080c-8.184,3.328-17.528-0.64-20.832-8.832c-3.312-8.2, 0.64-17.528, 8.832-20.832
516
  c 28.608-11.56, 58.936-17.424, 90.16-17.424c 0.096,0, 0.192,0.008, 0.288,0.008l0-31.504 l-46.464,0 c-9.232,0-16.72-7.152-16.72-15.976
519
  c-97.344,0-176.232-79.376-176.232-176.704s 78.888-175.72, 176.232-175.72C 320.816,95.632, 399.688,174.024, 399.688,271.352z M 79.248,271.352
520
  c0,79.512, 64.704,144.704, 144.232,144.704c 79.512,0, 144.2-65.184, 144.2-144.704s-64.688-143.72-144.2-143.72
521
  C 143.952,127.632, 79.248,191.832, 79.248,271.352z" />
522
+ <glyph unicode="&#xe037;" d="M 512.512,224c0,136.008-106.832,247.552-241.16,255.512c-2.768,0.304-5.544,0.504-8.36,0.504c-0.832,0-1.664-0.088-2.496-0.112
523
  C 259,479.928, 257.512,480.016, 256,480.016C 114.56,480.016-0.512,365.168-0.512,224c0-141.168, 115.072-256.016, 256.512-256.016
524
  c 1.512,0, 3,0.088, 4.504,0.12c 0.832-0.032, 1.664-0.12, 2.496-0.12c 2.816,0, 5.592,0.2, 8.36,0.504
525
  C 405.68-23.552, 512.512,87.976, 512.512,224z M 464.784,141.584c-8.816,2.56-30.96,8.12-70.032,12.696c 3.232,22.096, 5,45.448, 5,69.72
539
  c 11.632,2.472, 32.456,6.232, 63.296,9.464c 12.144-44.856, 31.896-82.808, 55.568-109.984C 128.848,31.664, 86.76,67.68, 60.544,113.824z
540
  M 345.328,18.408c 19.112,26.632, 34.24,62.512, 43.648,104.4c 31.704-3.64, 51.608-7.896, 61.648-10.432
541
  C 426.616,70.84, 389.696,37.68, 345.328,18.408z" />
542
+ <glyph unicode="&#xe038;" d="M 112,424L 16,424 C 7.168,424,0,416.832,0,408l0-96 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 32,392 l 80,0
543
  c 8.832,0, 16,7.168, 16,16S 120.832,424, 112,424z M 496,152c-8.832,0-16-7.168-16-16l0-80 L 400,56 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 96,0 c 8.832,0, 16,7.168, 16,16
544
  L 512,136 C 512,144.832, 504.832,152, 496,152z M 112,56L 32,56 L 32,136 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-96 c0-8.832, 7.168-16, 16-16l 96,0 c 8.832,0, 16,7.168, 16,16
545
  S 120.832,56, 112,56z M 496,424L 400,424 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 80,0 l0-80 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 512,408 C 512,416.832, 504.832,424, 496,424z" />
546
+ <glyph unicode="&#xe039;" d="M 480.080,376l-240,0 l-48,48l-160,0 c-17.672,0-32-14.328-32-32l0-80 l-0.152,0 l0-32 l 0.152,0 l0-224
547
  c0-17.672, 14.328-32, 32-32l 448,0 c 17.672,0, 32,14.328, 32,32L 512.080,344 C 512.080,361.672, 497.752,376, 480.080,376z M 32.072,392l 145.376,0 l 39.312-38.624L 226.816,344L 480.080,344
548
  l0-32 l-448,0 L 32.080,392 z M 32.072,56L 32.072,280 l 448,0 l0-224 L 32.072,56 z" />
549
+ <glyph unicode="&#xe03a;" d="M 400,343.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 384,351.024, 391.168,343.856, 400,343.856z
550
  M 400,247.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 384,255.024, 391.168,247.856, 400,247.856z
551
  M 400,151.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 384,159.024, 391.168,151.856, 400,151.856z
552
  M 400,55.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 384,63.024, 391.168,55.856, 400,55.856z
556
  M 80,55.856l 32,0 c 8.832,0, 16,7.168, 16,16l0,16 c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16l0-16 C 64,63.024, 71.168,55.856, 80,55.856z M 480,472.048
557
  L 32,472.048 c-17.592,0-32-14.408-32-32l0-432.096 c0-17.592, 14.408-32, 32-32l 448,0 c 17.592,0, 32,14.408, 32,32L 512,440.048 C 512,457.64, 497.592,472.048, 480,472.048z M 480,7.952L 32,7.952
558
  L 32,440.048 l 448,0 L 480,7.952 z" />
559
+ <glyph unicode="&#xe03b;" d="M 50.936,314.872c-9.064,0-16.384-7.328-16.384-16.384c0-9.048, 7.32-16.384, 16.384-16.384c 151.504,0, 262.672-112.184, 262.672-263.68
560
  c0-9.048, 7.328-16.376, 16.384-16.376s 16.384,7.328, 16.384,16.376C 346.376,188.608, 221.112,314.872, 50.936,314.872z M 51.080,478.688
561
  c-9.056,0-16.384-7.328-16.384-16.384c0-9.056, 7.328-16.384, 16.384-16.384c 235.088,0, 426.336-191.248, 426.336-426.328
562
  c0-9.048, 7.328-16.376, 16.384-16.376s 16.384,7.328, 16.384,16.376C 510.176,272.736, 304.224,478.688, 51.080,478.688z M 92.008,150.2
563
  c-49.736,0-90.184-40.56-90.184-90.44c0-49.856, 40.456-90.456, 90.184-90.456s 90.2,40.592, 90.2,90.456
564
  C 182.208,109.64, 141.744,150.2, 92.008,150.2z M 92.008,0.984c-32.304,0-58.584,26.376-58.584,58.784s 26.28,58.768, 58.584,58.768
565
  c 32.312,0, 58.608-26.36, 58.608-58.768S 124.32,0.984, 92.008,0.984z" />
566
+ <glyph unicode="&#xe03c;" d="M 511.92,193.728c 0.048,10.528-1.608,50.248-2.872,61.608
567
  C 494.488,385.712, 388.672,480.336, 257.456,480.336c-136.672,0-247.408-105.312-254.92-244.952c-0.16-3.048-1.28-24.672-1.36-37.544l-0.040-7.16
568
  c-0.656-2.96-1.056-6.016-1.056-9.168l0-107.328 c0-23.44, 19.064-42.504, 42.504-42.504l 43.144,0 c 23.44,0, 42.512,19.064, 42.512,42.504L 128.24,181.504
569
  c0,23.44-19.080,42.504-42.512,42.504L 42.576,224.008 c-2.944,0-5.816-0.304-8.592-0.872c 0.24,5.192, 0.456,9.288, 0.512,10.528
575
  c0-5.8-4.72-10.504-10.512-10.504L 42.576,63.672 c-5.8,0-10.504,4.704-10.504,10.504L 32.072,181.504 C 32.080,187.304, 36.784,192.008, 42.576,192.008z
576
  M 416.264,181.504c0,5.8, 4.704,10.504, 10.504,10.504l 42.64,0 c 5.8,0, 10.512-4.704, 10.512-10.504l0-106.832 c0-5.8-4.72-10.504-10.512-10.504
577
  l-42.64,0 c-5.8,0-10.504,4.704-10.504,10.504L 416.264,181.504 z" />
578
+ <glyph unicode="&#xe03d;" d="M 511.92,177.72c 0.048,10.528-1.608,50.248-2.872,61.608C 494.488,369.704, 388.672,464.328, 257.456,464.328
579
  c-136.672,0-247.408-105.312-254.92-244.952c-0.16-3.048-1.28-24.672-1.36-37.544l-0.040-7.16c-0.656-2.96-1.056-6.016-1.056-9.168
580
  l0-139.328 c0-23.44, 19.064-42.504, 42.504-42.504l 43.144,0 c 23.44,0, 42.512,19.064, 42.512,42.504L 128.24,165.496 c0,23.44-19.080,42.504-42.512,42.504L 42.568,208
581
  c-2.944,0-5.816-0.304-8.592-0.872c 0.24,5.192, 0.456,9.296, 0.512,10.528C 41.080,340.048, 138.056,432.328, 257.456,432.328
585
  l0-139.328 c0-5.808-4.72-10.504-10.512-10.504L 42.568,15.664 c-5.8,0-10.504,4.704-10.504,10.504L 32.064,165.496 C 32.080,171.296, 36.784,176, 42.568,176z
586
  M 479.92,26.672c0-5.8-4.72-10.504-10.512-10.504l-42.64,0 c-5.8,0-10.504,4.704-10.504,10.504L 416.264,165.496 c0,5.8, 4.704,10.504, 10.504,10.504
587
  l 42.64,0 c 5.8,0, 10.512-4.704, 10.512-10.504L 479.92,26.672 z" />
588
+ <glyph unicode="&#xe03e;" d="M 255.2-31.352c-96.656,0-175.296,77.56-175.296,172.888c0,111.344, 155.816,322.424, 162.456,331.36
589
  c 3,4.032, 7.704,6.424, 12.736,6.456c 5.592,0.048, 9.784-2.296, 12.832-6.28c 6.704-8.768, 164.168-216.112, 164.168-331.528
590
  C 432.096,46.208, 352.736-31.352, 255.2-31.352z M 255.376,436.152c-37.2-52.832-143.472-211.032-143.472-294.608
591
  c0-77.688, 64.28-140.888, 143.296-140.888c 79.888,0, 144.888,63.2, 144.888,140.888C 400.096,228.224, 293.016,384.056, 255.376,436.152z" />
592
+ <glyph unicode="&#xe03f;" d="M 511.488,225.008L 452.736,428.552c-1.92,6.936-8.232,11.736-15.424,11.736L 69.64,440.288 c-7.248,0-13.592-4.872-15.472-11.888L 0.472,235.224
593
  c-0.992-3.752-0.504-7.504, 1-10.768C 0.608,221.56,0,218.544,0,215.368l0-175.656 c0-17.672, 14.328-32, 32-32l 448,0 c 17.672,0, 32,14.328, 32,32L 512,215.368
594
  c0,0.856-0.184,1.664-0.248,2.504C 512.168,220.168, 512.16,222.592, 511.488,225.008z M 81.952,408.288l 343.184,0 l 46.56-160.92L 322.528,247.368
595
  c-0.72-38.408-27.952-64.84-66.528-64.84s-65.312,26.44-66.032,64.84L 37.080,247.368 L 81.952,408.288z M 480,39.712L 32,39.712 L 32,215.368 l 131.56,0
596
  c 13.968-40.216, 47.888-64.84, 92.44-64.84s 78.968,24.624, 92.936,64.84L 480,215.368 L 480,39.712 z" />
597
+ <glyph unicode="&#xe040;" d="M 384,480L 208,480 c-17.672,0-32-14.328-32-32l 176,0 l0-128 l 128,0 l0-256 L 368,64 l0-32 l 112,0 c 17.672,0, 32,14.328, 32,32L 512,351.992 L 384,480z M 384,352L 384,434.752 L 466.736,352L 384,352 z M 32,416
598
  c-17.672,0-32-14.328-32-32l0-384 c0-17.672, 14.328-32, 32-32l 272,0 c 17.672,0, 32,14.328, 32,32L 336,287.992 L 208,416L 32,416 z M 304,0L 32,0 L 32,384 l 144,0 l0-128 l 128,0 L 304,0 z M 208,288L 208,370.752
599
  L 290.736,288L 208,288 z" />
600
+ <glyph unicode="&#xe041;" d="M 508.528,386.968L 458.68,442.64c-3.032,3.424-7.392,5.376-11.968,5.376L 271.584,448.016 L 271.584,465 c0,8.28-7.168,15-16,15
601
  c-8.832,0-16-6.72-16-15l0-16.984 L 111.68,448.016 c-8.84,0-16-7.16-16-16l0-111.832 c0-8.84, 7.16-16, 16-16l 127.904,0 l0-32.048 L 65.288,272.136
602
  c-4.576,0-8.936-1.952-11.968-5.376l-49.84-56.656c-5.376-6.064-5.376-15.184,0-21.248l 49.84-56.144c 3.056-3.424, 7.392-4.872, 11.968-4.872
603
  l 174.296,0 l0-144.84 c0-8.28, 7.168-15, 16-15c 8.832,0, 16,6.72, 16,15L 271.584,127.84 l 128.232,0 c 8.84,0, 16,7.16, 16,16L 415.816,256.144 c0,8.84-7.16,16-16,16
604
  L 271.584,272.144 l0,32.048 l 175.128,0 c 4.576,0, 8.936,1.952, 11.968,5.376l 49.848,56.16C 513.896,371.784, 513.896,380.904, 508.528,386.968z M 383.824,159.84
605
  L 72.48,159.84 l-35.64,39.64l 35.64,40.656l 311.344,0 L 383.824,159.84 z M 439.52,336.184L 127.68,336.184 L 127.68,416.016 l 311.84,0 l 35.64-39.672L 439.52,336.184z" />
606
+ <glyph unicode="&#xe042;" d="M 483.456,330.92l-89.56,96C 390.856,430.16, 386.624,432, 382.184,432L 248.624,432 l-0.504,33c0,8.28-7.168,15-16,15
607
  c-8.832,0-15-6.72-15-15L 216.632,432L 40.248,432 c-8.84,0-16-7.16-16-16l0-192 c0-8.84, 7.16-16, 16-16l 176.168,0 l0-225
608
  c0-8.28, 7.168-15, 16-15c 8.832,0, 16,6.72, 16,15L 248.416,208 l 133.768,0 c 4.44,0, 8.672,1.84, 11.704,5.080l 89.56,96
609
  C 489.184,315.232, 489.184,324.768, 483.456,330.92z M 375.232,240L 56.248,240 L 56.248,400 l 318.984,0 l 74.64-80L 375.232,240z" />
610
+ <glyph unicode="&#xe043;" d="M 509.36,332.264L 439.424,465.984C 435.344,473.784, 424.792,480.16, 416,480.16L 255.032,480.16 c-0.176,0.008-0.352,0.056-0.528,0.064
611
  c-0.144,0-0.28-0.056-0.424-0.064L 96,480.16 c-8.8,0-19.376-6.36-23.512-14.128L 2.736,334.888c-4.144-7.768-3.312-19.968, 1.816-27.128
612
  L 244.56-26.816c 2.576-3.592, 6-5.408, 9.416-5.408c 3.392,0, 6.792,1.768, 9.384,5.296L 507.312,305.2
613
  C 512.504,312.296, 513.44,324.472, 509.36,332.264z M 471.184,336.184L 385.456,336.184 l 34.328,98.304L 471.184,336.184z M 287.672,448.16l 102.984,0 l-31.944-91.464
614
  L 287.672,448.16z M 334.12,336.184L 185.296,336.184 l 70.336,101.048L 334.12,336.184z M 156.944,351.456L 124.856,448.16l 99.408,0 L 156.944,351.456z
615
  M 340.376,304.184L 254.36,57.912L 172.632,304.184L 340.376,304.184 z M 218.464,64.456L 46.496,304.184l 92.416,0 L 218.464,64.456z M 374.272,304.184l 92.584,0
616
  L 290.368,63.904L 374.272,304.184z M 94.24,438.792l 34.048-102.608L 39.664,336.184 L 94.24,438.792z" />
617
+ <glyph unicode="&#xe044;" d="M 416.28,272.104c-4.168,0-17.6,0.080-32.152,0.184l 0.056,31.984c0,17.672-14.328,32-32,32
618
  l-320.248,0.080c-17.672,0-32-14.328-32-32l0-240.472 c0-53.016, 42.984-96, 96-96l 192.328,0 c 53.016,0, 95.504,42.984, 95.504,96l 0.032,16.424
619
  c 14.512-0.112, 29.304-0.2, 32.488-0.2c 52.888,0, 95.784,42.52, 95.784,95.536C 512.064,228.664, 469.168,272.104, 416.28,272.104z
620
  M 351.768,63.88c0-35.296-28.2-64-63.504-64L 95.936-0.12 c-35.296,0-64,28.704-64,64L 31.888,304.352l 0.048,0 l 320.248-0.096L 351.768,63.88z
623
  s-16-7.168-16-16l0-80 C 271.936,375.28, 279.104,368.12, 287.936,368.12z M 95.936,368.12c 8.832,0, 16,7.168, 16,16l0,80 c0,8.832-7.168,16-16,16
624
  s-16-7.168-16-16l0-80 C 79.936,375.28, 87.104,368.12, 95.936,368.12z M 191.936,368.12c 8.832,0, 16,7.168, 16,16l0,80 c0,8.832-7.168,16-16,16
625
  s-16-7.168-16-16l0-80 C 175.936,375.28, 183.104,368.12, 191.936,368.12z" />
626
+ <glyph unicode="&#xe045;" d="M 366.592,339.864l-156.576-67.32c-2.832-1.44-5.128-3.736-6.576-6.576L 131.712,121.36
627
  c-2.936-5.768-1.872-12.768, 2.656-17.392c 2.904-2.952, 6.816-4.512, 10.768-4.512c 2.216,0, 4.472,0.488, 6.56,1.504l 152.864,63.488
628
  c 2.8,1.344, 5.112,3.528, 6.608,6.248l 75.44,148.448c 3.216,5.8, 2.264,13.016-2.328,17.784C 379.672,341.696, 372.488,342.864, 366.592,339.864
629
  z M 178.928,147.592l 43.504,88.84l 43.936-54.992L 178.928,147.592z M 292.352,200.192l-44.4,55.576l 88.392,34.88L 292.352,200.192z M 256,480
630
  C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504
631
  C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224S 379.512-0.504, 256-0.504z" />
632
+ <glyph unicode="&#xe046;" d="M 500.176,94.192c-7.832,5.504-93.528,62.488-104.032,68.904
633
  c-4.576,2.8-10.16,4.168-16.232,4.168c-7.832,0-16.504-2.28-24.968-6.736c-8.248-4.344-33.232-18.56-45.456-25.544
634
  c-10.768,7.56-36.064,26.936-75.92,66.832c-39.608,39.592-59.16,65.096-66.768,75.92c 6.968,12.216, 21.168,37.2, 25.488,45.424
635
  c 8.184,15.504, 9.112,30.984, 2.472,41.424c-6.232,9.84-62.984,95.904-68.84,104c-5.512,7.64-15.408,11.768-26.144,11.768
646
  l-5.848-0.136c-0.112,0-0.2-0.048-0.328-0.064L 379.384,480.112c-6.464-0.144-11.808-5.488-11.96-11.96l-0.016-8.208
647
  c 0.984-7.616, 6.968-12.080, 13.44-11.936l 75.624-0.2L 319.328,311.496c-6.248-6.248-6.248-16.384,0-22.632
648
  C 325.576,282.624, 335.704,282.624, 341.952,288.864z" />
649
+ <glyph unicode="&#xe047;" d="M 500.176,94.192c-7.832,5.504-93.528,62.488-104.032,68.904
650
  c-4.576,2.8-10.16,4.168-16.232,4.168c-7.832,0-16.504-2.28-24.968-6.736c-8.248-4.344-33.232-18.56-45.456-25.544
651
  c-10.768,7.56-36.064,26.936-75.92,66.832c-39.608,39.592-59.16,65.096-66.768,75.92c 6.968,12.216, 21.168,37.2, 25.488,45.424
652
  c 8.184,15.504, 9.112,30.984, 2.472,41.424c-6.232,9.84-62.984,95.904-68.84,104c-5.512,7.64-15.408,11.768-26.144,11.768
663
  c 6.248,6.248, 6.248,16.384,0,22.632c-6.248,6.24-16.376,6.24-22.624,0L 350.84,342.744L 351.28,420.16c 0.144,6.464-4.984,12.096-11.448,11.944
664
  l-8.208-0.008c-6.48-0.16-11.832-4.008-11.968-10.472l-0.328-115.504c0-0.112, 0.44-0.192, 0.44-0.304l-0.64-5.856
665
  C 319.064,296.712, 319.824,293.824, 321.92,291.744z" />
666
+ <glyph unicode="&#xe048;" d="M 480.848,380.224c0-0.528-0.048-0.968-0.112-1.312c-13.080-9-86.216-57.312-99.888-66.080c-1.44-0.032-5.096,0.456-10.312,3.2
667
  c-5.56,2.92-21.768,12.016-44.44,24.952l-17.64,10.064l-16.624-11.672c-12.36-8.704-39.232-29.408-80.144-70.312
668
  c-41.088-41.080-61.728-67.856-70.384-80.168l-11.672-16.624l 10.080-17.64c 9.768-17.096, 21.472-37.752, 25-44.472
669
  c 2.84-5.392, 3.064-9.080, 3.064-10.080c0-0.16,0-0.296-0.016-0.408c-7.68-12.248-57.296-86.968-66.336-100.16
675
  c-4.344,8.248-18.56,33.232-25.544,45.456c 7.56,10.768, 26.936,36.064, 66.832,75.92c 39.592,39.608, 65.096,59.16, 75.92,66.768
676
  c 12.216-6.968, 37.2-21.168, 45.424-25.488c 15.504-8.184, 30.984-9.112, 41.424-2.472c 9.84,6.232, 94.904,62.984, 103,68.84
677
  C 507.728,359.6, 511.848,369.496, 511.848,380.224L 511.848,380.224z" />
678
+ <glyph unicode="&#xe049;" d="M 480,480.048L 32,480.048 c-17.592,0-32-14.408-32-32l0-448.096 c0-17.592, 14.408-32, 32-32l 448,0
679
  c 17.592,0, 32,14.408, 32,32L 512,448.048 C 512,465.64, 497.592,480.048, 480,480.048z M 480-0.048L 32-0.048 L 32,448.048 l 448,0 L 480-0.048 z M 112,303.848l 32,0 l0-32 c0-8.832, 7.168-16, 16-16
680
  s 16,7.168, 16,16l0,32 l 32,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16l-32,0 l0,32 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-32 l-32,0 c-8.832,0-16-7.168-16-16
681
  S 103.168,303.848, 112,303.848z M 216.568,184.424c-6.248,6.248-16.376,6.248-22.624,0L 160,150.488l-33.944,33.936
684
  l-33.936,33.936l 33.936,33.936C 222.816,168.040, 222.816,178.168, 216.568,184.424z M 304,303.848l 96,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 304,335.848
685
  c-8.832,0-16-7.168-16-16S 295.168,303.848, 304,303.848z M 304,143.848l 96,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 304,175.848 c-8.832,0-16-7.168-16-16
686
  S 295.168,143.848, 304,143.848z M 304,79.848l 96,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 304,111.848 c-8.832,0-16-7.168-16-16S 295.168,79.848, 304,79.848z" />
687
+ <glyph unicode="&#xe04a;" d="M 212.408,140.328c 115.472,0, 204.952,65.952, 203.576,163.816c0,86.592-91.608,155.816-207.080,155.816
688
  c-115.488,0-209.080-69.224-209.080-155.816c0-53.936, 26.456-111.44, 81.704-139.688c0-0.328-0.096-0.576-0.096-0.936
689
  c0-23.44-19.512-55.576-27.2-68.832l 0.032,0 c-0.608-1.44-0.976-3-0.976-4.672c0-6.56, 5.288-11.832, 11.848-11.832
690
  c 0.968,0, 2.544,0.2, 3.112,0.2c 0.16,0, 0.216,0, 0.2-0.048c 40.832,6.672, 101.128,52.624, 110.064,63.512
699
  c 7.744-9.392, 51.112-50.752, 86.408-56.504c-0.016,0.032, 0.032,0.032, 0.184,0.032c 0.472,0, 1.84-0.168, 2.672-0.168
700
  c 5.672,0, 10.248,4.56, 10.248,10.232c0,1.44-0.328,2.8-0.84,4.032l 0.032,0 c-6.64,11.44-17.064,44.872-17.064,65.128
701
  c0,0.312-0.096,0.528-0.096,0.816C 490.048,92.672, 512.168,128.296, 512.168,174.904z" />
702
+ <glyph unicode="&#xe04b;" d="M 480.008,384.264L 352.208,384.264 L 352.208,415.264 c0,26.472-21.528,48-48,48L 207.992,463.264 c-26.472,0-48-21.528-48-48l0-31 L 32.008,384.264 c-17.592,0-32-14.408-32-32l0-112.128
703
  l-0.016,0 l0-32 l 0.016,0 l0-191.408 c0-17.592, 14.408-32, 32-32l 448,0 c 17.592,0, 32,14.408, 32,32L 512.008,352.264 C 512.008,369.856, 497.6,384.264, 480.008,384.264z
704
  M 191.992,415.264c0,8.832, 7.168,16, 16,16l 96.216,0 c 8.832,0, 16-7.168, 16-16l0-31 L 191.992,384.264 L 191.992,415.264 z M 32.008,352.264l 448,0 l0-112.128 L 303.824,240.136 l0,16.376
705
  c0,17.64-14.36,32-32,32l-31.872,0 c-17.64,0-32-14.36-32-32l0-16.376 L 32.008,240.136 L 32.008,352.264 z M 271.848,175.936l-31.904,0 L 239.944,256.512 l 31.872,0 L 271.848,175.936z
706
  M 32.008,16.736L 32.008,208.144 l 175.936,0 l0-32.2 c0-17.64, 14.36-32, 32-32l 31.872,0 c 17.64,0, 32,14.36, 32,32l0,32.2 l 176.184,0 l0-191.408 L 32.008,16.736 z" />
707
+ <glyph unicode="&#xe04c;" d="M 476.040,479.224L 264.52,421.928c-5.376-1.44-17.048-1.424-22.408,0.080L 36.040,479.112
708
  C 17.648,484.176-0.168,470.912-0.168,451.976l0-389.056 c0-16.048, 12.168-31.392, 27.656-35.704l 206.080-57.112c 5.512-1.528, 12.608-2.376, 19.968-2.376
709
  c 5.048,0, 12.504,0.392, 19.36,2.264l 211.512,57.296c 15.528,4.2, 27.752,19.512, 27.752,35.624L 512.16,451.976 C 512.168,470.896, 494.352,484.208, 476.040,479.224
710
  z M 240,1.528L 35.536,58.056c-1.544,0.424-3.704,3.248-3.704,4.856L 31.832,446.928 l 201.736-55.768c 1.952-0.544, 4.144-0.968, 6.432-1.328L 240,1.528 z
721
  c 6.984,0, 13.408,4.608, 15.392,11.672C 210.784,221.016, 205.832,229.848, 197.312,232.256z M 197.312,136.256l-111.968,31.512
722
  c-8.456,2.36-17.344-2.576-19.736-11.080s 2.56-17.328, 11.080-19.736l 111.968-31.512c 1.44-0.408, 2.904-0.592, 4.344-0.592
723
  c 6.984,0, 13.408,4.608, 15.392,11.672C 210.784,125.024, 205.832,133.848, 197.312,136.256z" />
724
+ <glyph unicode="&#xe04d;" d="M 507.832,338c-2.984,4.232-7.832,6.752-13,6.752L 444.96,344.752 L 342.392,432.168c-12.488,12.488-32.76,12.504-45.248,0L 196.32,344.752
725
  l-41.048,0 l-25.704,88.64c-10.080,34.904-34.032,38.672-43.856,38.672L 17.168,472.064 c-8.784,0-15.888-7.112-15.888-15.888s 7.112-15.888, 15.888-15.888l 68.528,0
726
  c 2.168,0, 8.784,0, 13.296-15.592l 88.424-324.968c 1.92-6.856, 8.168-11.592, 15.296-11.592l 215.984,0 c 6.704,0, 12.688,4.2, 14.952,10.512
727
  l 76.128,224.84C 511.528,328.36, 510.8,333.784, 507.832,338z M 319.768,409.536l 76.016-64.792L 243.728,344.744 L 319.768,409.536z M 407.512,119.904L 214.768,119.904
728
  l-50.576,193.064l 308.048,0 L 407.512,119.904z M 376,55.936c-22.096,0-40-17.904-40-40s 17.904-40, 40-40s 40,17.904, 40,40S 398.096,55.936, 376,55.936z
729
  M 232,55.936c-22.096,0-40-17.904-40-40s 17.904-40, 40-40s 40,17.904, 40,40S 254.096,55.936, 232,55.936z" />
730
+ <glyph unicode="&#xe04e;" d="M 507.832,338c-2.984,4.232-7.832,6.752-13,6.752L 155.264,344.752 l-25.704,88.64
731
  c-10.080,34.904-34.032,38.672-43.856,38.672L 17.168,472.064 c-8.784,0-15.888-7.112-15.888-15.888s 7.112-15.888, 15.888-15.888l 68.528,0
732
  c 2.168,0, 8.784,0, 13.296-15.592l 88.424-324.968c 1.92-6.856, 8.168-11.592, 15.296-11.592l 215.984,0 c 6.704,0, 12.688,4.2, 14.952,10.512
733
  l 76.128,224.84C 511.528,328.36, 510.8,333.784, 507.832,338z M 407.512,119.904L 214.768,119.904 l-50.576,193.064l 308.048,0 L 407.512,119.904z M 376,55.936
734
  c-22.096,0-40-17.904-40-40s 17.904-40, 40-40s 40,17.904, 40,40S 398.096,55.936, 376,55.936z M 232,55.936c-22.096,0-40-17.904-40-40s 17.904-40, 40-40
735
  s 40,17.904, 40,40S 254.096,55.936, 232,55.936z" />
736
+ <glyph unicode="&#xe04f;" d="M 432,400.648L 336.408,400.648 L 336.408,431.336 c0,26.472-21.528,48-48,48l-63.816,0 c-26.472,0-48-21.528-48-48l0-30.688 L 80,400.648 c-17.672,0-32-14.328-32-32l0-367.984
737
  c0-17.672, 14.328-32, 32-32l 352,0 c 17.672,0, 32,14.328, 32,32L 464,368.648 C 464,386.32, 449.672,400.648, 432,400.648z M 208.592,431.336c0,8.832, 7.168,16, 16,16l 63.816,0
738
  c 8.832,0, 16-7.168, 16-16l0-30.688 L 208.592,400.648 L 208.592,431.336 z M 432,0.664L 80,0.664 L 80,368.648 l 96.592,0 l0-32.92 c0,0-0.424-15.984, 15.904-15.984
739
  c 18,0, 16.096,15.984, 16.096,15.984l0,32.92 l 95.816,0 l0-32.92 c0,0-1.064-16.064, 15.936-16.064c 16,0, 16.064,16.064, 16.064,16.064l0,32.92 L 432,368.648 L 432,0.664 z
740
  " />
741
+ <glyph unicode="&#xe050;" d="M 495.032,8.832c-0.168,0-0.36,0-0.544,0.016c-8.096,0.264-13.2,6.544-13.888,14.608c-0.544,5.936-16.984,149.544-241.128,149.392
742
  l0-91.832 c0-6.184-3.56-11.832-9.168-14.472c-5.544-2.656-12.216-1.84-16.984,2.112L 5.832,240.544c-3.72,3.048-5.856,7.592-5.84,12.392
743
  s 2.168,9.344, 5.888,12.376L 213.36,435.592c 4.784,3.904, 11.392,4.656, 16.968,2.048c 5.576-2.656, 9.144-8.28, 9.144-14.456l0-89.816
744
  c 92.984-2.952, 165.496-32.856, 212.168-87.488c 75.968-88.888, 59.016-218.080, 58.216-223.456C 508.672,14.592, 502.92,8.832, 495.032,8.832z
745
  M 223.472,205.096c 0.016,0, 0.032,0, 0.032,0c 160.112-0.096, 221.296-54.16, 256.232-101.904c-5.112,38.248-20.032,84.36-52.504,122.016
746
  c-43.168,50.048-112.72,76.424-203.768,76.424c-8.84,0-16,7.16-16,16l0,71.888 L 41.248,252.84l 166.216-137.952l0,74.2
747
  c0,4.248, 1.688,8.328, 4.704,11.328C 215.168,203.408, 219.232,205.096, 223.472,205.096z" />
748
+ <glyph unicode="&#xe051;" d="M 16.968,8.832c 0.168,0, 0.36,0, 0.544,0.016c 8.096,0.264, 13.2,6.544, 13.888,14.608c 0.544,5.936, 16.488,149.544, 240.624,149.392
749
  l 0.504-91.832c0-6.184, 3.56-11.832, 9.168-14.472c 5.544-2.656, 12.216-1.84, 16.984,2.112l 207.488,171.888
750
  c 3.72,3.048, 5.856,7.592, 5.84,12.392s-2.168,9.344-5.888,12.376L 298.64,435.592c-4.784,3.904-11.392,4.656-16.968,2.048
751
  c-5.576-2.656-9.144-8.28-9.144-14.456l-0.504-89.816C 179.048,330.424, 107.040,300.512, 60.36,245.888
753
  C 128.392,205, 67.2,150.936, 32.264,103.184c 5.112,38.248, 20.032,84.36, 52.504,122.016c 43.168,50.048, 112.72,76.424, 203.768,76.424
754
  c 8.84,0, 16,7.16, 16,16l0,71.888 l 166.216-136.672L 304.528,114.888l0,74.2 c0,4.248-1.688,8.328-4.704,11.328
755
  C 296.832,203.408, 292.768,205.096, 288.528,205.096z" />
756
+ <glyph unicode="&#xe052;" d="M 503.184,372.032c-5.392,2.488-11.792,1.544-16.28-2.424l-80.656-72.448l-72.816,74.704l 72.096,83.264
757
  c 3.92,4.528, 4.872,10.768, 2.432,16.256s-7.832,8.848-13.76,8.848l-4.344,0 c-44.56,0-121.488-3.832-155.832-38.672l-6.928-6.88
758
  c-36.64-37.384-43.144-98.688-23.84-145.288L 18.616,100.944c-24.896-25.24-24.896-66.16,0-91.408l 22.536-22.848
759
  C 53.6-25.928, 69.92-32.24, 86.24-32.24c 16.312,0, 32.632,6.312, 45.072,18.928l 187.36,188.864c 17.72-9.576, 42-15.832, 62.392-15.832
764
  c-7.712,31.192-3.216,74.304, 21.008,99.024l 6.896,6.96c 20.776,21.080, 74.728,27.312, 104.6,29.152l-58.68-67.768
765
  c-5.248-6.064-4.984-15.2, 0.608-20.936L 394.72,265.28c 5.624-5.792, 14.72-6.128, 20.776-0.76l 65.304,58.816
766
  C 478.856,291.656, 472.704,245.648, 452.832,225.496z" />
767
+ <glyph unicode="&#xe053;" d="M 512.16,225.208c0-8.832-7.144-15.992-15.984-15.992L 271.736,209.216 L 271.736,47.12
768
  c0-43.576-35.456-79.040-79.048-79.040c-43.592,0-79.056,35.464-79.056,79.040c0,8.832, 7.16,15.992, 15.992,15.992s 15.992-7.16, 15.992-15.992
769
  c0-25.952, 21.112-47.064, 47.080-47.064c 25.96,0, 47.080,21.112, 47.080,47.064L 239.776,209.216 L 15.832,209.216 c-8.832,0-15.992,7.168-15.992,15.992
770
  c0,123.648, 90.456,202.056, 239.928,207.24L 239.768,463.936 c0,8.832, 7.16,15.984, 15.992,15.984c 8.84,0, 15.984-7.16, 15.984-15.984l0-31.488
771
  C 421.248,427.272, 512.16,348.856, 512.16,225.208z M 479.576,241.192C 471.688,341.456, 390.128,400.752, 255.752,400.752
772
  c-134.376,0-215.448-59.296-223.328-159.552L 479.576,241.2 z" />
773
+ <glyph unicode="&#xe054;" d="M 448.4,400.488L 335.76,400.488 L 335.76,444.12 c0,20.264-16.504,36.248-36.768,36.248L 213,480.368 c-20.264,0-36.76-15.984-36.76-36.248l0-43.632 L 63.6,400.488
774
  c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 22.008,0 l 37.12-369.96c 1.552-17.312, 16.304-30.888, 33.568-30.888l 199.4,0 c 17.264,0, 32,13.576, 33.544,30.736
775
  l 37.152,370.12l 22.008,0 c 8.84,0, 16,7.168, 16,16S 457.24,400.488, 448.4,400.488z M 208.24,444.12c0,2.616, 2.136,4.752, 4.76,4.752l 85.992,0
776
  c 2.624,0, 4.768-2.136, 4.768-4.752l0-43.632 L 208.24,400.488 L 208.24,444.12 z M 357.384,1.4c-0.080-0.888-1.128-1.768-1.688-1.768L 156.296-0.368
777
  c-0.56,0-1.616,0.872-1.712,1.92l-36.816,366.928l 276.456,0 L 357.384,1.4z" />
778
+ <glyph unicode="&#xe055;" d="M 511.992,271.864L 511.992,441.048 C 511.992,462.52, 494.52,480, 473.056,480L 307.464,479.976L 300.368,480
779
  c-10.84,0-27.248,0-37.96-10.72L 9.44,216.304C 3.36,210.224,0,202.152,0,193.56c0-8.608, 3.344-16.688, 9.424-22.768l 193.4-193.36
780
  C 208.88-28.656, 216.96-32, 225.552-32s 16.68,3.344, 22.744,9.424l 252.976,252.984C 512.12,241.232, 512.056,256.816, 511.992,271.864z
781
  M 478.648,253.032L 225.44,0.064L 32.064,193.672L 284.76,446.424C 287.304,448, 296.464,448, 300.256,448l 7.2-0.024L 473.056,448
782
  c 3.832,0, 6.936-3.12, 6.936-6.952l0-169.312 C 480.024,265.648, 480.056,255.464, 478.648,253.032z M 384.008,416c-35.344,0-64-28.656-64-64s 28.656-64, 64-64
783
  s 64,28.656, 64,64S 419.352,416, 384.008,416z M 384.008,320c-17.672,0-32,14.328-32,32s 14.328,32, 32,32s 32-14.328, 32-32S 401.68,320, 384.008,320z" />
784
+ <glyph unicode="&#xe056;" d="M 256,480C 114.616,480,0,365.384,0,224s 114.616-256, 256-256s 256,114.616, 256,256S 397.384,480, 256,480z
785
  M 320,438.512c 72.112-21.496, 128.824-78.4, 150.352-150.512L 366.568,288 c-11.208,19.264-27.296,35.336-46.568,46.528L 320,438.512 z M 351.816,223.896
786
  c0-52.968-42.896-95.904-95.816-95.904s-95.816,42.936-95.816,95.904S 203.088,319.808, 256,319.808S 351.816,276.864, 351.816,223.896z
787
  M 224,445.536c 10.456,1.496, 21.128,2.312, 32,2.312c 10.864,0, 21.544-0.816, 32-2.312l0-97.904 c-10.24,2.648-20.928,4.2-32,4.2
792
  C 234.248,97.552, 244.928,96, 256,96s 21.76,1.552, 32,4.2L 288,2.312 z M 320,9.336L 320,113.304 c 19.328,11.224, 35.448,27.368, 46.656,46.696l 103.736,0
793
  C 448.896,87.832, 392.16,30.84, 320,9.336z M 379.752,192c 2.624,10.2, 4.080,20.88, 4.080,31.912c0,11.096-1.464,21.832-4.128,32.088l 97.704,0
794
  c 1.504-10.496, 2.44-21.168, 2.44-32.080c0-10.848-0.92-21.488-2.416-31.92L 379.752,192 z" />
795
+ <glyph unicode="&#xe057;" d="M 342.952,288.408L 480.584,425.192l-0.448-77.536c-0.144-6.464, 4.984-12.088, 11.456-11.944
796
  l 8.208,0.008c 6.472,0.152, 11.824,4, 11.96,10.464l 0.336,115.504c0,0.112-0.44,0.2-0.44,0.312l 0.632,5.856
797
  c 0.064,3.248-0.696,6.144-2.792,8.216c-2.072,2.088-4.976,3.36-8.2,3.272l-5.848-0.136c-0.112,0-0.2-0.040-0.32-0.056
798
  L 380.384,479.656c-6.464-0.144-11.816-5.488-11.96-11.96l-0.016-8.208c 0.984-7.624, 6.976-12.080, 13.44-11.936l 75.624-0.2L 320.328,311.040
810
  C 7.472,479.432, 4.552,478.16, 2.496,476.072C 0.392,474-0.368,471.104-0.296,467.856L 0.336,462c0-0.112-0.44-0.192-0.44-0.312
811
  l 0.336-115.504c 0.144-6.464, 5.488-10.312, 11.96-10.464l 8.712-0.008c 6.464-0.144, 11.592,5.48, 11.448,11.944L 31.912,424.768l 137.632-136.36
812
  c 6.24-6.248, 16.376-6.248, 22.624,0c 6.248,6.248, 6.248,16.384,0,22.632L 55.024,447.336z" />
813
+ <glyph unicode="&#xe058;" d="M 191.6,306.6L 191.264,422.104c-0.144,6.464-5.496,10.312-11.96,10.464l-8.208,0.008
814
  c-6.472,0.144-11.592-5.488-11.456-11.944l 0.448-77.624L 26.952,474.872c-6.248,6.248-16.376,6.248-22.624,0s-6.248-16.376,0-22.624
815
  l 132.56-131.304l-75.544-0.2c-6.464,0.144-12.456-4.32-13.44-11.936l 0.016-8.208c 0.16-6.472, 5.504-11.824, 11.96-11.968l 114.752,0.504
816
  c 0.128-0.008, 0.208-0.056, 0.32-0.056l 5.848-0.136c 3.224-0.088, 6.136,1.176, 8.2,3.272c 2.104,2.072, 2.856,4.976, 2.792,8.216
828
  c-3.224,0.088-6.144-2.176-8.2-4.272c-2.104-2.072-2.856-4.968-2.792-8.216l 0.632-5.848c0-0.12-0.44-0.192-0.44-0.304
829
  l 0.336-115.504c 0.144-6.464, 5.488-10.304, 11.96-10.464l 8.712-0.016c 6.472-0.144, 11.592,5.488, 11.448,11.952l-0.44,77.264l 133.632-131.512
830
  c 6.248-6.248, 16.376-6.248, 22.624,0s 6.248,16.376,0,22.624L 375.032,127.552z" />
831
+ <glyph unicode="&#xe059;" d="M 201.152,227.072l 19.632,27.624l-67.152,91.64L 1.368,346.336 l0-32 l 135.744,0 L 201.152,227.072z
832
  M 459.392,314.336l-38.768-34.768c-4.672-4.472-6.184-11.72-1.512-16.184l 2.736-4.032c 4.688-4.472, 12.248-4.472, 16.912,0l 63.872,57.752
833
  c 0.088,0.080, 0.192,0.096, 0.272,0.168l 4.232,4.048c 2.336,2.248, 3.504,5.184, 3.488,8.144c 0.016,2.936-1.152,5.888-3.488,8.112
834
  l-4.232,4.048c-0.080,0.080-0.168,0.112-0.272,0.184l-64.864,59.216c-4.68,4.472-12.232,4.472-16.92,0l-2.736-4.032
838
  l-38.608-34.624c-4.672-4.472-6.184-11.72-1.512-16.184l 2.736-4.032c 4.688-4.472, 12.248-4.472, 16.912,0l 63.872,57.752
839
  c 0.088,0.080, 0.192,0.096, 0.272,0.168l 4.232,4.048c 2.336,2.248, 3.504,5.184, 3.488,8.144c 0.016,2.936-1.152,5.888-3.488,8.112
840
  L 502.904,53.616z" />
841
+ <glyph unicode="&#xe05a;" d="M 450.92,5.312l-416,0 l0,320 l 128.8,0 l 32.36,31.168l-0.832,0.832L 34.92,357.312
842
  c-17.672,0-32-14.328-32-32l0-320 c0-17.672, 14.328-32, 32-32l 416,0 c 17.672,0, 32,14.328, 32,32L 482.92,255.648 l-32-30.544L 450.92,5.312 z M 135.064,133.312l 32.24,0
843
  c 22.432,127.248, 133.272,224, 266.944,224c 5.608,0, 10.928-0.048, 16.312-0.088l-58.624-58.616c-6.232-6.248-6.232-16.376,0-22.624
844
  c 3.128-3.128, 7.232-4.688, 11.328-4.688s 8.168,1.56, 11.296,4.688l 94.512,97L 414.56,470c-6.232,6.248-16.36,6.248-22.624,0
845
  c-6.232-6.248-6.232-16.376,0-22.624l 58.088-58.080c-5.016,0.008-9.984,0.024-15.104,0.024C 283.392,389.32, 158.136,278.344, 135.064,133.312z" />
846
+ <glyph unicode="&#xe05b;" d="M 432,128c-26.344,0-49.648-12.792-64.216-32.44l-210.68,107.36
847
  C 158.936,209.648, 160,216.688, 160,224c0,9.152-1.608,17.904-4.44,26.088L 367.44,352.896C 381.984,332.992, 405.448,320, 432,320
848
  c 44.184,0, 80,35.824, 80,80c0,44.184-35.816,80-80,80S 352,444.184, 352,400c0-6.216, 0.784-12.232, 2.12-18.040L 139.2,277.672
849
  C 124.56,293.808, 103.504,304, 80,304C 35.816,304,0,268.184,0,224c0-44.176, 35.816-80, 80-80c 25.448,0, 48.064,11.912, 62.712,30.432l 211.552-107.816
850
  C 352.832,60.632, 352,54.424, 352,48c0-44.184, 35.816-80, 80-80s 80,35.816, 80,80S 476.184,128, 432,128z M 432,448c 26.504,0, 48-21.496, 48-48s-21.496-48-48-48
851
  s-48,21.496-48,48S 405.496,448, 432,448z M 80,176c-26.512,0-48,21.496-48,48s 21.488,48, 48,48c 26.504,0, 48-21.496, 48-48S 106.504,176, 80,176z M 432,0
852
  c-26.504,0-48,21.496-48,48s 21.496,48, 48,48s 48-21.496, 48-48S 458.504,0, 432,0z" />
853
+ <glyph unicode="&#xe05c;" d="M 104.84,38.368c-10.056-20.904-16.4-34.832-72.344-36.864c 1.608,53.984, 11.896,59.776, 32.496,70.040
854
  c 8.648,4.312, 19.416,9.672, 31.056,18.624L 76.568,115.040c-9.2-7.064-17.664-10.784-25.848-14.856c-34.32-17.112-50.496-33.968-50.496-114.328
855
  l 0.272-16.352l 15.728,0.352c 84.816,0, 100.664,19.16, 116.552,52.16c 3.48,7.232, 5.416,12.12, 11.28,21.864l-23.728,21.552
856
  C 113.216,55.728, 108.776,46.496, 104.84,38.368z M 352.48,385.672c-35.384,0-64.176-28.792-64.176-64.168c0-35.392, 28.8-64.176, 64.176-64.176
867
  c-0.616,2.608-1.888,5.032-3.696,7.032c-29.424,32.608-73.872,81.904-77.28,85.816c-2.224,2.704-5.304,4.624-8.784,5.424l-73.296,16.768
868
  l 35.952,38l 91.016,0 c 5.56,0, 10.728,2.888, 13.632,7.624c 7.040,11.464, 15.208,27.768, 24.672,46.648c 16.024,31.976, 35.96,74.272, 53.56,94.816
869
  c 20.792,24.264, 41.912,39.504, 68.448,49.424c 59.048,22.064, 119.984,24.384, 147.84,24.176C 480.952,419.384, 479.84,350.976, 461,300.264z" />
870
+ <glyph unicode="&#xe05d;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256.008,114.608, 256.008,256C 512.008,365.384, 397.392,480, 256,480z
871
  M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224.008-100.488, 224.008-224S 379.512-0.504, 256-0.504z M 232.472,79.76l 40.256,0
872
  l0,40.624 l-40.256,0 L 232.472,79.76 z M 255.528,368.232c-23.44,0-42.752-6.32-57.92-18.944c-15.168-12.632-22.544-37.928-22.168-58.888l 0.592-1.168l 36.72,0
873
  c0,12.504, 4.168,30.472, 12.504,36.92c 8.328,6.44, 18.424,9.664, 30.28,9.664c 13.664,0, 24.168-3.712, 31.536-11.136
875
  c-13.288-11.984-21.496-21.616-24.616-28.904c-3.128-7.296-4.752-20.384-4.872-39.256l 38.48,0 c0,11.84, 0.752,20.568, 2.248,26.168
876
  c 1.488,5.592, 5.752,11.912, 12.784,18.944c 15.112,14.576, 27.248,28.832, 36.44,42.776c 9.168,13.928, 13.76,29.296, 13.76,46.096
877
  c0,23.44-7.088,41.704-21.288,54.784C 301.104,361.696, 281.176,368.232, 255.528,368.232z" />
878
+ <glyph unicode="&#xe05e;" d="M 287.8,433.296c-8.832,0-16-7.168-16-16s 7.168-16, 16-16C 401.024,401.296, 480,318.56, 480,205.344C 480,92.112, 387.888,0, 274.664,0
879
  C 161.448,0, 78.704,81.8, 78.704,195.032c0,8.832-7.168,16-16,16s-16-7.168-16-16C 46.704,64.16, 143.8-32, 274.664-32S 512,74.472, 512,205.344
880
  C 512,336.2, 418.664,433.296, 287.8,433.296z M 240.128,255.872L 240.128,464 c0,8.832-7.168,16-16,16C 99.504,480,0,380.496,0,255.872c0-8.832, 7.168-16, 16-16
881
  l 208.128,0 C 232.96,239.872, 240.128,247.040, 240.128,255.872z M 208.128,271.872L 32.656,271.872 C 40.384,366.12, 113.88,439.616, 208.128,447.344L 208.128,271.872 z" />
882
+ <glyph unicode="&#xe05f;" d="M 482.128,455.168c-17.432,16.704-36.664,25.168-57.192,25.168c-32.096,0-55.512-20.736-61.92-27.088
883
  C 354,444.32, 46.44,136.648, 46.44,136.648c-2.008-2.016-3.472-4.536-4.224-7.296c-6.936-25.632-41.68-139.36-42.024-140.504
884
  c-1.784-5.824-0.192-12.168, 4.104-16.464c 3.088-3.072, 7.2-4.72, 11.416-4.72c 1.656,0, 3.328,0.248, 4.96,0.784
885
  c 1.176,0.384, 118.568,38.328, 137.888,44.096c 2.544,0.768, 4.872,2.144, 6.768,4.016c 12.208,12.064, 299.064,295.728, 318.104,315.392
891
  c-5.056,13.024-13.928,29.76-29.288,45.248c-15.696,15.824-31.616,25.16-44.376,30.68c 1.088,1.080, 1.928,1.928, 2.256,2.248
892
  c 1.832,1.808, 18.448,17.688, 39.16,17.688c 11.92,0, 23.624-5.44, 34.808-16.16c 13.256-12.712, 20.088-25.256, 20.312-37.296
893
  C 480.264,381.856, 473.592,368.624, 460.208,354.816z" />
894
+ <glyph unicode="&#xe060;" d="M 399.672-0.144l-368,0 l0,400 l 224.8,0 l 32.352,31.168l-0.832,0.832L 31.672,431.856 c-17.672,0-32-14.328-32-32l0-400 c0-17.672, 14.328-32, 32-32l 368,0
895
  c 17.672,0, 32,14.328, 32,32L 431.672,234.184 l-32-30.544L 399.672-0.144 z M 487.112,459.28c-14.44,13.84-30.376,20.856-47.376,20.856
896
  c-26.608,0-46.016-17.184-51.296-22.448c-7.488-7.392-219.584-219.176-219.584-219.176c-1.664-1.696-2.88-3.768-3.504-6.072
897
  c-5.744-21.224-34.536-115.496-34.824-116.432c-1.488-4.832-0.16-10.096, 3.4-13.608c 2.552-2.56, 5.96-3.92, 9.456-3.92
900
  M 465.216,379.44c-8.904-9.184-78.624-78.080-207.224-204.768l-9.84-9.704c-14.744-4.56-50.048-15.904-76.736-24.512
901
  c 8.592,28.376, 18.904,62.656, 23.504,78.872C 222.4,246.768, 404.112,428.2, 411.016,435.016c 1.344,1.344, 13.608,13.128, 28.72,13.128
902
  c 8.576,0, 16.84-3.912, 25.232-11.96c 10.032-9.624, 15.2-18.872, 15.344-27.512C 480.472,399.776, 475.392,389.944, 465.216,379.44z" />
903
+ <glyph unicode="&#xe061;" d="M 495.864,127.296c 0.008,0.28, 0.080,0.536, 0.080,0.816L 495.944,461.624
904
  c 0.192,1.752, 0.128,3.56-0.288,5.376c-1.368,7.456-7.864,13.112-15.712,13.112c-2.944,0-5.672-0.848-8.040-2.24L 172.968,400.048
905
  c-5.384-1.336-9.376-5.36-11.016-10.336c-1.24-2.272-2-4.832-2-7.6L 159.952,95.84 c-15.232,10.192-34.704,16.328-55.936,16.328
906
  c-48.768,0-88.32-32.304-88.32-72.136c0-39.84, 39.552-72.152, 88.32-72.152c 48.784,0, 88.304,32.304, 88.304,72.152
910
  c 29.616,0, 51.2-16.696, 55.592-33.704l0-0.184 c0-1.616, 0.312-3.144, 0.76-4.608c 0.032-0.496, 0.112-0.984, 0.112-1.48
911
  C 160.816,21.12, 137.616,0.024, 104.352,0.024z M 407.848,80.024c-32.984,0-55.976,21.088-55.976,40S 374.864,160, 407.848,160
912
  c 32.976,0, 55.968-21.064, 55.968-39.976S 440.832,80.024, 407.848,80.024z" />
913
+ <glyph unicode="&#xe062;" d="M 426.304,318.352L 269.848,474.808c-4.96,4.96-12.336,5.92-18.304,3.008
914
  c-6.272-2.168-10.8-8.056-10.8-15.064l0-354.2 c-16.96,12.56-39.216,20.264-63.688,20.264c-53.032,0-96.056-35.888-96.056-80.144
915
  c0-44.272, 43.024-80.168, 96.056-80.168c 53.056,0, 96.040,35.888, 96.040,80.168c0,1.96-0.184,3.88-0.352,5.816L 272.744,426.656 L 403.68,295.728
916
  c 6.24-6.248, 16.376-6.248, 22.624,0S 432.552,312.112, 426.304,318.352z M 176.688,0.712c-37.824,0-64.176,25.272-64.176,47.936
917
  s 26.36,47.912, 64.176,47.912c 37.016,0, 63-24.2, 64.064-46.496l0-2.84 C 239.68,24.936, 213.704,0.712, 176.688,0.712z" />
918
+ <glyph unicode="&#xe063;" d="M 255.44,128l 3.8,0 C 303.72,128, 336,160.8, 336,205.984L 336,396.688 C 336,443.408, 302.28,480, 259.232,480
919
  L 255.44,480 C 211.632,480, 176,442.624, 176,396.688l0-190.704 C 176,161.528, 210.152,128, 255.44,128z M 208,396.688C 208,424.984, 229.28,448, 255.44,448l 3.8,0
920
  C 284.752,448, 304,425.936, 304,396.688l0-190.704 C 304,178.488, 286.016,160, 259.232,160L 255.44,160 C 227.504,160, 208,178.904, 208,205.984L 208,396.688 z M 400,304
921
  c-8.84,0-16-7.168-16-16l0-66.536 C 384,126.264, 350.016,80, 280.128,80L 232.56,80 C 141.16,80, 128,156.92, 128,221.464L 128,288 c0,8.832-7.168,16-16,16
922
  s-16-7.168-16-16l0-66.536 C 96,111.216, 141.944,48, 232.56,48L 240,48 l0-48 L 160,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 192,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16
923
  L 272,0 l0,48 l 8.128,0 C 342.112,48, 416,78.096, 416,221.464L 416,288 C 416,296.832, 408.84,304, 400,304z" />
924
+ <glyph unicode="&#xe064;" d="M 480,429.080L 32,429.080 c-17.672,0-32-14.328-32-32l0-288 c0-17.68, 14.328-32, 32-32l 80,0
925
  c 10.248,0, 16,13.16, 16,15.992l0,0.008 c0,2.912-5.44,16.208-16,16.208L 51.52,109.288 c-10.688,0-19.36,8.672-19.36,19.36L 32.16,377
926
  c0,10.696, 8.664,19.36, 19.36,19.36l 409.136,0.504c 10.688,0, 19.36-8.664, 19.36-19.36l0-248.848 c0-10.688-8.672-19.36-19.36-19.36L 259.072,109.296
927
  l 37.992,34.456c 4.672,4.472, 6.184,11.704, 1.512,16.168l-2.736,4.032c-4.688,4.472-12.248,4.472-16.92,0l-64.864-59.216
928
  c-0.096-0.080-0.184-0.112-0.264-0.184l-4.24-4.048c-2.336-2.216-3.504-5.168-3.488-8.112c-0.016-2.952, 1.144-5.888, 3.488-8.144
929
  l 4.24-4.048c 0.080-0.080, 0.184-0.096, 0.264-0.168l 63.864-57.752c 4.672-4.472, 12.232-4.472, 16.92,0l 2.736,4.032
930
  c 4.672,4.472, 3.16,11.72-1.512,16.184l-38.568,34.584L 480,77.080 c 17.672,0, 32,14.32, 32,32l0,288 C 512,414.752, 497.672,429.080, 480,429.080z" />
931
+ <glyph unicode="&#xe065;" d="M 58.416,208.168l 277.224,0 c 8.848,0, 16,7.168, 16,16s-7.152,16-16,16L 59.416,240.168 l 57.88,57.88
932
  c 6.248,6.248, 6.248,16.376,0,22.624s-16.376,6.248-22.624,0L 0.168,223.672l 94.504-97c 3.128-3.128, 7.216-4.688, 11.312-4.688
933
  s 8.184,1.56, 11.312,4.688c 6.248,6.248, 6.248,16.376,0,22.624L 58.416,208.168z M 479.832,480L 207.832,480 c-17.68,0-32-14.328-32-32l0-144 l 32.208,0 L 208.040,428.488
934
  c0,10.688, 8.672,19.36, 19.36,19.36L 459.76,447.848 c 10.696,0, 19.36-8.672, 19.36-19.36l 0.504-409.144c0-10.688-8.664-19.36-19.36-19.36L 227.408-0.016
935
  c-10.688,0-19.36,8.672-19.36,19.36L 208.048,144.528 l-32.208-0.040L 175.84,0 c0-17.672, 14.32-32, 32-32l 271.992,0 c 17.68,0, 32.008,14.328, 32.008,32L 511.84,448
936
  C 511.832,465.672, 497.504,480, 479.832,480z" />
937
+ <glyph unicode="&#xe066;" d="M 266.264,149.296c-6.256-6.248-6.256-16.376,0-22.624
938
  c 3.128-3.128, 7.216-4.688, 11.312-4.688s 8.184,1.56, 11.312,4.688l 94.504,97L 288.888,320.68c-6.248,6.248-16.376,6.248-22.624,0
939
  c-6.256-6.248-6.256-16.376,0-22.624l 57.872-57.88L 15.92,240.176 c-8.84,0-16-7.168-16-16s 7.16-16, 16-16l 309.224,0 L 266.264,149.296z M 480.080,480l-288,0
940
  c-17.68,0-32.008-14.328-32.008-32l0-144 l 32.216,0 L 192.288,428.488 c0,10.688, 8.672,19.36, 19.36,19.36L 460,447.848 c 10.704,0, 19.36-8.672, 19.36-19.36l 0.504-409.144
941
  c0-10.688-8.656-19.36-19.36-19.36L 211.656-0.016 c-10.688,0-19.36,8.672-19.36,19.36L 192.296,144.528 l-32.216-0.040L 160.080,0 c0-17.672, 14.328-32, 32.008-32l 288,0
942
  c 17.672,0, 32,14.328, 32,32L 512.088,448 C 512.080,465.672, 497.752,480, 480.080,480z" />
943
+ <glyph unicode="&#xe067;" d="M 48,256L 16,256 c-8.832,0-16-7.168-16-16l0-32 c0-8.832, 7.168-16, 16-16l 32,0 c 8.832,0, 16,7.168, 16,16l0,32
944
  C 64,248.832, 56.832,256, 48,256z M 496,240L 160,240 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 336,0 c 8.832,0, 16,7.168, 16,16S 504.832,240, 496,240z M 48,128L 16,128
945
  c-8.832,0-16-7.168-16-16l0-32 c0-8.832, 7.168-16, 16-16l 32,0 c 8.832,0, 16,7.168, 16,16l0,32 C 64,120.832, 56.832,128, 48,128z M 496,112L 160,112 c-8.832,0-16-7.168-16-16
946
  s 7.168-16, 16-16l 336,0 c 8.832,0, 16,7.168, 16,16S 504.832,112, 496,112z M 48,384L 16,384 c-8.832,0-16-7.168-16-16l0-32 c0-8.832, 7.168-16, 16-16l 32,0 c 8.832,0, 16,7.168, 16,16
947
  l0,32 C 64,376.832, 56.832,384, 48,384z M 160,336l 336,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 160,368 c-8.832,0-16-7.168-16-16S 151.168,336, 160,336z" />
948
+ <glyph unicode="&#xe068;" d="M 304.272-31.872c-145.416,0-146.536,6.032-164.544,19.592c-9.552,7.184-27.576,12.16-93.408,16.448
949
  c-4.776,0.312-9.32,2.144-12.368,5.84c-1.4,1.704-34.296,49.68-34.296,126.52c0,75.72, 23.544,110.232, 24.552,111.832
950
  c 2.92,4.68, 8.048,7.52, 13.56,7.52c 54.056,0, 128.992,69, 179.368,189.448c 8.712,20.832, 10.512,34.536, 42.512,34.536
951
  c 18.2,0, 38.6-13.032, 48.672-29.752c 20.664-34.16, 10.168-107.528, 0.464-146.736c 33,0.264, 92.736,0.712, 121.16,0.712
960
  c-3,4.472-3.224,10.024-1.464,15.112c 15.632,45.016, 24.36,115.64, 9.864,139.768c-4.272,7.112-5.248,14.216-21.248,14.216
961
  c-2.216,0-7.496-1.752-13-14.872C 193.168,305.088, 113.312,231.096, 47.904,224.424c-5.64-12.864-16.248-39.52-16.248-87.888
962
  C 31.656,87.168, 47.296,48.976, 54.808,36.616z" />
963
+ <glyph unicode="&#xe069;" d="M 508.352,223.32L 268.168,474.904c-3.016,3.152-7.184,4.92-11.544,4.92c-4.352,0-8.52-1.776-11.544-4.92L 3.656,223.328
964
  c-6.12-6.376-5.904-16.496, 0.472-22.624c 6.376-6.112, 16.496-5.936, 22.624,0.472l 21.504,22.416l0-239.416 c0-8.84, 7.168-16, 16-16l 111.776,0
965
  c 8.816,0, 15.968,7.128, 16,15.952l 0.504,159.832l 127.496,0 l0-159.784 c0-8.84, 7.16-16, 16-16l 111.736,0 c 8.84,0, 16,7.16, 16,16L 463.768,223.672 l 21.496-22.52
966
  c 3.144-3.264, 7.344-4.92, 11.544-4.92c 3.984,0, 7.984,1.472, 11.080,4.472C 514.256,206.816, 514.464,216.944, 508.352,223.32z
967
  M 431.768,252.592l0-252.416 l-79.736,0 L 352.032,159.952 c0,8.84-7.16,16-16,16l-159.44,0 c-8.816,0-15.968-7.128-16-15.952l-0.504-159.832l-79.832,0 L 80.256,252.592
968
  c0,1.32-0.208,2.584-0.504,3.816l 176.88,184.312l 175.712-184.104C 432,255.32, 431.768,253.984, 431.768,252.592z" />
969
+ <glyph unicode="&#xe06a;" d="M 480-32L 320-32 c-17.672,0-32,14.328-32,32L 288,160 c0,17.672, 14.328,32, 32,32l 160,0 c 17.672,0, 32-14.328, 32-32l0-160
970
  C 512-17.672, 497.672-32, 480-32z M 480,160L 320,160 l0-160 l 160,0 L 480,160 z M 480,256L 320,256 c-17.672,0-32,14.328-32,32L 288,448 c0,17.672, 14.328,32, 32,32l 160,0 c 17.672,0, 32-14.328, 32-32l0-160
971
  C 512,270.328, 497.672,256, 480,256z M 480,448L 320,448 l0-160 l 160,0 L 480,448 z M 192-32L 32-32 c-17.672,0-32,14.328-32,32L0,160 c0,17.672, 14.328,32, 32,32l 160,0 c 17.672,0, 32-14.328, 32-32l0-160
972
  C 224-17.672, 209.672-32, 192-32z M 192,160L 32,160 l0-160 l 160,0 L 192,160 z M 192,256L 32,256 c-17.672,0-32,14.328-32,32L0,448 c0,17.672, 14.328,32, 32,32l 160,0 c 17.672,0, 32-14.328, 32-32l0-160
973
  C 224,270.328, 209.672,256, 192,256z M 192,448L 32,448 l0-160 l 160,0 L 192,448 z" />
974
+ <glyph unicode="&#xe06b;" d="M 472,368c-22.096,0-40-17.912-40-40c0-4.536, 0.92-8.816, 2.304-12.88L 336.8,231.16C 329.96,236.608, 321.424,240, 312,240
975
  c-10.872,0-20.704-4.368-27.904-11.408l-76.376,38.24C 206.232,287.576, 189.12,304, 168,304c-22.088,0-40-17.912-40-40c0-6.048, 1.44-11.72, 3.84-16.856
976
  L 53.968,157.352C 49.6,158.984, 44.936,160, 40,160c-22.088,0-40-17.912-40-40s 17.912-40, 40-40s 40,17.912, 40,40c0,5.32-1.088,10.384-2.976,15.024
977
  l 79.136,90.96C 159.928,224.816, 163.848,224, 168,224c 11.64,0, 22.024,5.056, 29.336,13l 74.704-37.456C 272.304,177.672, 290.064,160, 312,160
978
  c 22.096,0, 40,17.912, 40,40c0,0.712-0.168,1.376-0.208,2.080L 455.84,291.464C 460.792,289.272, 466.232,288, 472,288c 22.096,0, 40,17.904, 40,40
979
  C 512,350.088, 494.096,368, 472,368z" />
980
+ <glyph unicode="&#xe06c;" d="M 80.024,286.064L 80.024,464 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-177.92
981
  C 20.36,278.952-0.176,253.856-0.176,224c0-29.864, 20.536-54.952, 48.2-62.088L 48.024-16 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 80.024,161.928
982
  c 27.64,7.152, 48.152,32.224, 48.152,62.072C 128.176,253.84, 107.664,278.92, 80.024,286.064z M 64.208,191.984C 64.152,191.984, 64.088,192, 64.024,192
983
  c-0.072,0-0.136-0.016-0.208-0.024C 46.24,192.080, 31.968,206.4, 31.968,224c0,17.592, 14.28,31.92, 31.856,32.016
993
  c-0.064,0-0.12,0.016-0.176,0.016c-0.072,0-0.144-0.016-0.208-0.016C 430.248,288.080, 415.968,302.4, 415.968,320
994
  c0,17.592, 14.28,31.92, 31.848,32.016c 0.072,0, 0.144-0.016, 0.208-0.016c 0.064,0, 0.12,0.016, 0.176,0.016
995
  c 17.568-0.12, 31.832-14.432, 31.832-32.016C 480.048,302.408, 465.784,288.096, 448.208,287.984z" />
996
+ <glyph unicode="&#xe06d;" d="M 207.72,479.88c 145.416,0, 146.544-6.032, 164.552-19.592c 9.552-7.184, 27.576-12.168, 93.416-16.456
997
  c 4.784-0.312, 9.32-2.144, 12.368-5.84c 1.4-1.704, 34.296-49.68, 34.296-126.512c0-75.72-23.544-110.24-24.552-111.848
998
  c-2.92-4.672-8.048-7.512-13.56-7.512c-54.056,0-128.992-69-179.376-189.456c-8.712-20.832-10.504-34.528-42.512-34.528
999
  c-18.2,0-38.6,13.032-48.688,29.752c-20.656,34.16-10.168,107.528-0.456,146.736c-33-0.264-92.736-0.72-121.16-0.72
1008
  s 3.232-10.032, 1.464-15.112c-15.624-45.016-24.352-115.64-9.856-139.768c 4.264-7.112, 5.248-14.216, 21.248-14.216
1009
  c 2.216,0, 7.496,1.752, 13,14.872c 53.496,127.904, 133.352,201.904, 198.76,208.576c 5.64,12.864, 16.248,39.52, 16.248,87.896
1010
  C 480.352,360.832, 464.712,399.016, 457.192,411.376z" />
1011
+ <glyph unicode="&#xe06e;" d="M 460.544,428.384L 292.416,35.488l-59.656,172.256L 60.664,259.76L 460.544,428.384 M 502.232,479.616c-3.048,0-6.76-0.864-11.048-2.68
1012
  L 13.856,274.4c-17.192-7.296-18.28-21.352-2.424-31.232l 197.648-61.792l 64.68-201.632c 4.64-7.592, 10.248-11.36, 15.632-11.36
1013
  c 5.968,0, 11.648,4.576, 15.52,13.624L 509.048,458.872C 514.576,471.816, 511.432,479.616, 502.232,479.616L 502.232,479.616z" />
1014
+ <glyph unicode="&#xe06f;" d="M 487.472,447.304c0,11.616-6.296,22.328-16.456,27.968
1015
  c-4.84,2.696-10.184,4.032-15.544,4.032c-5.856,0-11.736-1.616-16.888-4.824L 70.72,251.184c-7.976-4.952-13.256-13.104-14.688-22.2L 56.032,464
1016
  c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-480 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 56.032,219.032 c 1.44-9.104, 6.72-17.256, 14.688-22.192L 439.080-26.48
1017
  c 5.16-3.216, 11.032-4.832, 16.888-4.832c 5.36,0, 10.704,1.344, 15.544,4.032c 10.16,5.64, 16.456,16.344, 16.456,27.968L 487.472,447.304z
1018
  M 87.6,224.008L 455.472,447.304l 0.504-446.608L 87.6,224.008z" />
1019
+ <glyph unicode="&#xe070;" d="M 286.96,381.048L 34.32,224l 252.64-157.048L 286.96,190.44 l 192-123.488L 478.96,381.048 l-192-123.496L 286.96,385.472 M 285.632,413.048
1020
  c 5.352,0, 11.368-1.336, 16.208-4.032c 10.16-5.64, 17.12-16.352, 17.12-27.968l0-65.92 L 468.072,408.224c 5.16,3.2, 10.688,4.824, 16.56,4.824
1021
  c 5.344,0, 7.864-1.336, 12.712-4.032c 10.16-5.64, 13.616-16.352, 13.616-27.968l0-314.096 c0-11.624-3.624-22.328-13.784-27.968
1022
  c-4.84-2.688-8.864-4.032-14.216-4.032c-5.864,0-10.392,1.608-15.552,4.832L 318.96,132.872l0-65.92 c0-11.624-6.96-22.328-17.12-27.968
1023
  c-4.84-2.688-10.52-4.032-15.88-4.032c-5.856,0-11.896,1.608-17.056,4.832L 16.176,196.832C 6.792,202.656, 1.040,212.936, 1.040,224
1024
  s 5.688,21.336, 15.080,27.176L 268.752,408.224C 273.904,411.432, 279.768,413.048, 285.632,413.048L 285.632,413.048z" />
1025
+ <glyph unicode="&#xe071;" d="M 72.312,447.304l 367.872-223.296L 71.816,0.696L 72.312,447.304 M 72.312,479.304c-5.36,0-10.704-1.336-15.544-4.032
1026
  c-10.16-5.64-16.456-16.352-16.456-27.968L 39.816,0.696c0-11.624, 6.296-22.328, 16.456-27.968c 4.84-2.688, 10.184-4.032, 15.544-4.032
1027
  c 5.856,0, 11.736,1.608, 16.888,4.832l 368.36,223.312c 9.408,5.832, 15.128,16.112, 15.128,27.168s-5.72,21.336-15.128,27.176L 89.2,474.488
1028
  C 84.048,477.688, 78.168,479.304, 72.312,479.304L 72.312,479.304z" />
1029
+ <glyph unicode="&#xe072;" d="M 208.136,480L 96.032,480 c-8.832,0-16-7.16-16-16l0-480 c0-8.832, 7.168-16, 16-16l 112.104,0 c 8.84,0, 16,7.168, 16,16L 224.136,464
1030
  C 224.136,472.84, 216.976,480, 208.136,480z M 192.136,0L 112.032,0 L 112.032,448 l 80.104,0 L 192.136,0 z M 415.968,480L 304.44,480 c-8.84,0-16-7.16-16-16l0-480 c0-8.832, 7.16-16, 16-16
1031
  l 111.528,0 c 8.84,0, 16,7.168, 16,16L 431.968,464 C 431.968,472.84, 424.816,480, 415.968,480z M 399.968,0l-79.528,0 L 320.44,448 l 79.528,0 L 399.968,0 z" />
1032
+ <glyph unicode="&#xe073;" d="M 225.040,381.048L 477.68,224L 225.040,66.952L 225.040,190.44 l-192-123.488L 33.040,381.048 l 192-123.496L 225.040,385.472 M 226.368,413.048
1033
  c-5.36,0-11.368-1.336-16.216-4.032C 200,403.376, 193.040,392.664, 193.040,381.048l0-65.92 L 43.928,408.224c-5.16,3.2-10.688,4.824-16.56,4.824
1034
  c-5.344,0-7.864-1.336-12.72-4.032C 4.504,403.376, 1.040,392.664, 1.040,381.048l0-314.096 c0-11.624, 3.624-22.328, 13.784-27.968
1035
  c 4.84-2.688, 8.864-4.032, 14.216-4.032c 5.864,0, 10.392,1.608, 15.552,4.832L 193.040,132.872l0-65.92 c0-11.624, 6.96-22.328, 17.112-27.968
1036
  c 4.848-2.688, 10.528-4.032, 15.888-4.032c 5.856,0, 11.896,1.608, 17.056,4.832l 252.728,157.048c 9.392,5.832, 15.144,16.112, 15.144,27.168
1037
  s-5.688,21.336-15.080,27.176L 243.248,408.224C 238.096,411.432, 232.224,413.048, 226.368,413.048L 226.368,413.048z" />
1038
+ <glyph unicode="&#xe074;" d="M 471.968,480c-8.832,0-16-7.168-16-16l0-235 c-1.44,9.096-6.72,17.232-14.688,22.184
1039
  L 73.424,474.488c-5.16,3.2-11.032,4.824-16.888,4.824c-5.36,0-10.704-1.336-15.544-4.032c-10.16-5.64-16.456-16.352-16.456-27.968
1040
  L 24.032,0.696c0-11.624, 6.296-22.328, 16.456-27.968c 4.84-2.688, 10.184-4.032, 15.544-4.032c 5.856,0, 11.736,1.608, 16.888,4.832
1041
  L 441.28,196.832c 7.968,4.936, 13.248,13.080, 14.688,22.176L 455.968-16 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 487.968,464 C 487.968,472.832, 480.808,480, 471.968,480z
1042
  M 56.032,0.696L 56.528,447.304l 367.872-223.296L 56.032,0.696z" />
1043
+ <glyph unicode="&#xe075;" d="M 480,432.056L 351.888,432.056 L 351.888,463.944 c0,8.84-7.16,16-16,16s-16-7.16-16-16l0-31.88 l-128,0 L 191.888,463.944
1044
  c0,8.84-7.16,16-16,16c-8.84,0-16-7.16-16-16l0-31.88 L 32,432.064 c-17.672,0-32-14.328-32-32l0-400 c0-17.672, 14.328-32, 32-32l 448,0 c 17.672,0, 32,14.328, 32,32l0,400
1045
  C 512,417.728, 497.672,432.056, 480,432.056z M 480,0.064L 32,0.064 l0,400 l 127.888,0 l0-16.12 c0-8.84, 7.16-16, 16-16c 8.84,0, 16,7.16, 16,16L 191.888,400.056 l 128,0 l0-16.12
1046
  c0-8.84, 7.16-16, 16-16s 16,7.16, 16,16L 351.888,400.056 L 480,400.056 L 480,0.064 z M 368,224.056l 32,0 c 8.832,0, 16,7.168, 16,16l0,32 c0,8.832-7.168,16-16,16l-32,0
1050
  c 8.832,0, 16,7.168, 16,16l0,32 C 288,280.896, 280.832,288.056, 272,288.056z M 144,288.056l-32,0 c-8.832,0-16-7.168-16-16l0-32 c0-8.832, 7.168-16, 16-16l 32,0
1051
  c 8.832,0, 16,7.168, 16,16l0,32 C 160,280.896, 152.832,288.056, 144,288.056z M 144,160.064l-32,0 c-8.832,0-16-7.168-16-16l0-32 c0-8.84, 7.168-16, 16-16l 32,0
1052
  c 8.832,0, 16,7.16, 16,16l0,32 C 160,152.888, 152.832,160.064, 144,160.064z" />
1053
+ <glyph unicode="&#xe076;" d="M 255.992,480C 156.976,480, 79.432,399.448, 79.432,300.432c0-74.6, 36.64-110.128, 65.592-136.064c 18.64-16.712, 31.184-26.776, 31.184-39.176
1054
  l0-27.128 c0-0.696, 0.096-1.376, 0.184-2.064l-0.36,0 l0-46.312 C 176.040,0.832, 207.632-32, 256.568-32c 47.232,0, 79.472,32.832, 79.472,81.688L 336.040,96
1055
  l-0.464,0 c 0.088,0.688, 0.208,1.368, 0.208,2.064l0,27.128 c0,18.88, 14.016,30.296, 35.264,48.848c 28.752,25.104, 61.512,56.344, 61.512,126.392
1056
  C 432.568,399.448, 355.008,480, 255.992,480z M 255.384,0c-29.952,0-47.344,18.576-47.344,49.688l-0.232,21.336C 219.32,67.088, 235,64, 256,64
1058
  l0-20.216 c-7.592-4.24-21.592-9.28-48.064-9.28c-27.784,0-40.96,4.928-47.512,8.736l0,20.768 c0,27.304-21.344,44.648-41.84,63.008
1059
  c-27.16,24.336-54.936,51.92-54.936,112.232C 111.432,381.8, 174.632,448, 255.992,448c 81.376,0, 144.576-66.2, 144.576-147.568
1060
  C 400.568,244.92, 376.336,221.144, 350.008,198.144z" />
1061
+ <glyph unicode="&#xe077;" d="M 136.032,320.008L 24,320.008 c-8.84,0-16-7.16-16-16L 8-16 c0-8.84, 7.16-16, 16-16l 112.032,0 c 8.84,0, 16,7.16, 16,16L 152.032,304.008
1062
  C 152.032,312.848, 144.872,320.008, 136.032,320.008z M 120.032,0L 40,0 L 40,288.008 l 80.032,0 L 120.032,0 z M 311.872,224.872L 199.832,224.872 c-8.84,0-16-7.16-16-16L 183.832-16
1063
  c0-8.84, 7.16-16, 16-16l 112.040,0 c 8.84,0, 16,7.16, 16,16L 327.872,208.872 C 327.872,217.72, 320.72,224.872, 311.872,224.872z M 295.872,0L 215.832,0 L 215.832,192.872
1064
  l 80.040,0 L 295.872,0 z M 488,480L 376.136,480 c-8.84,0-16-7.16-16-16l0-480 c0-8.84, 7.16-16, 16-16L 488-32 c 8.84,0, 16,7.16, 16,16L 504,464 C 504,472.84, 496.84,480, 488,480z M 472,0
1065
  l-79.864,0 L 392.136,448 L 472,448 L 472,0 z" />
1066
+ <glyph unicode="&#xe078;" d="M 512,224C 512,365.392, 397.384,480, 256,480C 114.608,480,0,365.392,0,224c0-141.384, 114.608-256, 256-256C 397.384-32, 512,82.616, 512,224z M 31.504,224
1067
  C 31.504,347.512, 132.488,448, 256,448s 224-100.488, 224-224S 379.512,0, 256,0S 31.504,100.488, 31.504,224z M 272.168,111.84L 272.168,292.072 l 57.88-57.88
1068
  c 6.248-6.248, 16.376-6.248, 22.624,0s 6.248,16.376,0,22.624L 255.672,351.32L 158.672,256.816c-3.128-3.128-4.688-7.216-4.688-11.312
1069
  s 1.56-8.184, 4.688-11.312c 6.248-6.248, 16.376-6.248, 22.624,0l 58.872,58.88L 240.168,111.84 c0-8.84, 7.168-16, 16-16S 272.168,103, 272.168,111.84z" />
1070
+ <glyph unicode="&#xe079;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504
1071
  C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224S 379.512-0.504, 256-0.504z M 266.184,320.68
1072
  c-6.248-6.248-6.248-16.376,0-22.624l 57.88-57.88L 143.84,240.176 c-8.84,0-16-7.168-16-16s 7.16-16, 16-16l 181.232,0 l-58.88-58.872
1073
  c-6.248-6.248-6.248-16.376,0-22.624c 3.128-3.128, 7.216-4.688, 11.312-4.688s 8.184,1.56, 11.312,4.688l 94.504,97L 288.816,320.68
1074
  C 282.56,326.928, 272.44,326.928, 266.184,320.68z" />
1075
+ <glyph unicode="&#xe07a;" d="M 256,480C 114.608,480,0,365.384,0,224c0-141.392, 114.608-256, 256-256c 141.384,0, 256,114.608, 256,256C 512,365.384, 397.384,480, 256,480z M 256-0.504
1076
  C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224S 379.512-0.504, 256-0.504z M 368.16,240.168L 187.928,240.168 l 57.88,57.88
1077
  c 6.248,6.248, 6.248,16.376,0,22.624s-16.376,6.248-22.624,0L 128.68,223.672l 94.504-97c 3.128-3.128, 7.216-4.688, 11.312-4.688
1078
  s 8.184,1.56, 11.312,4.688c 6.248,6.248, 6.248,16.376,0,22.624l-58.88,58.872L 368.16,208.168 c 8.84,0, 16,7.168, 16,16S 377,240.168, 368.16,240.168z" />
1079
+ <glyph unicode="&#xe07b;" d="M0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480C 114.616,480,0,365.384,0,224z M 480.504,224
1080
  c0-123.512-100.984-224-224.504-224S 32,100.488, 32,224S 132.488,448, 256,448S 480.504,347.512, 480.504,224z M 239.832,336.16l0-180.224 l-57.88,57.88
1081
  c-6.248,6.248-16.376,6.248-22.624,0s-6.248-16.376,0-22.624l 97.008-94.504l 97,94.504c 3.128,3.128, 4.688,7.216, 4.688,11.312
1082
  s-1.56,8.184-4.688,11.312c-6.248,6.248-16.376,6.248-22.624,0l-58.872-58.88L 271.84,336.16 c0,8.84-7.168,16-16,16S 239.832,345, 239.832,336.16z" />
1083
+ <glyph unicode="&#xe07c;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1084
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 32,224c0,56.136, 20.808,107.48, 55.048,146.832l 315.928-315.928
1085
  C 363.608,20.464, 312.208-0.504, 256-0.504C 132.488-0.504, 32,100.488, 32,224z M 425.512,77.608L 109.704,393.416C 148.992,427.384, 200.12,448, 256,448
1086
  c 123.512,0, 224-100.488, 224-224C 480,168.168, 459.424,116.984, 425.512,77.608z" />
1087
+ <glyph unicode="&#xe07d;" d="M 256,416c 123.512,0, 224-71.776, 224-160c0-88.216-100.488-160-224-160l-7.568-0.032l-5.688-0.016c-8.792,0-14.544,0.232-23.536,1.576
1088
  l-17.928,2.56l-11.504-13.92c-5.288-6.392-32.272-28.56-62.056-42.832c 6.056,16.016, 10.52,33.504, 10.92,50.8l 0.16,0.952l0,2.736 l0,19.576
1089
  l-17.432,8.904C 64.568,155.36, 32,202.624, 32,256C 32,344.224, 132.488,416, 256,416 M 256,448C 114.6,448,0,362.032,0,256c0-66.032, 39.128-123.576, 106.792-158.168
1090
  c0-0.408-0.128-0.704-0.128-1.16c0-28.688-16.080-60.232-25.504-76.472l 0.024,0 C 80.44,18.456, 80,16.544, 80,14.496
1091
  C 80,6.456, 86.48,0, 94.504,0c 1.208,0, 3.128,0.248, 3.832,0.248c 0.168,0, 0.264,0, 0.248-0.048c 50,8.168, 104.976,52.344, 115.912,65.672
1092
  c 11.24-1.672, 18.832-1.92, 28.24-1.92C 246.704,63.952, 250.984,64, 256,64c 141.376,0, 256,85.952, 256,192C 512,362.032, 397.376,448, 256,448L 256,448z" />
1093
+ <glyph unicode="&#xe07e;" d="M 319.064,368.312c 0.64,0, 1.16-0.504, 1.16-1.12l0-63.936 c0-11.832, 6.528-22.712, 17-28.264c 4.704-2.504, 9.856-3.736, 15-3.736
1094
  c 6.28,0, 13.528,1.84, 18.92,5.496L 480,338.368L 480,110.16 L 370.544,169.92c-5.488,3.832-11.888,5.768-18.328,5.768
1095
  c-5.064,0-10.128-1.2-14.784-3.608c-10.56-5.512-17.2-16.44-17.216-28.344l-0.080-62.92c0-0.624-0.504-1.128-1.144-1.128L 33.144,79.688
1096
  C 32.504,79.688, 32,80.184, 32,80.8l 0.080,286.392c0,0.624, 0.504,1.12, 1.144,1.12L 319.064,368.312 M 495.184,384.328c-3.408,0-10.144-1.008-13.984-4.832
1098
  c0-18.28, 14.816-33.128, 33.144-33.128l 285.856,0 c 18.328,0, 33.144,14.84, 33.144,33.128l 0.080,62.872l 131.488-76.656
1099
  c 3.856-3.84, 8.128-3.344, 11.544-3.344c 3.544,0, 6.184,1.080, 6.512,1.216C 507.984,67.496, 512,73.496, 512,80.248L 512,367.736
1100
  c0,6.752-4.016,12.776-10.232,15.328C 501.408,383.224, 498.752,384.328, 495.184,384.328L 495.184,384.328z" />
1101
+ <glyph unicode="&#xe07f;" d="M 464,368l-73.592,0 L 352,432L 160,432 l-38.4-64L 48,368 c-16,0-48-16-48-47.504L0,64 c0-26.504, 24-48, 44.664-48l 420.336,0 C 486,16, 512,38.496, 512,63.496L 512,320
1102
  C 512,336, 496,368, 464,368z M 480,63.496c0-6.312-10.232-15.144-15-15.504L 44.76,47.992 C 41.056,48.296, 32,55.512, 32,64L 32,320.496
1103
  C 32,330.632, 45.616,335.744, 48,336l 91.72,0 l 9.32,15.536L 178.12,400l 156.824,0 l 28.56-48.472l 8.8-15.528L 464,336 c 11.28,0, 15.84-14.736, 16-16L 480,63.496 z M 256,320
1104
  c-61.856,0-112-50.144-112-112s 50.144-112, 112-112s 112,50.144, 112,112S 317.856,320, 256,320z M 256,128c-44.112,0-80,35.888-80,80s 35.888,80, 80,80
1105
  s 80-35.888, 80-80S 300.112,128, 256,128z" />
1106
+ <glyph unicode="&#xe080;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1107
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224
1108
  S 379.512-0.504, 256-0.504z M 358.168,317.672L 207.968,166.528l-67.64,67.64c-6.248,6.248-16.376,6.248-22.632,0
1109
  c-6.248-6.248-6.248-16.376,0-22.624l 79.192-79.2c 6.248-6.24, 16.376-6.24, 22.632,0c 0.72,0.72, 1.336,1.504, 1.896,2.32L 380.808,295.040
1110
  c 6.24,6.248, 6.24,16.376,0,22.632C 374.552,323.92, 364.424,323.92, 358.168,317.672z" />
1111
+ <glyph unicode="&#xe081;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1112
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224
1113
  S 379.512-0.504, 256-0.504z M 272,230.496L 272,384 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-160 c0-4.528, 1.896-8.6, 4.928-11.504
1114
  c 0.264-0.312, 0.48-0.648, 0.768-0.944l 79.192-79.2c 6.248-6.24, 16.376-6.24, 22.624,0c 6.248,6.248, 6.248,16.384,0,22.632L 272,230.496z" />
1115
+ <glyph unicode="&#xe082;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1116
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224
1117
  S 379.512-0.504, 256-0.504z M 346.504,314.504c-6.248,6.248-16.376,6.248-22.624,0L 256,246.624l-67.88,67.88
1118
  c-6.248,6.248-16.376,6.248-22.632,0c-6.248-6.248-6.248-16.376,0-22.624L 233.368,224l-67.88-67.88c-6.248-6.24-6.248-16.384,0-22.624
1119
  c 6.248-6.248, 16.376-6.248, 22.632,0L 256,201.376l 67.88-67.88c 6.248-6.248, 16.376-6.248, 22.624,0c 6.248,6.24, 6.248,16.384,0,22.624
1120
  L 278.624,224l 67.88,67.88C 352.76,298.136, 352.76,308.264, 346.504,314.504z" />
1121
+ <glyph unicode="&#xe083;" d="M 381.512,350C 359.2,409.216, 311.232,446.72, 238.784,446.72c-92.192,0-156.696-68.456-162.24-157.768C 32.088,274.736,0,229.392,0,178.032
1122
  c0-62.872, 49.424-115.984, 107.912-115.984l 14.224,0 c 8.832,0, 16,7.16, 16,16s-7.168,16-16,16l-14.224,0 c-41.152,0-76.416,38.456-76.416,83.984
1123
  c0,40.232, 28.208,76.528, 63.592,82.608l 14.52,2.504l-1.296,14.672l-0.12,0.184c 0.008,77.936, 51.304,136.72, 130.592,136.72
1124
  c 63.552,0, 99.256-31.312, 115.776-84.72l 3.416-11.016l 11.536-0.248c 59.432-1.248, 111.544-49.472, 111.544-109.392
1128
  c-4.472-4.688-4.472-12.24,0-16.912l 57.752-63.872c 0.080-0.080, 0.096-0.184, 0.168-0.264l 4.048-4.232
1129
  c 2.248-2.344, 5.184-3.504, 8.144-3.488c 2.936-0.016, 5.888,1.144, 8.112,3.488l 4.048,4.232c 0.080,0.080, 0.12,0.168, 0.184,0.264
1130
  l 59.216,64.872c 4.472,4.672, 4.472,10.224,0,14.912L 323.168,92.264z" />
1131
+ <glyph unicode="&#xe084;" d="M 381.512,350.016C 359.2,409.232, 311.232,446.736, 238.776,446.736c-92.192,0-156.696-68.456-162.24-157.768
1132
  C 32.088,274.752,0,229.408,0,178.048c0-62.872, 49.424-115.984, 107.912-115.984l 46.224,0 c 8.832,0, 16,7.168, 16,16c0,8.84-7.168,16-16,16l-46.224,0
1133
  c-41.152,0-76.416,38.456-76.416,83.984c0,40.232, 28.208,76.528, 63.592,82.608l 14.52,2.504l-1.288,14.664l-0.12,0.184
1134
  c0,77.936, 51.288,136.72, 130.576,136.72c 63.552,0, 99.256-31.312, 115.768-84.72l 3.424-11.016l 11.528-0.248
1138
  l-4.048-4.232c-0.080-0.080-0.096-0.176-0.168-0.256l-57.752-63.872c-4.472-4.672-4.472-12.232,0-16.92l 4.032-2.736
1139
  c 4.472-4.672, 11.72-3.16, 16.184,1.512l 34.056,37.968l0-161.216 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 271.808,178.328 l 35.184-38.816
1140
  c 4.472-4.672, 11.704-6.184, 16.168-1.512l 4.032,2.736c 4.472,4.688, 4.472,12.248,0,16.92L 267.992,222.528z" />
1141
+ <glyph unicode="&#xe085;" d="M 280,480L 104,480 c-17.672,0-32-14.328-32-32l0-448 c0-17.672, 14.328-32, 32-32l 304,0 c 17.672,0, 32,14.328, 32,32L 440,319.992 L 280,480z M 408,306.736L 408,304 L 264,304 L 264,448 l 2.752,0
1142
  L 408,306.736z M 104,0L 104,448 l 128,0 l0-176 l 176,0 l0-272 L 104,0 z" />
1143
+ <glyph unicode="&#xe086;" d="M 511.728,364c 0.496,3.072, 0.088,6.24-1.24,9.136C 506.456,390.856, 493.648,400, 472,400L 56,400 c-19.040,0-39.552-7-49.64-20.736
1144
  c-0.872-0.664-1.704-1.416-2.456-2.288c-3.224-3.72-4.352-8.504-3.632-13.016C 0.128,362.664,0,361.36,0,360l0-256 c0-26.512, 29.496-56, 56-56
1145
  l 416,0 c 26.512,0, 40,29.488, 40,56L 512,360 C 512,361.416, 511.816,362.656, 511.728,364z M 56,368l 416,0 c 0.096,0, 0.144,0, 0.216,0L 256,195.672L 40.656,367.296
1146
  C 45.552,368.2, 51.576,368, 56,368z M 472,80L 56,80 c-8.824,0-24,15.168-24,24L 32,333.224 L 245.52,162.4c 3.008-2.6, 6.744-3.896, 10.48-3.896
1147
  s 7.472,1.296, 10.488,3.896L 480,333.216L 480,104 C 480,95.168, 480.832,80, 472,80z" />
1148
+ <glyph unicode="&#xe087;" d="M 257.736,319.296c-53.016,0-96-42.984-96-96c0-53.008, 42.984-96, 96-96s 96,42.984, 96,96
1149
  C 353.736,276.312, 310.752,319.296, 257.736,319.296z M 257.736,159.296c-35.288,0-64.736,29.408-64.736,64.696c0,35.288, 28.712,64, 64,64
1150
  c 35.296,0, 64-28.712, 64-64C 321,188.704, 293.032,159.296, 257.736,159.296z M 511.84,227.712c-0.184,0.808-0.104,1.664-0.344,2.456
1151
  c-0.104,0.336-0.312,0.528-0.432,0.824c-0.168,0.456-0.128,0.992-0.36,1.432C 464.168,338.976, 363.872,400.304, 256.992,400.304
1156
  c 0.112,0.28, 0.328,0.488, 0.424,0.8c 0.248,0.784, 0.168,1.64, 0.344,2.456c 0.28,1.432, 0.544,2.832, 0.544,4.312
1157
  C 512.392,224.872, 512.128,226.264, 511.84,227.712z M 256,79.704c-90.648,0-179.872,47.784-223.712,143.84
1158
  c 43.424,95.736, 133.84,144.752, 224.712,144.752c 90.84,0, 179.248-49.072, 222.688-144.856C 436.28,127.736, 346.872,79.704, 256,79.704z" />
1159
+ <glyph unicode="&#xe088;" d="M 340,432.336c-80,0-101.328,48-202.656,48C 72,480.336, 32,430.992, 32,430.992l0-447.328
1160
  c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 64,187.6 c 16.88,10.888, 40.168,20.736, 69.344,20.736c 101.328,0, 130.656-48, 210.656-48s 136,48, 136,48l0,272
1161
  C 480,480.336, 420,432.336, 340,432.336z M 448,224.64c-18.080-11.792-56.392-32.304-104-32.304c-31.456,0-52.92,8.632-80.112,19.568
1162
  c-33.136,13.32-70.704,28.432-130.544,28.432c-27.344,0-50.536-6.88-69.344-16.080L 64,417.992 c 12.048,10.96, 38.312,30.344, 73.344,30.344
1163
  c 47.056,0, 73.544-11.424, 101.592-23.504c 27.936-12.040, 56.832-24.496, 101.064-24.496c 42.624,0, 80.064,11.784, 108,24.456L 448,224.64 z" />
1164
+ <glyph unicode="&#xe089;" d="M 177.376,392l 39.312-38.624L 226.744,344L 240,344 l 240,0 l0-288 L 32,56 L 32,392 l 144,0 M 192,424L 32,424 c-17.672,0-32-14.328-32-32l0-336 c0-17.672, 14.328-32, 32-32l 448,0
1165
  c 17.672,0, 32,14.328, 32,32L 512,344 c0,17.672-14.328,32-32,32L 240,376 L 192,424L 192,424z" />
1166
+ <glyph unicode="&#xe08a;" d="M 143.992,422.92c 15.688,0, 44.048-7.504, 90.048-52.808l 22.808-22.456l 22.464,22.816C 311.248,402.92, 345.232,423.072, 368,423.072
1167
  c 30.704,0, 54.904-10.504, 78.504-34.048c 22.232-22.184, 34.496-51.68, 34.496-83.056c 0.016-31.392-12.224-60.912-34.704-83.336
1168
  c-1.832-1.856-98.496-106.152-179.48-193.552c-3.816-3.624-8.176-4.16-10.496-4.16c-2.288,0-6.6,0.512-10.4,4.048
1169
  c-19.736,21.952-162.776,181-179.408,197.616C 44.248,248.792, 32,278.312, 32,309.696c 0.008,31.376, 12.256,60.864, 34.52,83.072
1171
  c 16.712-16.72, 178.928-197.168, 178.928-197.168c 9.24-9.248, 21.376-13.84, 33.48-13.84c 12.112,0, 24.2,4.592, 33.456,13.84
1172
  c0,0, 177.44,191.512, 179.328,193.424c 58.52,58.44, 58.52,153.12,0,211.504c-29.056,29-61.512,43.392-101.104,43.392
1173
  c-37.824,0-80-30.16-111.504-62.16C 223.992,424.92, 183.12,454.92, 143.992,454.92L 143.992,454.92z" />
1174
+ <glyph unicode="&#xe08b;" d="M 288,112l-16,0 L 272,255 c0,0.168-0.048,0.328-0.048,0.504S 272,255.832, 272,256c0,8.832-7.168,16-16,16l-32,0 c-8.832,0-16-7.168-16-16
1175
  s 7.168-16, 16-16l 16,0 l0-128 l-16,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 64,0 c 8.832,0, 16,7.168, 16,16S 296.832,112, 288,112z M 256,304c 17.672,0, 32,14.328, 32,32
1176
  s-14.328,32-32,32s-32-14.328-32-32S 238.328,304, 256,304z M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256c 141.392,0, 256,114.608, 256,256
1177
  C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224S 379.512-0.504, 256-0.504z" />
1178
+ <glyph unicode="&#xe08c;" d="M 327.848,480c-79.528,0-144-64.576-144-144.232c0-35.704, 13.016-68.312, 34.472-93.504
1179
  c-4.416,0.272-8.92-1.216-12.296-4.592L 44.832,75.48c-6.24-6.248-6.24-16.384,0-22.624c 0.12-0.12, 0.256-0.192, 0.384-0.312
1180
  c 0.040-0.040, 0.064-0.088, 0.104-0.128l 78.456-79.952c 6.24-6.248, 16.376-6.248, 22.624,0s 6.248,16.384,0,22.624l-67.736,69.032l 41.248,41.504
1181
  l 67.864-69.16c 6.24-6.248, 16.376-6.248, 22.624,0s 6.24,16.384,0,22.624l-67.928,69.224l 86.192,86.736c 3.336,3.336, 4.832,7.768, 4.608,12.136
1182
  c 25.312-22.144, 58.336-35.656, 94.584-35.656c 79.528,0, 144,64.576, 144,144.24C 471.848,415.424, 407.384,480, 327.848,480z M 327.848,224
1183
  c-61.624,0-112,50.136-112,112c0,61.872, 50.376,112, 112,112s 112-50.128, 112-112C 439.848,274.136, 389.48,224, 327.848,224z" />
1184
+ <glyph unicode="&#xe08d;" d="M 147.832,113.776c 3.128-3.128, 7.216-4.688, 11.312-4.688s 8.184,1.56, 11.312,4.688L 364.288,309.12
1185
  c 6.248,6.248, 6.248,16.376,0,22.624s-16.376,6.248-22.624,0L 147.832,136.4C 141.576,130.152, 141.576,120.024, 147.832,113.776z M 237.936,147.848
1186
  c 5.288-23.312-0.416-46.2-18.432-64.216l-64.624-62.624c-13.6-13.592-31.68-21.080-50.912-21.080s-37.312,7.488-50.904,21.080
1187
  c-28.072,28.080-28.072,73.768-0.168,101.672l 63.128,65.128c 13.6,13.592, 31.68,21.088, 50.912,21.088c 6.576,0, 12.912-1.176, 19.088-2.872
1193
  c 28.064-28.080, 28.064-73.768, 0.16-101.672l-64.624-64.624c-13.592-13.592-31.688-21.080-50.904-21.080c-4.904,0-9.216-0.496-13.92,0.464
1194
  l-25.488-25.504c 12.736-5.296, 25.816-6.968, 39.408-6.968c 26.608,0, 53.216,10.152, 73.528,30.464l 64.472,64.472
1195
  C 522.176,343.144, 522.176,408.984, 481.568,449.608z" />
1196
+ <glyph unicode="&#xe08e;" d="M 400,288l-16,0 l0,61.064 C 384,422.488, 330.872,480, 255.408,480C 179.64,480, 128,421.264, 128,349.064L 128,288 l-16,0
1197
  c-35.296,0-64-28.704-64-64l0-192 c0-35.296, 28.704-64, 64-64l 288,0 c 35.296,0, 64,28.704, 64,64L 464,224 C 464,259.296, 435.296,288, 400,288z M 160,349.064
1198
  C 160,403.608, 197.28,448, 255.408,448C 312.936,448, 352,404.544, 352,349.064L 352,288 L 160,288 L 160,349.064 z M 432,32c0-17.64-14.36-32-32-32L 112,0 c-17.64,0-32,14.36-32,32L 80,224
1199
  c0,17.64, 14.36,32, 32,32l 288,0 c 17.64,0, 32-14.36, 32-32L 432,32 z M 256,192c-17.672,0-32-14.328-32-32c0-11.816, 6.48-22.016, 16-27.56L 240,80 c0-8.832, 7.168-16, 16-16
1200
  s 16,7.168, 16,16l0,52.44 c 9.52,5.544, 16,15.752, 16,27.56C 288,177.672, 273.672,192, 256,192z" />
1201
+ <glyph unicode="&#xe08f;" d="M 400,287.448L 171.52,287.448 l-8.28,37.136
1202
  c-14.12,52.688, 10.408,105.216, 66.544,120.256c 55.568,14.888, 104.544-16.968, 118.912-70.56l 6.8-26.984c 2.288-8.536, 11.056-13.6, 19.6-11.312
1203
  c 8.536,2.288, 13.6,11.056, 11.312,19.592l-6.808,26.984C 360.608,453.48, 294.408,495.28, 221.504,475.752C 148.32,456.144, 113.648,386.040, 132.336,316.296
1204
  l 6.432-28.848L 112,287.448 c-35.296,0-64-28.704-64-64l0-192 c0-35.296, 28.704-64, 64-64l 288,0 c 35.296,0, 64,28.704, 64,64l0,192 C 464,258.744, 435.296,287.448, 400,287.448z
1205
  M 432,31.448c0-17.64-14.36-32-32-32L 112-0.552 c-17.64,0-32,14.36-32,32l0,192 c0,17.64, 14.36,32, 32,32l 288,0 c 17.64,0, 32-14.36, 32-32L 432,31.448 z M 256,191.448
1206
  c-17.672,0-32-14.328-32-32c0-11.816, 6.48-22.016, 16-27.56l0-52.44 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,52.44 c 9.52,5.544, 16,15.752, 16,27.56
1207
  C 288,177.12, 273.672,191.448, 256,191.448z" />
1208
+ <glyph unicode="&#xe090;" d="M 507.32-4.52L 351.856,151.896c 28.976,34.704, 46.44,79.352, 46.44,128.104
1209
  c0,110.456-89.544,200-200,200c-110.456,0-200-89.544-200-200c0-110.456, 89.544-200, 200-200c 50.184,0, 96.024,18.528, 131.144,49.072l 155.248-156.224
1210
  c 6.248-6.248, 16.384-6.248, 22.632,0C 513.56-20.904, 513.56-10.776, 507.32-4.52z M 198.296,111.736
1211
  C 105.368,111.736, 30.032,187.072, 30.032,280S 105.368,448.264, 198.296,448.264S 366.56,372.928, 366.56,280S 291.224,111.736, 198.296,111.736z" />
1212
+ <glyph unicode="&#xe091;" d="M 507.312-4.52L 365.8,137.864c 30.304,36.2, 48.544,82.88, 48.544,133.856
1213
  C 414.344,386.752, 321.592,480, 206.568,480S-1.704,386.752-1.704,271.728c0-115.024, 93.248-208.272, 208.272-208.272
1214
  c 52.504,0, 100.336,19.48, 136.848,51.536l 141.264-142.152c 6.248-6.248, 16.384-6.248, 22.624,0C 513.56-20.904, 513.56-10.776, 507.312-4.52z
1215
  M 206.296,96c-96.776,0-176,79.224-176,176s 79.224,176, 176,176s 176-79.224, 176-176S 303.072,96, 206.296,96z M 286.296,288l-64,0 l0,64 c0,8.832-7.168,16-16,16
1216
  s-16-7.168-16-16l0-64 l-64,0 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 64,0 l0-64 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,64 l 64,0 c 8.832,0, 16,7.168, 16,16
1217
  S 295.136,288, 286.296,288z" />
1218
+ <glyph unicode="&#xe092;" d="M 507.312-4.52L 365.8,137.864c 30.304,36.2, 48.544,82.88, 48.544,133.856
1219
  C 414.344,386.752, 321.592,480, 206.568,480S-1.704,386.752-1.704,271.728c0-115.024, 93.248-208.272, 208.272-208.272
1220
  c 52.504,0, 100.336,19.48, 136.848,51.536l 141.264-142.152c 6.248-6.248, 16.384-6.248, 22.624,0C 513.56-20.904, 513.56-10.776, 507.312-4.52z
1221
  M 206.296,96c-96.776,0-176,79.224-176,176s 79.224,176, 176,176s 176-79.224, 176-176S 303.072,96, 206.296,96z M 286.296,288l-160,0 c-8.832,0-16-7.168-16-16
1222
  s 7.168-16, 16-16l 160,0 c 8.832,0, 16,7.168, 16,16S 295.136,288, 286.296,288z" />
1223
+ <glyph unicode="&#xe093;" d="M 86.36-23.816c-21.704,0-42.544,8.984-59.152,25.608C-9.616,38.736-9.616,98.824, 27.2,135.744L 314.336,440.656
1224
  c 44.8,44.872, 113.424,40.84, 163.504-9.304c 22.44-22.48, 35.032-54.888, 34.56-88.952c-0.472-33.704-13.64-65.96-36.144-88.504L 259.248,22.872
1225
  c-6.040-6.472-16.168-6.768-22.616-0.696c-6.432,6.080-6.744,16.224-0.68,22.672l 217.336,231.376c 17,17.032, 26.752,41.192, 27.112,66.624
1226
  c 0.36,25.448-8.832,49.44-25.184,65.832c-30.72,30.784-80.736,46.904-117.92,9.632L 50.168,113.4c-24.688-24.752-24.68-64.504-0.32-88.928
1229
  c-6.44,6.064-6.736,16.224-0.68,22.656l 172.272,183.232c 13.544,13.608, 27.392,20.984, 41.488,22.248c 11,0.976, 27.36-1.368, 44.048-18.104
1230
  c 24.768-24.816, 21.688-61.216-7.64-90.608L 153.592,6.64c-18.24-18.304-40.264-28.936-62.36-30.296
1231
  C 89.608-23.768, 87.984-23.816, 86.36-23.816z" />
1232
+ <glyph unicode="&#xe094;" d="M 502.016,480c-3.048,0-6.76-0.864-11.048-2.68L 13.64,274.776c-17.184-7.288-18.272-21.344-2.416-31.224l 134.88-84.016
1233
  c 15.856-9.872, 36.824-31.040, 46.592-47.024l 80.856-132.384c 4.64-7.592, 10.248-11.36, 15.64-11.36c 5.96,0, 11.64,4.576, 15.512,13.616
1234
  L 508.832,459.256C 514.36,472.192, 511.208,480, 502.016,480z M 162.776,188.040L 53.448,256.144L 420.256,411.768L 184.16,171.672
1235
  C 176.944,178.072, 169.616,183.784, 162.776,188.040z M 286.36,22.368l-65.216,106.76c-3.848,6.304-8.928,13.024-14.592,19.696l 237.192,241.192
1236
  L 286.36,22.368z" />
1237
+ <glyph unicode="&#xe095;" d="M 256,480C 114.616,480,0,365.384,0,224c0-141.392, 114.616-256, 256-256
1238
  c 141.392,0, 256,114.608, 256,256C 512,365.384, 397.392,480, 256,480z M 256-0.504C 132.488-0.504, 32,100.488, 32,224S 132.488,448, 256,448s 224-100.488, 224-224
1239
  S 379.512-0.504, 256-0.504z M 368,240L 272,240 L 272,336 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-96 L 144,240 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 96,0 l0-96
1240
  c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 272,208 l 96,0 c 8.832,0, 16,7.168, 16,16S 376.832,240, 368,240z" />
1241
+ <glyph unicode="&#xe096;" d="M 257.832,480.184C 152.88,480.184, 64,390.8, 64,284.912c0-110.88, 103.016-224.272, 172.312-303.968c 0.264-0.32, 11.464-12.76, 25.264-12.76
1242
  l 1.224,0 c 13.8,0, 24.92,12.44, 25.2,12.76c 65.032,74.76, 160,198.024, 160,303.968C 448,390.8, 378.672,480.184, 257.832,480.184z M 264.248,2.408
1243
  c-0.56-0.56-1.376-1.184-2.096-1.704c-0.736,0.504-1.536,1.144-2.128,1.704l-8.368,9.624C 185.96,87.4, 96,190.608, 96,284.912
1244
  c0,88.504, 74.112,163.28, 161.832,163.28C 367.096,448.192, 416,366.192, 416,284.912C 416,213.32, 364.936,118.264, 264.248,2.408z M 256.56,383.296
1245
  c-53.016,0-96-42.984-96-96s 42.984-96, 96-96s 96,42.984, 96,96S 309.576,383.296, 256.56,383.296z M 256.56,223.296
1246
  c-35.288,0-64.736,29.408-64.736,64.704c0,35.288, 28.712,64, 64,64c 35.312,0, 64-28.712, 64-64C 319.84,252.704, 291.872,223.296, 256.56,223.296z" />
1247
+ <glyph unicode="&#xe097;" d="M 350.776,397.952c-8,3.728-17.512,0.296-21.264-7.712c-3.76-8-0.296-17.52, 7.704-21.272
1248
  c 81.168-38, 125.248-125.976, 107.176-213.936c-21.456-104.44-123.832-171.904-228.28-150.512c-50.584,10.392-92.104,39.856-120.528,82.968
1249
  c-28.432,43.128-38.368,94.752-27.976,145.336c 12.352,60.112, 51.312,109.664, 106.88,135.952c 7.984,3.776, 11.4,13.312, 7.616,21.304
1250
  c-3.776,7.976-13.296,11.368-21.296,7.616C 96.056,367.064, 50.664,309.328, 36.264,239.264c-12.112-58.968-0.536-119.128, 32.592-169.392
1251
  c 33.136-50.24, 81.848-84.584, 140.816-96.704c 15.216-3.128, 30.408-4.624, 45.376-4.624c 104.728,0, 198.824,73.56, 220.688,180.056
1252
  C 496.792,251.104, 445.408,353.648, 350.776,397.952z M 256.008,272c 8.832,0, 16,7.168, 16,16L 272.008,464 c0,8.832-7.168,16-16,16c-8.832,0-16-7.168-16-16l0-176
1253
  C 240.008,279.168, 247.176,272, 256.008,272z" />
1254
+ <glyph unicode="&#xe098;" d="M 248.704,30.72c-0.040,0.096-0.136,0.16-0.192,0.24l-45.96,71.832
1255
  c-3.264,5.36-10.344,7.264-15.864,4.256l-4.096-2.52c-5.504-3-5.384-10.768-2.128-16.128l 29.464-45.704
1256
  c-2.512,0.552-5.048,1-7.528,1.648c-51.592,13.496-95.248,48.416-119.768,95.8c-23.168,44.76-27.52,95.848-12.256,143.872
1257
  c 15.256,48.024, 49.888,87.232, 94.648,110.392c 7.624,3.944, 10.6,13.32, 6.656,20.928c-3.936,7.632-13.32,10.616-20.928,6.664
1266
  c 6.504-1, 12.984-2.208, 19.312-3.88c 51.616-13.52, 93.696-48.432, 118.2-95.784c 23.16-44.76, 27.512-95.848, 12.24-143.864
1267
  c-15.256-48.024-48.328-87.224-93.088-110.408c-7.616-3.944-10.584-13.304-6.64-20.936c 2.76-5.32, 8.168-8.384, 13.8-8.384
1268
  c 2.4,0, 4.832,0.56, 7.136,1.744c 52.136,26.968, 90.624,72.64, 108.408,128.56C 489.008,207.968, 483.936,267.48, 456.952,319.592z" />
1269
+ <glyph unicode="&#xe099;" d="M 255.64,480C 127.736,480, 23.68,375.936, 23.68,248.032
1270
  c0-120.224, 92.648-220.768, 211.784-231.048l-45.928-23.28c-5.672-3.112-9.048-10.112-5.688-15.64l 1.624-4.2
1271
  c 3.376-5.528, 10.688-7.488, 16.344-4.392l 76.656,39.248c 0.096,0.064, 0.2,0.048, 0.296,0.112l 5.144,2.816
1272
  c 2.84,1.56, 4.72,4.112, 5.472,6.952c 0.784,2.84, 0.424,6-1.264,8.752l-3.048,5c-0.048,0.096-0.144,0.16-0.2,0.248
1274
  c-0.152,0.008-0.288,0.064-0.432,0.072C 137.64,55.376, 55.68,143.032, 55.68,248.032C 55.68,358.296, 145.384,448, 255.64,448
1275
  c 110.272,0, 200.48-89.704, 200.48-199.968c0-63.488-29.16-121.8-80-159.984c-7.064-5.312-8.488-15.344-3.184-22.408
1276
  c 5.312-7.080, 15.344-8.488, 22.408-3.184c 58.968,44.296, 92.784,111.936, 92.784,185.576C 488.12,375.936, 383.552,480, 255.64,480z" />
1277
+ <glyph unicode="&#xe09a;" d="M 480.248,272.472l-41.064,9.112c-3.2,10.24-7.392,20.040-12.2,29.464l 22.216,37.016c 8.296,13.256, 12.488,32.76,0,45.256l-22.64,22.624
1278
  c-12.488,12.496-33.576,10.248-46.312,1.416l-36.016-22.944c-9.344,4.848-19.112,9-29.264,12.28l-9.216,41.56
1279
  C 303,463.496, 289.672,480, 272,480l-32,0 c-17.672,0-28.504-16.752-32-32l-10.264-41.064c-10.84-3.456-21.248-7.872-31.168-13.104l-36.92,23.512
1280
  c-12.728,8.832-33.824,11.080-46.312-1.416l-22.632-22.624c-12.496-12.504-8.304-32,0-45.256l 23.376-38.96
1298
  c 3.576-0.664, 6.36-2.728, 6.952-3.848L 480.016,208.976z M 256.216,320.16c-53.136,0-96.368-43.144-96.368-96.16
1299
  c0-53.008, 43.232-96.152, 96.368-96.152c 53.136,0, 96.368,43.144, 96.368,96.152C 352.584,277.016, 309.352,320.16, 256.216,320.16z M 256,160
1300
  c-35.288,0-64,28.712-64,64c0,35.296, 28.712,64, 64,64c 35.296,0, 64-28.704, 64-64C 320,188.712, 291.288,160, 256,160z" />
1301
+ <glyph unicode="&#xe09b;" d="M 256,441.256l 58.472-121.264l 10.264-21.28l 23.392-3.488l 132.912-19.744L 384.112,178.808l-16.28-16.248l 3.808-22.656l 22.64-135.080
1302
  l-117.136,63l-21.168,11.392l-21.168-11.392L 117.68,4.792l 22.648,135.112l 3.792,22.656l-16.28,16.248L 30.952,275.496l 132.912,19.744
1303
  l 23.384,3.488l 10.272,21.272L 256,441.256 M 255.992,472.224c-14.328,0-27.392-8.088-33.488-20.728l-57.952-120.32L 31.2,311.344
1304
  c-13.696-2.048-25.072-11.4-29.488-24.192c-4.408-12.832-1.072-26.952, 8.6-36.576l 97.704-97.6l-22.664-135.328
1306
  l 116.256-62.592c 5.592-2.992, 11.752-4.488, 17.888-4.488c 7.48,0, 14.952,2.208, 21.328,6.576c 11.552,7.976, 17.456,21.648, 15.16,35.288
1307
  l-22.672,135.328l 97.752,97.6c 9.672,9.624, 12.984,23.752, 8.576,36.576c-4.424,12.808-15.8,22.16-29.488,24.192l-133.328,19.832l-57.984,120.32
1308
  C 283.424,464.152, 270.352,472.224, 255.992,472.224L 255.992,472.224z" />
1309
+ <glyph unicode="&#xe09c;" d="M 311.848,480.112c-110.456,0-200-89.536-200-200c0-49.256, 17.84-94.336, 47.368-129.184
1310
  l-63.656-64.048l-67.632,68.272c-6.24,6.248-16.376,6.248-22.624,0s-6.248-16.376,0-22.624l 67.696-68.344l-68.176-68.592
1311
  c-6.248-6.248-6.248-16.392,0-22.624c 6.24-6.248, 16.376-6.248, 22.624,0l 68.072,68.496l 68.232-68.88c 6.248-6.248, 16.376-6.248, 22.624,0
1312
  s 6.248,16.376,0,22.624l-68.304,68.952l 63.704,64.096c 34.976-29.984, 80.384-48.144, 130.064-48.144c 110.456,0, 200,89.544, 200,200
1313
  C 511.848,390.576, 422.304,480.112, 311.848,480.112z M 311.848,111.84c-92.928,0-168.264,75.344-168.264,168.272
1314
  c0,92.928, 75.336,168.264, 168.264,168.264s 168.264-75.336, 168.264-168.264C 480.12,187.184, 404.784,111.84, 311.848,111.84z" />
1315
+ <glyph unicode="&#xe09d;" d="M 511.648,468.672c 0.072,3.24-0.688,6.144-2.792,8.216
1316
  c-2.072,2.088-4.976,3.36-8.2,3.264l-5.848-0.136c-0.112,0-0.192-0.040-0.32-0.056L 347.736,480.472
1317
  c-6.464-0.144-11.808-5.496-11.96-11.96L 335.76,460.296c 0.984-7.624, 6.976-12.080, 13.44-11.936l 107.608-0.216L 328.736,320.848
1318
  c-34.744,29.12-79.504,46.68-128.384,46.68c-110.464,0-200-89.536-200-200c0-110.456, 89.536-200, 200-200c 110.456,0, 200,89.544, 200,200
1320
  c 6.48,0.152, 11.824,4, 11.96,10.464l 0.336,147.504c0,0.12-0.44,0.2-0.44,0.312L 511.648,468.672z M 368.616,167.528
1321
  c0-92.928-75.336-168.264-168.272-168.264c-92.928,0-168.264,75.336-168.264,168.264s 75.336,168.264, 168.264,168.264
1322
  C 293.28,335.8, 368.616,260.464, 368.616,167.528z" />
1323
+ <glyph unicode="&#xe09e;" d="M 496,240l-48.72,0 C 439.584,333.264, 365.256,407.52, 272,415.232L 272,464 c0,8.832-7.168,16-16,16
1324
  s-16-7.168-16-16l0-48.768 C 146.752,407.52, 72.416,333.264, 64.712,240L 16,240 c-8.832,0-16-7.168-16-16s 7.168-16, 16-16l 48.712,0
1325
  C 72.416,114.744, 146.752,40.48, 240,32.768L 240-16 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,48.768 C 365.256,40.48, 439.584,114.744, 447.28,208L 496,208
1326
  c 8.832,0, 16,7.168, 16,16S 504.832,240, 496,240z M 240,383.208L 240,240 L 96.776,240 C 104.28,315.6, 164.4,375.704, 240,383.208z M 96.776,208L 240,208 l0-143.208
1327
  C 164.4,72.296, 104.28,132.4, 96.776,208z M 272,64.792L 272,208 l 143.224,0 C 407.72,132.4, 347.6,72.296, 272,64.792z M 272,240L 272,383.208
1328
  C 347.6,375.704, 407.72,315.6, 415.224,240L 272,240 z" />
1329
+ <glyph unicode="&#xe09f;" d="M 327.384,447.048c-5.216,2.776-11.544,2.464-16.456-0.848L 150.384,320.144l-53.312-0.040c-27.256,0-49.44-19.328-49.44-43.2
1330
  l 0.856-105.568c0-23.768, 22.176-43.112, 49.432-43.112l 53.296-0.032l 159.696-126.376c 2.688-1.816, 5.816-2.736, 8.952-2.736
1331
  c 2.576,0, 5.16,0.624, 7.504,1.872c 5.232,2.768, 8.504,8.2, 8.504,14.128L 335.872,432.92 C 335.864,438.832, 332.6,444.264, 327.384,447.048z
1332
  M 303.864,45.184l-138.8,112.264c-2.64,1.784-5.76,2.736-8.944,2.736l-58.192,0.032c-10.272,0-17.44,5.856-17.44,11.232L 79.632,277.024
1334
  c-8.856,1.464-16.968-4.432-18.424-13.152c-1.456-8.712, 4.44-16.96, 13.144-18.416c 25.16-4.2, 42.736-26.152, 42.736-53.376
1335
  c0-25.92-18.184-48.344-43.248-53.344c-8.672-1.72-14.296-10.144-12.56-18.816c 1.512-7.608, 8.184-12.872, 15.672-12.872
1336
  c 1.032,0, 2.096,0.096, 3.144,0.312c 39.984,7.952, 69,43.592, 69,84.72C 464.368,263.752, 435.152,299.472, 394.912,306.184z" />
1337
+ <glyph unicode="&#xe0a0;" d="M 287.248,447.048c-5.216,2.776-11.544,2.464-16.456-0.848L 110.248,320.144l-53.312-0.040c-27.256,0-49.44-19.328-49.44-43.2
1338
  l 0.856-105.568c0-23.768, 22.176-43.112, 49.432-43.112l 53.296-0.032l 159.696-126.376c 2.688-1.816, 5.816-2.736, 8.952-2.736
1339
  c 2.576,0, 5.16,0.624, 7.504,1.872c 5.232,2.768, 8.504,8.2, 8.504,14.128L 295.736,432.92 C 295.736,438.832, 292.472,444.264, 287.248,447.048z
1340
  M 263.736,45.184l-138.8,112.264c-2.64,1.784-5.76,2.736-8.944,2.736l-58.192,0.032c-10.272,0-17.44,5.856-17.44,11.232L 39.504,277.024
1346
  c 48.264-18.008, 80.688-64.952, 80.688-116.816c0-51.888-32.424-98.92-80.656-117c-8.28-3.112-12.472-12.328-9.376-20.592
1347
  c 2.408-6.44, 8.504-10.392, 14.984-10.392c 1.872,0, 3.768,0.328, 5.608,1.016c 60.672,22.752, 101.44,81.816, 101.44,146.968
1348
  C 504.504,286.4, 463.704,345.392, 403,368.048z" />
1349
+ <glyph unicode="&#xe0a1;" d="M 287.768,447.048c-5.216,2.776-11.544,2.464-16.456-0.848L 110.76,320.144l-53.312-0.040
1350
  c-27.256,0-49.44-19.328-49.44-43.2l 0.856-105.568c0-23.768, 22.176-43.112, 49.432-43.112l 53.296-0.032l 159.696-126.376
1351
  c 2.688-1.816, 5.816-2.736, 8.952-2.736c 2.576,0, 5.16,0.624, 7.504,1.872c 5.232,2.768, 8.504,8.2, 8.504,14.128L 296.248,432.92
1352
  C 296.248,438.832, 292.984,444.264, 287.768,447.048z M 264.248,45.184l-138.8,112.264c-2.64,1.784-5.76,2.736-8.944,2.736l-58.192,0.032
1354
  l 139.664,112L 264.248,45.184 z M 447,223.744l 52.296,52.92c 6.248,6.248, 6.248,16.376,0,22.624c-6.232,6.248-16.376,6.248-22.624,0l-52.168-52.784
1355
  l-52.168,52.784c-6.232,6.248-16.376,6.248-22.624,0s-6.248-16.376,0-22.624l 52.296-52.92l-51.8-52.408c-6.232-6.24-6.248-16.376,0-22.624
1356
  s 16.392-6.248, 22.64,0l 51.656,52.272l 51.656-52.272c 6.248-6.248, 16.376-6.248, 22.624,0s 6.248,16.384,0,22.624L 447,223.744z" />
1357
+ <glyph unicode="&#xe001;" d="M 373,62.36L 272.264,118.16c 37.44,29.456, 47.608,87.344, 47.608,119.8l0,67.56 c0,44.736-59.44,94.56-119.144,94.56
1358
  c-59.688,0-120.704-49.832-120.704-94.56l0-67.56 c0-29.512, 12.488-89.216, 50.312-119.544L 27,62.36c0,0-27-12.032-27-27.032l0-40.544
1359
  c0-14.92, 12.112-27.032, 27-27.032l 346,0 c 14.904,0, 27.016,12.112, 27.016,27.032l0,40.544 C 400.016,51.232, 373,62.36, 373,62.36z
1360
  M 368.016-0.248L 32-0.248 l0,28.608 c 2.296,1.672, 5.504,3.608, 8.032,4.768c 0.752,0.344, 1.504,0.704, 2.216,1.112l 103.344,56.048
1367
  c-8.456-6.656-13-17.112-12.112-27.832c 0.904-10.72, 7.128-20.264, 16.56-25.424l 102.232-55.8c 0.888-0.488, 2.016-1.016, 2.952-1.424
1368
  c 2.36-1, 5.264-2.672, 7.392-4.144l0-28.456 l-64.592,0 c 9.752-7.36, 12.704-17.888, 16.488-32l 53.096,0 c 14.904,0, 27.016,12.112, 27.016,27.032l0,40.048
1369
  C 512,130.904, 484.984,142.032, 484.984,142.032z" />
1370
+ <glyph unicode="&#x20;" horiz-adv-x="256" />
1371
  </font>
1372
  </defs>
1373
  </svg>
assets/global/plugins/icons/icons-lte-ie7.js CHANGED
@@ -169,21 +169,21 @@ window.onload = function () {
169
  'icon-volume-2': '&#xe0a0;',
170
  'icon-volume-off': '&#xe0a1;'
171
  },
172
- els = document.getElementsByTagName('*'),
173
- i, attr, c, el;
174
  for (i = 0; ; i += 1) {
175
  el = els[i];
176
  if (!el) {
177
- break;
178
  }
179
  attr = el.getAttribute('data-icon');
180
  if (attr) {
181
- addIcon(el, attr);
182
  }
183
  c = el.className;
184
  c = c.match(/icon-[^\s'"]+/);
185
  if (c && icons[c[0]]) {
186
- addIcon(el, icons[c[0]]);
187
  }
188
  }
189
  };
169
  'icon-volume-2': '&#xe0a0;',
170
  'icon-volume-off': '&#xe0a1;'
171
  },
172
+ els = document.getElementsByTagName('*'),
173
+ i, attr, c, el;
174
  for (i = 0; ; i += 1) {
175
  el = els[i];
176
  if (!el) {
177
+ break;
178
  }
179
  attr = el.getAttribute('data-icon');
180
  if (attr) {
181
+ addIcon(el, attr);
182
  }
183
  c = el.className;
184
  c = c.match(/icon-[^\s'"]+/);
185
  if (c && icons[c[0]]) {
186
+ addIcon(el, icons[c[0]]);
187
  }
188
  }
189
  };
assets/global/plugins/toastr/toastr.css CHANGED
@@ -140,15 +140,15 @@ button.toast-close-button
140
  #toast-container>.toast-custom-error
141
  {
142
  /*background-image:
143
- url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=")
144
- !important*/
145
  background-image: url("../../img/error.png") !important;
146
  }
147
  #toast-container>.toast-custom-success
148
  {
149
  /*background-image:
150
- url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==")
151
- !important*/
152
  background-image: url("../../img/success.png") !important
153
  }
154
  #toast-container>.toast-warning
140
  #toast-container>.toast-custom-error
141
  {
142
  /*background-image:
143
+ url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=")
144
+ !important*/
145
  background-image: url("../../img/error.png") !important;
146
  }
147
  #toast-container>.toast-custom-success
148
  {
149
  /*background-image:
150
+ url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==")
151
+ !important*/
152
  background-image: url("../../img/success.png") !important
153
  }
154
  #toast-container>.toast-warning
assets/global/plugins/toastr/toastr.js CHANGED
@@ -2,344 +2,344 @@
2
  (function (define) {
3
  define(['jquery'], function ($) {
4
  return (function () {
5
- var $container;
6
- var listener;
7
- var toastId = 0;
8
- var toastType = {
9
- error: 'error',
10
- info: 'info',
11
- success: 'success',
12
- warning: 'warning'
13
- };
14
-
15
- var toastr = {
16
- clear: clear,
17
- remove: remove,
18
- error: error,
19
- getContainer: getContainer,
20
- info: info,
21
- options: {},
22
- subscribe: subscribe,
23
- success: success,
24
- version: '2.1.0',
25
- warning: warning
26
- };
27
-
28
- var previousToast;
29
-
30
- return toastr;
31
-
32
- //#region Accessible Methods
33
- function error(message, title, optionsOverride) {
34
- return notify({
35
- type: toastType.error,
36
- iconClass: getOptions().iconClasses.error,
37
- message: message,
38
- optionsOverride: optionsOverride,
39
- title: title
40
- });
41
- }
42
-
43
- function getContainer(options, create) {
44
- if (!options) {
45
- options = getOptions();
46
- }
47
- $container = $('#' + options.containerId);
48
- if ($container.length) {
49
- return $container;
50
- }
51
- if (create) {
52
- $container = createContainer(options);
53
- }
54
- return $container;
55
- }
56
-
57
- function info(message, title, optionsOverride) {
58
- return notify({
59
- type: toastType.info,
60
- iconClass: getOptions().iconClasses.info,
61
- message: message,
62
- optionsOverride: optionsOverride,
63
- title: title
64
- });
65
- }
66
-
67
- function subscribe(callback) {
68
- listener = callback;
69
- }
70
-
71
- function success(message, title, optionsOverride) {
72
- return notify({
73
- type: toastType.success,
74
- iconClass: getOptions().iconClasses.success,
75
- message: message,
76
- optionsOverride: optionsOverride,
77
- title: title
78
- });
79
- }
80
-
81
- function warning(message, title, optionsOverride) {
82
- return notify({
83
- type: toastType.warning,
84
- iconClass: getOptions().iconClasses.warning,
85
- message: message,
86
- optionsOverride: optionsOverride,
87
- title: title
88
- });
89
- }
90
-
91
- function clear($toastElement) {
92
- var options = getOptions();
93
- if (!$container) {
94
- getContainer(options);
95
- }
96
- if (!clearToast($toastElement, options)) {
97
- clearContainer(options);
98
- }
99
- }
100
-
101
- function remove($toastElement) {
102
- var options = getOptions();
103
- if (!$container) {
104
- getContainer(options);
105
- }
106
- if ($toastElement && $(':focus', $toastElement).length === 0) {
107
- removeToast($toastElement);
108
- return;
109
- }
110
- if ($container.children().length) {
111
- $container.remove();
112
- }
113
- }
114
- //#endregion
115
-
116
- //#region Internal Methods
117
-
118
- function clearContainer(options) {
119
- var toastsToClear = $container.children();
120
- for (var i = toastsToClear.length - 1; i >= 0; i--) {
121
- clearToast($(toastsToClear[i]), options);
122
- }
123
- ;
124
- }
125
-
126
- function clearToast($toastElement, options) {
127
- if ($toastElement && $(':focus', $toastElement).length === 0) {
128
- $toastElement[options.hideMethod]({
129
- duration: options.hideDuration,
130
- easing: options.hideEasing,
131
- complete: function () {
132
- removeToast($toastElement);
133
- }
134
- });
135
- return true;
136
- }
137
- return false;
138
- }
139
-
140
- function createContainer(options) {
141
- $container = $('<div/>')
142
- .attr('id', options.containerId)
143
- .addClass(options.positionClass)
144
- .attr('aria-live', 'polite')
145
- .attr('role', 'alert');
146
-
147
- $container.appendTo($(options.target));
148
- return $container;
149
- }
150
-
151
- function getDefaults() {
152
- return {
153
- tapToDismiss: true,
154
- toastClass: 'toast',
155
- containerId: 'toast-container',
156
- debug: false,
157
-
158
- showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery
159
- showDuration: 300,
160
- showEasing: 'swing', //swing and linear are built into jQuery
161
- onShown: undefined,
162
- hideMethod: 'fadeOut',
163
- hideDuration: 1000,
164
- hideEasing: 'swing',
165
- onHidden: undefined,
166
-
167
- extendedTimeOut: 1000,
168
- iconClasses: {
169
- error: 'toast-custom-error',
170
- info: 'toast-info',
171
- success: 'toast-custom-success',
172
- warning: 'toast-warning'
173
- },
174
- iconClass: 'toast-info',
175
- positionClass: 'toast-top-right',
176
- timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky
177
- titleClass: 'toast-title',
178
- messageClass: 'toast-message',
179
- target: 'body',
180
- closeHtml: '<button>&times;</button>',
181
- newestOnTop: true,
182
- preventDuplicates: false
183
- };
184
- }
185
-
186
- function publish(args) {
187
- if (!listener) {
188
- return;
189
- }
190
- listener(args);
191
- }
192
-
193
- function notify(map) {
194
- var options = getOptions(),
195
- iconClass = map.iconClass || options.iconClass;
196
-
197
- if (options.preventDuplicates) {
198
- if (map.message === previousToast) {
199
- return;
200
- } else {
201
- previousToast = map.message;
202
- }
203
- }
204
-
205
- if (typeof (map.optionsOverride) !== 'undefined') {
206
- options = $.extend(options, map.optionsOverride);
207
- iconClass = map.optionsOverride.iconClass || iconClass;
208
- }
209
-
210
- toastId++;
211
-
212
- $container = getContainer(options, true);
213
- var intervalId = null,
214
- $toastElement = $('<div/>'),
215
- $titleElement = $('<div/>'),
216
- $messageElement = $('<div/>'),
217
- $closeElement = $(options.closeHtml),
218
- response = {
219
- toastId: toastId,
220
- state: 'visible',
221
- startTime: new Date(),
222
- options: options,
223
- map: map
224
- };
225
-
226
- if (map.iconClass) {
227
- $toastElement.addClass(options.toastClass).addClass(iconClass);
228
- }
229
-
230
- if (map.title) {
231
- $titleElement.append(map.title).addClass(options.titleClass);
232
- $toastElement.append($titleElement);
233
- }
234
-
235
- if (map.message) {
236
- $messageElement.append(map.message).addClass(options.messageClass);
237
- $toastElement.append($messageElement);
238
- }
239
-
240
- if (options.closeButton) {
241
- $closeElement.addClass('toast-close-button').attr("role", "button");
242
- $toastElement.prepend($closeElement);
243
- }
244
-
245
- $toastElement.hide();
246
- if (options.newestOnTop) {
247
- $container.prepend($toastElement);
248
- } else {
249
- $container.append($toastElement);
250
- }
251
-
252
-
253
- $toastElement[options.showMethod](
254
- {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}
255
- );
256
-
257
- if (options.timeOut > 0) {
258
- intervalId = setTimeout(hideToast, options.timeOut);
259
- }
260
-
261
- $toastElement.hover(stickAround, delayedHideToast);
262
- if (!options.onclick && options.tapToDismiss) {
263
- $toastElement.click(hideToast);
264
- }
265
-
266
- if (options.closeButton && $closeElement) {
267
- $closeElement.click(function (event) {
268
- if (event.stopPropagation) {
269
- event.stopPropagation();
270
- } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {
271
- event.cancelBubble = true;
272
- }
273
- hideToast(true);
274
- });
275
- }
276
-
277
- if (options.onclick) {
278
- $toastElement.click(function () {
279
- options.onclick();
280
- hideToast();
281
- });
282
- }
283
-
284
- publish(response);
285
-
286
- if (options.debug && console) {
287
- console.log(response);
288
- }
289
-
290
- return $toastElement;
291
-
292
- function hideToast(override) {
293
- if ($(':focus', $toastElement).length && !override) {
294
- return;
295
- }
296
- return $toastElement[options.hideMethod]({
297
- duration: options.hideDuration,
298
- easing: options.hideEasing,
299
- complete: function () {
300
- removeToast($toastElement);
301
- if (options.onHidden && response.state !== 'hidden') {
302
- options.onHidden();
303
- }
304
- response.state = 'hidden';
305
- response.endTime = new Date();
306
- publish(response);
307
- }
308
- });
309
- }
310
-
311
- function delayedHideToast() {
312
- if (options.timeOut > 0 || options.extendedTimeOut > 0) {
313
- intervalId = setTimeout(hideToast, options.extendedTimeOut);
314
- }
315
- }
316
-
317
- function stickAround() {
318
- clearTimeout(intervalId);
319
- $toastElement.stop(true, true)[options.showMethod](
320
- {duration: options.showDuration, easing: options.showEasing}
321
- );
322
- }
323
- }
324
-
325
- function getOptions() {
326
- return $.extend({}, getDefaults(), toastr.options);
327
- }
328
-
329
- function removeToast($toastElement) {
330
- if (!$container) {
331
- $container = getContainer();
332
- }
333
- if ($toastElement.is(':visible')) {
334
- return;
335
- }
336
- $toastElement.remove();
337
- $toastElement = null;
338
- if ($container.children().length === 0) {
339
- $container.remove();
340
- }
341
- }
342
- //#endregion
343
 
344
  })();
345
  });
2
  (function (define) {
3
  define(['jquery'], function ($) {
4
  return (function () {
5
+ var $container;
6
+ var listener;
7
+ var toastId = 0;
8
+ var toastType = {
9
+ error: 'error',
10
+ info: 'info',
11
+ success: 'success',
12
+ warning: 'warning'
13
+ };
14
+
15
+ var toastr = {
16
+ clear: clear,
17
+ remove: remove,
18
+ error: error,
19
+ getContainer: getContainer,
20
+ info: info,
21
+ options: {},
22
+ subscribe: subscribe,
23
+ success: success,
24
+ version: '2.1.0',
25
+ warning: warning
26
+ };
27
+
28
+ var previousToast;
29
+
30
+ return toastr;
31
+
32
+ //#region Accessible Methods
33
+ function error(message, title, optionsOverride) {
34
+ return notify({
35
+ type: toastType.error,
36
+ iconClass: getOptions().iconClasses.error,
37
+ message: message,
38
+ optionsOverride: optionsOverride,
39
+ title: title
40
+ });
41
+ }
42
+
43
+ function getContainer(options, create) {
44
+ if (!options) {
45
+ options = getOptions();
46
+ }
47
+ $container = $('#' + options.containerId);
48
+ if ($container.length) {
49
+ return $container;
50
+ }
51
+ if (create) {
52
+ $container = createContainer(options);
53
+ }
54
+ return $container;
55
+ }
56
+
57
+ function info(message, title, optionsOverride) {
58
+ return notify({
59
+ type: toastType.info,
60
+ iconClass: getOptions().iconClasses.info,
61
+ message: message,
62
+ optionsOverride: optionsOverride,
63
+ title: title
64
+ });
65
+ }
66
+
67
+ function subscribe(callback) {
68
+ listener = callback;
69
+ }
70
+
71
+ function success(message, title, optionsOverride) {
72
+ return notify({
73
+ type: toastType.success,
74
+ iconClass: getOptions().iconClasses.success,
75
+ message: message,
76
+ optionsOverride: optionsOverride,
77
+ title: title
78
+ });
79
+ }
80
+
81
+ function warning(message, title, optionsOverride) {
82
+ return notify({
83
+ type: toastType.warning,
84
+ iconClass: getOptions().iconClasses.warning,
85
+ message: message,
86
+ optionsOverride: optionsOverride,
87
+ title: title
88
+ });
89
+ }
90
+
91
+ function clear($toastElement) {
92
+ var options = getOptions();
93
+ if (!$container) {
94
+ getContainer(options);
95
+ }
96
+ if (!clearToast($toastElement, options)) {
97
+ clearContainer(options);
98
+ }
99
+ }
100
+
101
+ function remove($toastElement) {
102
+ var options = getOptions();
103
+ if (!$container) {
104
+ getContainer(options);
105
+ }
106
+ if ($toastElement && $(':focus', $toastElement).length === 0) {
107
+ removeToast($toastElement);
108
+ return;
109
+ }
110
+ if ($container.children().length) {
111
+ $container.remove();
112
+ }
113
+ }
114
+ //#endregion
115
+
116
+ //#region Internal Methods
117
+
118
+ function clearContainer(options) {
119
+ var toastsToClear = $container.children();
120
+ for (var i = toastsToClear.length - 1; i >= 0; i--) {
121
+ clearToast($(toastsToClear[i]), options);
122
+ }
123
+ ;
124
+ }
125
+
126
+ function clearToast($toastElement, options) {
127
+ if ($toastElement && $(':focus', $toastElement).length === 0) {
128
+ $toastElement[options.hideMethod]({
129
+ duration: options.hideDuration,
130
+ easing: options.hideEasing,
131
+ complete: function () {
132
+ removeToast($toastElement);
133
+ }
134
+ });
135
+ return true;
136
+ }
137
+ return false;
138
+ }
139
+
140
+ function createContainer(options) {
141
+ $container = $('<div/>')
142
+ .attr('id', options.containerId)
143
+ .addClass(options.positionClass)
144
+ .attr('aria-live', 'polite')
145
+ .attr('role', 'alert');
146
+
147
+ $container.appendTo($(options.target));
148
+ return $container;
149
+ }
150
+
151
+ function getDefaults() {
152
+ return {
153
+ tapToDismiss: true,
154
+ toastClass: 'toast',
155
+ containerId: 'toast-container',
156
+ debug: false,
157
+
158
+ showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery
159
+ showDuration: 300,
160
+ showEasing: 'swing', //swing and linear are built into jQuery
161
+ onShown: undefined,
162
+ hideMethod: 'fadeOut',
163
+ hideDuration: 1000,
164
+ hideEasing: 'swing',
165
+ onHidden: undefined,
166
+
167
+ extendedTimeOut: 1000,
168
+ iconClasses: {
169
+ error: 'toast-custom-error',
170
+ info: 'toast-info',
171
+ success: 'toast-custom-success',
172
+ warning: 'toast-warning'
173
+ },
174
+ iconClass: 'toast-info',
175
+ positionClass: 'toast-top-right',
176
+ timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky
177
+ titleClass: 'toast-title',
178
+ messageClass: 'toast-message',
179
+ target: 'body',
180
+ closeHtml: '<button>&times;</button>',
181
+ newestOnTop: true,
182
+ preventDuplicates: false
183
+ };
184
+ }
185
+
186
+ function publish(args) {
187
+ if (!listener) {
188
+ return;
189
+ }
190
+ listener(args);
191
+ }
192
+
193
+ function notify(map) {
194
+ var options = getOptions(),
195
+ iconClass = map.iconClass || options.iconClass;
196
+
197
+ if (options.preventDuplicates) {
198
+ if (map.message === previousToast) {
199
+ return;
200
+ } else {
201
+ previousToast = map.message;
202
+ }
203
+ }
204
+
205
+ if (typeof (map.optionsOverride) !== 'undefined') {
206
+ options = $.extend(options, map.optionsOverride);
207
+ iconClass = map.optionsOverride.iconClass || iconClass;
208
+ }
209
+
210
+ toastId++;
211
+
212
+ $container = getContainer(options, true);
213
+ var intervalId = null,
214
+ $toastElement = $('<div/>'),
215
+ $titleElement = $('<div/>'),
216
+ $messageElement = $('<div/>'),
217
+ $closeElement = $(options.closeHtml),
218
+ response = {
219
+ toastId: toastId,
220
+ state: 'visible',
221
+ startTime: new Date(),
222
+ options: options,
223
+ map: map
224
+ };
225
+
226
+ if (map.iconClass) {
227
+ $toastElement.addClass(options.toastClass).addClass(iconClass);
228
+ }
229
+
230
+ if (map.title) {
231
+ $titleElement.append(map.title).addClass(options.titleClass);
232
+ $toastElement.append($titleElement);
233
+ }
234
+
235
+ if (map.message) {
236
+ $messageElement.append(map.message).addClass(options.messageClass);
237
+ $toastElement.append($messageElement);
238
+ }
239
+
240
+ if (options.closeButton) {
241
+ $closeElement.addClass('toast-close-button').attr("role", "button");
242
+ $toastElement.prepend($closeElement);
243
+ }
244
+
245
+ $toastElement.hide();
246
+ if (options.newestOnTop) {
247
+ $container.prepend($toastElement);
248
+ } else {
249
+ $container.append($toastElement);
250
+ }
251
+
252
+
253
+ $toastElement[options.showMethod](
254
+ {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}
255
+ );
256
+
257
+ if (options.timeOut > 0) {
258
+ intervalId = setTimeout(hideToast, options.timeOut);
259
+ }
260
+
261
+ $toastElement.hover(stickAround, delayedHideToast);
262
+ if (!options.onclick && options.tapToDismiss) {
263
+ $toastElement.click(hideToast);
264
+ }
265
+
266
+ if (options.closeButton && $closeElement) {
267
+ $closeElement.click(function (event) {
268
+ if (event.stopPropagation) {
269
+ event.stopPropagation();
270
+ } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {
271
+ event.cancelBubble = true;
272
+ }
273
+ hideToast(true);
274
+ });
275
+ }
276
+
277
+ if (options.onclick) {
278
+ $toastElement.click(function () {
279
+ options.onclick();
280
+ hideToast();
281
+ });
282
+ }
283
+
284
+ publish(response);
285
+
286
+ if (options.debug && console) {
287
+ console.log(response);
288
+ }
289
+
290
+ return $toastElement;
291
+
292
+ function hideToast(override) {
293
+ if ($(':focus', $toastElement).length && !override) {
294
+ return;
295
+ }
296
+ return $toastElement[options.hideMethod]({
297
+ duration: options.hideDuration,
298
+ easing: options.hideEasing,
299
+ complete: function () {
300
+ removeToast($toastElement);
301
+ if (options.onHidden && response.state !== 'hidden') {
302
+ options.onHidden();
303
+ }
304
+ response.state = 'hidden';
305
+ response.endTime = new Date();
306
+ publish(response);
307
+ }
308
+ });
309
+ }
310
+
311
+ function delayedHideToast() {
312
+ if (options.timeOut > 0 || options.extendedTimeOut > 0) {
313
+ intervalId = setTimeout(hideToast, options.extendedTimeOut);
314
+ }
315
+ }
316
+
317
+ function stickAround() {
318
+ clearTimeout(intervalId);
319
+ $toastElement.stop(true, true)[options.showMethod](
320
+ {duration: options.showDuration, easing: options.showEasing}
321
+ );
322
+ }
323
+ }
324
+
325
+ function getOptions() {
326
+ return $.extend({}, getDefaults(), toastr.options);
327
+ }
328
+
329
+ function removeToast($toastElement) {
330
+ if (!$container) {
331
+ $container = getContainer();
332
+ }
333
+ if ($toastElement.is(':visible')) {
334
+ return;
335
+ }
336
+ $toastElement.remove();
337
+ $toastElement = null;
338
+ if ($container.children().length === 0) {
339
+ $container.remove();
340
+ }
341
+ }
342
+ //#endregion
343
 
344
  })();
345
  });
assets/global/plugins/validation/jquery.validate.js CHANGED
@@ -15,195 +15,195 @@
15
  $.extend($.fn, {
16
  validate: function (options) {
17
 
18
- // If nothing is selected, return nothing; can't chain anyway
19
- if (!this.length) {
20
- if (options && options.debug && window.console) {
21
- console.warn("Nothing selected, can't validate, returning nothing.");
22
- }
23
- return;
24
- }
25
-
26
- // Check if a validator for this form was already created
27
- var validator = $.data(this[ 0 ], "validator");
28
- if (validator) {
29
- return validator;
30
- }
31
-
32
- // Add novalidate tag if HTML5.
33
- this.attr("novalidate", "novalidate");
34
-
35
- validator = new $.validator(options, this[ 0 ]);
36
- $.data(this[ 0 ], "validator", validator);
37
-
38
- if (validator.settings.onsubmit) {
39
-
40
- this.on("click.validate", ":submit", function (event) {
41
- if (validator.settings.submitHandler) {
42
- validator.submitButton = event.target;
43
- }
44
-
45
- // Allow suppressing validation by adding a cancel class to the submit button
46
- if ($(this).hasClass("cancel")) {
47
- validator.cancelSubmit = true;
48
- }
49
-
50
- // Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
51
- if ($(this).attr("formnovalidate") !== undefined) {
52
- validator.cancelSubmit = true;
53
- }
54
- });
55
-
56
- // Validate the form on submit
57
- this.on("submit.validate", function (event) {
58
- if (validator.settings.debug) {
59
-
60
- // Prevent form submit to be able to see console output
61
- event.preventDefault();
62
- }
63
- function handle() {
64
- var hidden, result;
65
- if (validator.settings.submitHandler) {
66
- if (validator.submitButton) {
67
-
68
- // Insert a hidden input as a replacement for the missing submit button
69
- hidden = $("<input type='hidden'/>")
70
- .attr("name", validator.submitButton.name)
71
- .val($(validator.submitButton).val())
72
- .appendTo(validator.currentForm);
73
- }
74
- result = validator.settings.submitHandler.call(validator, validator.currentForm, event);
75
- if (validator.submitButton) {
76
-
77
- // And clean up afterwards; thanks to no-block-scope, hidden can be referenced
78
- hidden.remove();
79
- }
80
- if (result !== undefined) {
81
- return result;
82
- }
83
- return false;
84
- }
85
- return true;
86
- }
87
- if (validator.cancelSubmit) {
88
- validator.cancelSubmit = false;
89
- return handle();
90
- }
91
- if (validator.form()) {
92
- if (validator.pendingRequest) {
93
- validator.formSubmitted = true;
94
- return false;
95
- }
96
- return handle();
97
- } else {
98
- validator.focusInvalid();
99
- return false;
100
- }
101
- });
102
- }
103
-
104
- return validator;
105
  },
106
  valid: function () {
107
- var valid, validator, errorList;
108
-
109
- if ($(this[ 0 ]).is("form")) {
110
- valid = this.validate().form();
111
- } else {
112
- errorList = [];
113
- valid = true;
114
- validator = $(this[ 0 ].form).validate();
115
- this.each(function () {
116
- valid = validator.element(this) && valid;
117
- if (!valid) {
118
- errorList = errorList.concat(validator.errorList);
119
- }
120
- });
121
- validator.errorList = errorList;
122
- }
123
- return valid;
124
  },
125
  rules: function (command, argument) {
126
 
127
- // If nothing is selected, return nothing; can't chain anyway
128
- if (!this.length) {
129
- return;
130
- }
131
-
132
- var element = this[ 0 ],
133
- settings, staticRules, existingRules, data, param, filtered;
134
-
135
- if (command) {
136
- settings = $.data(element.form, "validator").settings;
137
- staticRules = settings.rules;
138
- existingRules = $.validator.staticRules(element);
139
- switch (command) {
140
- case "add":
141
- $.extend(existingRules, $.validator.normalizeRule(argument));
142
-
143
- // Remove messages from rules, but allow them to be set separately
144
- delete existingRules.messages;
145
- staticRules[ element.name ] = existingRules;
146
- if (argument.messages) {
147
- settings.messages[ element.name ] = $.extend(settings.messages[ element.name ], argument.messages);
148
- }
149
- break;
150
- case "remove":
151
- if (!argument) {
152
- delete staticRules[ element.name ];
153
- return existingRules;
154
- }
155
- filtered = {};
156
- $.each(argument.split(/\s/), function (index, method) {
157
- filtered[ method ] = existingRules[ method ];
158
- delete existingRules[ method ];
159
- if (method === "required") {
160
- $(element).removeAttr("aria-required");
161
- }
162
- });
163
- return filtered;
164
- }
165
- }
166
-
167
- data = $.validator.normalizeRules(
168
- $.extend(
169
- {},
170
- $.validator.classRules(element),
171
- $.validator.attributeRules(element),
172
- $.validator.dataRules(element),
173
- $.validator.staticRules(element)
174
- ), element);
175
-
176
- // Make sure required is at front
177
- if (data.required) {
178
- param = data.required;
179
- delete data.required;
180
- data = $.extend({required: param}, data);
181
- $(element).attr("aria-required", "true");
182
- }
183
-
184
- // Make sure remote is at back
185
- if (data.remote) {
186
- param = data.remote;
187
- delete data.remote;
188
- data = $.extend(data, {remote: param});
189
- }
190
-
191
- return data;
192
  }
193
  });
194
 
195
  // Custom selectors
196
  $.extend($.expr[ ":" ], {
197
  blank: function (a) {
198
- return !$.trim("" + $(a).val());
199
  },
200
  filled: function (a) {
201
- var val = $(a).val();
202
- return val !== null && !!$.trim("" + val);
203
  },
204
 
205
  unchecked: function (a) {
206
- return !$(a).prop("checked");
207
  }
208
  });
209
 
@@ -216,25 +216,25 @@
216
 
217
  $.validator.format = function (source, params) {
218
  if (arguments.length === 1) {
219
- return function () {
220
- var args = $.makeArray(arguments);
221
- args.unshift(source);
222
- return $.validator.format.apply(this, args);
223
- };
224
  }
225
  if (params === undefined) {
226
- return source;
227
  }
228
  if (arguments.length > 2 && params.constructor !== Array) {
229
- params = $.makeArray(arguments).slice(1);
230
  }
231
  if (params.constructor !== Array) {
232
- params = [params];
233
  }
234
  $.each(params, function (i, n) {
235
- source = source.replace(new RegExp("\\{" + i + "\\}", "g"), function () {
236
- return n;
237
- });
238
  });
239
  return source;
240
  };
@@ -242,1093 +242,1093 @@
242
  $.extend($.validator, {
243
 
244
  defaults: {
245
- messages: {},
246
- groups: {},
247
- rules: {},
248
- errorClass: "error",
249
- pendingClass: "pending",
250
- validClass: "valid",
251
- errorElement: "label",
252
- focusCleanup: false,
253
- focusInvalid: true,
254
- errorContainer: $([]),
255
- errorLabelContainer: $([]),
256
- onsubmit: true,
257
- ignore: ":hidden",
258
- ignoreTitle: false,
259
- onfocusin: function (element) {
260
- this.lastActive = element;
261
- if (this.settings.focusCleanup) {
262
- if (this.settings.unhighlight) {
263
- this.settings.unhighlight.call(this, element, this.settings.errorClass, this.settings.validClass);
264
- }
265
- this.hideThese(this.errorsFor(element));
266
- }
267
- },
268
- onfocusout: function (element) {
269
- if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {
270
- this.element(element);
271
- }
272
- },
273
- onkeyup: function (element, event) {
274
- var excludedKeys = [
275
- 16, 17, 18, 20, 35, 36, 37,
276
- 38, 39, 40, 45, 144, 225
277
- ];
278
-
279
- if (event.which === 9 && this.elementValue(element) === "" || $.inArray(event.keyCode, excludedKeys) !== -1) {
280
- return;
281
- } else if (element.name in this.submitted || element.name in this.invalid) {
282
- this.element(element);
283
- }
284
- },
285
- onclick: function (element) {
286
-
287
- // Click on selects, radiobuttons and checkboxes
288
- if (element.name in this.submitted) {
289
- this.element(element);
290
-
291
- // Or option elements, check parent select in that case
292
- } else if (element.parentNode.name in this.submitted) {
293
- this.element(element.parentNode);
294
- }
295
- },
296
- highlight: function (element, errorClass, validClass) {
297
- if (element.type === "radio") {
298
- this.findByName(element.name).addClass(errorClass).removeClass(validClass);
299
- } else {
300
- $(element).addClass(errorClass).removeClass(validClass);
301
- }
302
- },
303
- unhighlight: function (element, errorClass, validClass) {
304
- if (element.type === "radio") {
305
- this.findByName(element.name).removeClass(errorClass).addClass(validClass);
306
- } else {
307
- $(element).removeClass(errorClass).addClass(validClass);
308
- }
309
- }
310
  },
311
  setDefaults: function (settings) {
312
- $.extend($.validator.defaults, settings);
313
  },
314
 
315
  messages: {
316
- required: "This field is required.",
317
- remote: "Please fix this field.",
318
- email: "Please enter a valid email address.",
319
- url: "Please enter a valid URL.",
320
- date: "Please enter a valid date.",
321
- dateISO: "Please enter a valid date ( ISO ).",
322
- number: "Please enter a valid number.",
323
- digits: "Please enter only digits.",
324
- equalTo: "Please enter the same value again.",
325
- maxlength: $.validator.format("Please enter no more than {0} characters."),
326
- minlength: $.validator.format("Please enter at least {0} characters."),
327
- rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
328
- range: $.validator.format("Please enter a value between {0} and {1}."),
329
- max: $.validator.format("Please enter a value less than or equal to {0}."),
330
- min: $.validator.format("Please enter a value greater than or equal to {0}."),
331
- step: $.validator.format("Please enter a multiple of {0}.")
332
  },
333
 
334
  autoCreateRanges: false,
335
 
336
  prototype: {
337
 
338
- init: function () {
339
- this.labelContainer = $(this.settings.errorLabelContainer);
340
- this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
341
- this.containers = $(this.settings.errorContainer).add(this.settings.errorLabelContainer);
342
- this.submitted = {};
343
- this.valueCache = {};
344
- this.pendingRequest = 0;
345
- this.pending = {};
346
- this.invalid = {};
347
- this.reset();
348
-
349
- var groups = (this.groups = {}),
350
- rules;
351
- $.each(this.settings.groups, function (key, value) {
352
- if (typeof value === "string") {
353
- value = value.split(/\s/);
354
- }
355
- $.each(value, function (index, name) {
356
- groups[ name ] = key;
357
- });
358
- });
359
- rules = this.settings.rules;
360
- $.each(rules, function (key, value) {
361
- rules[ key ] = $.validator.normalizeRule(value);
362
- });
363
-
364
- function delegate(event) {
365
- var validator = $.data(this.form, "validator"),
366
- eventType = "on" + event.type.replace(/^validate/, ""),
367
- settings = validator.settings;
368
- if (settings[ eventType ] && !$(this).is(settings.ignore)) {
369
- settings[ eventType ].call(validator, this, event);
370
- }
371
- }
372
-
373
- $(this.currentForm)
374
- .on("focusin.validate focusout.validate keyup.validate",
375
- ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " +
376
- "[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " +
377
- "[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " +
378
- "[type='radio'], [type='checkbox'], [contenteditable]", delegate)
379
- .on("click.validate", "select, option, [type='radio'], [type='checkbox']", delegate);
380
-
381
- if (this.settings.invalidHandler) {
382
- $(this.currentForm).on("invalid-form.validate", this.settings.invalidHandler);
383
- }
384
-
385
- // Add aria-required to any Static/Data/Class required fields before first validation
386
- // Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html
387
- $(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required", "true");
388
- },
389
-
390
- form: function () {
391
- this.checkForm();
392
- $.extend(this.submitted, this.errorMap);
393
- this.invalid = $.extend({}, this.errorMap);
394
- if (!this.valid()) {
395
- $(this.currentForm).triggerHandler("invalid-form", [this]);
396
- }
397
- this.showErrors();
398
- return this.valid();
399
- },
400
-
401
- checkForm: function () {
402
- this.prepareForm();
403
- for (var i = 0, elements = (this.currentElements = this.elements()); elements[ i ]; i++) {
404
- this.check(elements[ i ]);
405
- }
406
- return this.valid();
407
- },
408
- element: function (element) {
409
- var cleanElement = this.clean(element),
410
- checkElement = this.validationTargetFor(cleanElement),
411
- v = this,
412
- result = true,
413
- rs, group;
414
-
415
- if (checkElement === undefined) {
416
- delete this.invalid[ cleanElement.name ];
417
- } else {
418
- this.prepareElement(checkElement);
419
- this.currentElements = $(checkElement);
420
-
421
- // If this element is grouped, then validate all group elements already
422
- // containing a value
423
- group = this.groups[ checkElement.name ];
424
- if (group) {
425
- $.each(this.groups, function (name, testgroup) {
426
- if (testgroup === group && name !== checkElement.name) {
427
- cleanElement = v.validationTargetFor(v.clean(v.findByName(name)));
428
- if (cleanElement && cleanElement.name in v.invalid) {
429
- v.currentElements.push(cleanElement);
430
- result = result && v.check(cleanElement);
431
- }
432
- }
433
- });
434
- }
435
-
436
- rs = this.check(checkElement) !== false;
437
- result = result && rs;
438
- if (rs) {
439
- this.invalid[ checkElement.name ] = false;
440
- } else {
441
- this.invalid[ checkElement.name ] = true;
442
- }
443
-
444
- if (!this.numberOfInvalids()) {
445
-
446
- // Hide error containers on last error
447
- this.toHide = this.toHide.add(this.containers);
448
- }
449
- this.showErrors();
450
-
451
- // Add aria-invalid status for screen readers
452
- $(element).attr("aria-invalid", !rs);
453
- }
454
-
455
- return result;
456
- },
457
- showErrors: function (errors) {
458
- if (errors) {
459
- var validator = this;
460
-
461
- // Add items to error list and map
462
- $.extend(this.errorMap, errors);
463
- this.errorList = $.map(this.errorMap, function (message, name) {
464
- return {
465
- message: message,
466
- element: validator.findByName(name)[ 0 ]
467
- };
468
- });
469
-
470
- // Remove items from success list
471
- this.successList = $.grep(this.successList, function (element) {
472
- return !(element.name in errors);
473
- });
474
- }
475
- if (this.settings.showErrors) {
476
- this.settings.showErrors.call(this, this.errorMap, this.errorList);
477
- } else {
478
- this.defaultShowErrors();
479
- }
480
- },
481
- resetForm: function () {
482
- if ($.fn.resetForm) {
483
- $(this.currentForm).resetForm();
484
- }
485
- this.invalid = {};
486
- this.submitted = {};
487
- this.prepareForm();
488
- this.hideErrors();
489
- var elements = this.elements()
490
- .removeData("previousValue")
491
- .removeAttr("aria-invalid");
492
-
493
- this.resetElements(elements);
494
- },
495
-
496
- resetElements: function (elements) {
497
- var i;
498
-
499
- if (this.settings.unhighlight) {
500
- for (i = 0; elements[ i ]; i++) {
501
- this.settings.unhighlight.call(this, elements[ i ],
502
- this.settings.errorClass, "");
503
- this.findByName(elements[ i ].name).removeClass(this.settings.validClass);
504
- }
505
- } else {
506
- elements
507
- .removeClass(this.settings.errorClass)
508
- .removeClass(this.settings.validClass);
509
- }
510
- },
511
-
512
- numberOfInvalids: function () {
513
- return this.objectLength(this.invalid);
514
- },
515
-
516
- objectLength: function (obj) {
517
- /* jshint unused: false */
518
- var count = 0,
519
- i;
520
- for (i in obj) {
521
- if (obj[ i ]) {
522
- count++;
523
- }
524
- }
525
- return count;
526
- },
527
-
528
- hideErrors: function () {
529
- this.hideThese(this.toHide);
530
- },
531
-
532
- hideThese: function (errors) {
533
- errors.not(this.containers).text("");
534
- this.addWrapper(errors).hide();
535
- },
536
-
537
- valid: function () {
538
- return this.size() === 0;
539
- },
540
-
541
- size: function () {
542
- return this.errorList.length;
543
- },
544
-
545
- focusInvalid: function () {
546
- if (this.settings.focusInvalid) {
547
- try {
548
- $(this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])
549
- .filter(":visible")
550
- .focus()
551
-
552
- // Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
553
- .trigger("focusin");
554
- } catch (e) {
555
- }
556
- }
557
- },
558
-
559
- findLastActive: function () {
560
- var lastActive = this.lastActive;
561
- return lastActive && $.grep(this.errorList, function (n) {
562
- return n.element.name === lastActive.name;
563
- }).length === 1 && lastActive;
564
- },
565
-
566
- elements: function () {
567
- var validator = this,
568
- rulesCache = {};
569
-
570
- // Select all valid inputs inside the form (no submit or reset buttons)
571
- return $(this.currentForm)
572
- .find("input, select, textarea, [contenteditable]")
573
- .not(":submit, :reset, :image, :disabled")
574
- .not(this.settings.ignore)
575
- .filter(function () {
576
- var name = this.name || $(this).attr("name"); // For contenteditable
577
- if (!name && validator.settings.debug && window.console) {
578
- console.error("%o has no name assigned", this);
579
- }
580
-
581
- if (this.hasAttribute("contenteditable")) {
582
- this.form = $(this).closest("form")[ 0 ];
583
- }
584
-
585
- // Select only the first element for each name, and only those with rules specified
586
- if (name in rulesCache || !validator.objectLength($(this).rules())) {
587
- return false;
588
- }
589
-
590
- rulesCache[ name ] = true;
591
- return true;
592
- });
593
- },
594
-
595
- clean: function (selector) {
596
- return $(selector)[ 0 ];
597
- },
598
-
599
- errors: function () {
600
- var errorClass = this.settings.errorClass.split(" ").join(".");
601
- return $(this.settings.errorElement + "." + errorClass, this.errorContext);
602
- },
603
-
604
- resetInternals: function () {
605
- this.successList = [];
606
- this.errorList = [];
607
- this.errorMap = {};
608
- this.toShow = $([]);
609
- this.toHide = $([]);
610
- },
611
-
612
- reset: function () {
613
- this.resetInternals();
614
- this.currentElements = $([]);
615
- },
616
-
617
- prepareForm: function () {
618
- this.reset();
619
- this.toHide = this.errors().add(this.containers);
620
- },
621
-
622
- prepareElement: function (element) {
623
- this.reset();
624
- this.toHide = this.errorsFor(element);
625
- },
626
-
627
- elementValue: function (element) {
628
- var $element = $(element),
629
- type = element.type,
630
- val, idx;
631
-
632
- if (type === "radio" || type === "checkbox") {
633
- return this.findByName(element.name).filter(":checked").val();
634
- } else if (type === "number" && typeof element.validity !== "undefined") {
635
- return element.validity.badInput ? "NaN" : $element.val();
636
- }
637
-
638
- if (element.hasAttribute("contenteditable")) {
639
- val = $element.text();
640
- } else {
641
- val = $element.val();
642
- }
643
-
644
- if (type === "file") {
645
-
646
- // Modern browser (chrome & safari)
647
- if (val.substr(0, 12) === "C:\\fakepath\\") {
648
- return val.substr(12);
649
- }
650
-
651
- idx = val.lastIndexOf("/");
652
- if (idx >= 0) {
653
- return val.substr(idx + 1);
654
- }
655
-
656
- // Windows-based path
657
- idx = val.lastIndexOf("\\");
658
- if (idx >= 0) {
659
- return val.substr(idx + 1);
660
- }
661
-
662
- // Just the file name
663
- return val;
664
- }
665
-
666
- if (typeof val === "string") {
667
- return val.replace(/\r/g, "");
668
- }
669
- return val;
670
- },
671
-
672
- check: function (element) {
673
- element = this.validationTargetFor(this.clean(element));
674
-
675
- var rules = $(element).rules(),
676
- rulesCount = $.map(rules, function (n, i) {
677
- return i;
678
- }).length,
679
- dependencyMismatch = false,
680
- val = this.elementValue(element),
681
- result, method, rule;
682
- if (typeof rules.normalizer === "function") {
683
- val = rules.normalizer.call(element, val);
684
-
685
- if (typeof val !== "string") {
686
- throw new TypeError("The normalizer should return a string value.");
687
- }
688
- delete rules.normalizer;
689
- }
690
-
691
- for (method in rules) {
692
- rule = {method: method, parameters: rules[ method ]};
693
- try {
694
- result = $.validator.methods[ method ].call(this, val, element, rule.parameters);
695
- if (result === "dependency-mismatch" && rulesCount === 1) {
696
- dependencyMismatch = true;
697
- continue;
698
- }
699
- dependencyMismatch = false;
700
-
701
- if (result === "pending") {
702
- this.toHide = this.toHide.not(this.errorsFor(element));
703
- return;
704
- }
705
-
706
- if (!result) {
707
- this.formatAndAdd(element, rule);
708
- return false;
709
- }
710
- } catch (e) {
711
- if (this.settings.debug && window.console) {
712
- console.log("Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e);
713
- }
714
- if (e instanceof TypeError) {
715
- e.message += ". Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.";
716
- }
717
-
718
- throw e;
719
- }
720
- }
721
- if (dependencyMismatch) {
722
- return;
723
- }
724
- if (this.objectLength(rules)) {
725
- this.successList.push(element);
726
- }
727
- return true;
728
- },
729
-
730
- customDataMessage: function (element, method) {
731
- return $(element).data("msg" + method.charAt(0).toUpperCase() +
732
- method.substring(1).toLowerCase()) || $(element).data("msg");
733
- },
734
-
735
- // Return the custom message for the given element name and validation method
736
- customMessage: function (name, method) {
737
- var m = this.settings.messages[ name ];
738
- return m && (m.constructor === String ? m : m[ method ]);
739
- },
740
-
741
- // Return the first defined argument, allowing empty strings
742
- findDefined: function () {
743
- for (var i = 0; i < arguments.length; i++) {
744
- if (arguments[ i ] !== undefined) {
745
- return arguments[ i ];
746
- }
747
- }
748
- return undefined;
749
- },
750
-
751
- defaultMessage: function (element, rule) {
752
- var message = this.findDefined(
753
- this.customMessage(element.name, rule.method),
754
- this.customDataMessage(element, rule.method),
755
- // 'title' is never undefined, so handle empty string as undefined
756
- !this.settings.ignoreTitle && element.title || undefined,
757
- $.validator.messages[ rule.method ],
758
- "<strong>Warning: No message defined for " + element.name + "</strong>"
759
- ),
760
- theregex = /\$?\{(\d+)\}/g;
761
- if (typeof message === "function") {
762
- message = message.call(this, rule.parameters, element);
763
- } else if (theregex.test(message)) {
764
- message = $.validator.format(message.replace(theregex, "{$1}"), rule.parameters);
765
- }
766
-
767
- return message;
768
- },
769
-
770
- formatAndAdd: function (element, rule) {
771
- var message = this.defaultMessage(element, rule);
772
-
773
- this.errorList.push({
774
- message: message,
775
- element: element,
776
- method: rule.method
777
- });
778
-
779
- this.errorMap[ element.name ] = message;
780
- this.submitted[ element.name ] = message;
781
- },
782
-
783
- addWrapper: function (toToggle) {
784
- if (this.settings.wrapper) {
785
- toToggle = toToggle.add(toToggle.parent(this.settings.wrapper));
786
- }
787
- return toToggle;
788
- },
789
-
790
- defaultShowErrors: function () {
791
- var i, elements, error;
792
- for (i = 0; this.errorList[ i ]; i++) {
793
- error = this.errorList[ i ];
794
- if (this.settings.highlight) {
795
- this.settings.highlight.call(this, error.element, this.settings.errorClass, this.settings.validClass);
796
- }
797
- this.showLabel(error.element, error.message);
798
- }
799
- if (this.errorList.length) {
800
- this.toShow = this.toShow.add(this.containers);
801
- }
802
- if (this.settings.success) {
803
- for (i = 0; this.successList[ i ]; i++) {
804
- this.showLabel(this.successList[ i ]);
805
- }
806
- }
807
- if (this.settings.unhighlight) {
808
- for (i = 0, elements = this.validElements(); elements[ i ]; i++) {
809
- this.settings.unhighlight.call(this, elements[ i ], this.settings.errorClass, this.settings.validClass);
810
- }
811
- }
812
- this.toHide = this.toHide.not(this.toShow);
813
- this.hideErrors();
814
- this.addWrapper(this.toShow).show();
815
- },
816
-
817
- validElements: function () {
818
- return this.currentElements.not(this.invalidElements());
819
- },
820
-
821
- invalidElements: function () {
822
- return $(this.errorList).map(function () {
823
- return this.element;
824
- });
825
- },
826
-
827
- showLabel: function (element, message) {
828
- var place, group, errorID, v,
829
- error = this.errorsFor(element),
830
- elementID = this.idOrName(element),
831
- describedBy = $(element).attr("aria-describedby");
832
-
833
- if (error.length) {
834
-
835
- // Refresh error/success class
836
- error.removeClass(this.settings.validClass).addClass(this.settings.errorClass);
837
-
838
- // Replace message on existing label
839
- error.html(message);
840
- } else {
841
-
842
- // Create error element
843
- error = $("<" + this.settings.errorElement + ">")
844
- .attr("id", elementID + "-error")
845
- .addClass(this.settings.errorClass)
846
- .html(message || "");
847
-
848
- // Maintain reference to the element to be placed into the DOM
849
- place = error;
850
- if (this.settings.wrapper) {
851
- place = error.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
852
- }
853
- if (this.labelContainer.length) {
854
- this.labelContainer.append(place);
855
- } else if (this.settings.errorPlacement) {
856
- this.settings.errorPlacement(place, $(element));
857
- } else {
858
- place.insertAfter(element);
859
- }
860
-
861
- if (error.is("label")) {
862
- error.attr("for", elementID);
863
- } else if (error.parents("label[for='" + this.escapeCssMeta(elementID) + "']").length === 0) {
864
- errorID = error.attr("id");
865
- if (!describedBy) {
866
- describedBy = errorID;
867
- } else if (!describedBy.match(new RegExp("\\b" + this.escapeCssMeta(errorID) + "\\b"))) {
868
- describedBy += " " + errorID;
869
- }
870
- $(element).attr("aria-describedby", describedBy);
871
- group = this.groups[ element.name ];
872
- if (group) {
873
- v = this;
874
- $.each(v.groups, function (name, testgroup) {
875
- if (testgroup === group) {
876
- $("[name='" + v.escapeCssMeta(name) + "']", v.currentForm)
877
- .attr("aria-describedby", error.attr("id"));
878
- }
879
- });
880
- }
881
- }
882
- }
883
- if (!message && this.settings.success) {
884
- error.text("");
885
- if (typeof this.settings.success === "string") {
886
- error.addClass(this.settings.success);
887
- } else {
888
- this.settings.success(error, element);
889
- }
890
- }
891
- this.toShow = this.toShow.add(error);
892
- },
893
-
894
- errorsFor: function (element) {
895
- var name = this.escapeCssMeta(this.idOrName(element)),
896
- describer = $(element).attr("aria-describedby"),
897
- selector = "label[for='" + name + "'], label[for='" + name + "'] *";
898
- if (describer) {
899
- selector = selector + ", #" + this.escapeCssMeta(describer)
900
- .replace(/\s+/g, ", #");
901
- }
902
-
903
- return this
904
- .errors()
905
- .filter(selector);
906
- },
907
- escapeCssMeta: function (string) {
908
- return string.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g, "\\$1");
909
- },
910
-
911
- idOrName: function (element) {
912
- return this.groups[ element.name ] || (this.checkable(element) ? element.name : element.id || element.name);
913
- },
914
-
915
- validationTargetFor: function (element) {
916
-
917
- if (this.checkable(element)) {
918
- element = this.findByName(element.name);
919
- }
920
- return $(element).not(this.settings.ignore)[ 0 ];
921
- },
922
-
923
- checkable: function (element) {
924
- return (/radio|checkbox/i).test(element.type);
925
- },
926
-
927
- findByName: function (name) {
928
- return $(this.currentForm).find("[name='" + this.escapeCssMeta(name) + "']");
929
- },
930
-
931
- getLength: function (value, element) {
932
- switch (element.nodeName.toLowerCase()) {
933
- case "select":
934
- return $("option:selected", element).length;
935
- case "input":
936
- if (this.checkable(element)) {
937
- return this.findByName(element.name).filter(":checked").length;
938
- }
939
- }
940
- return value.length;
941
- },
942
-
943
- depend: function (param, element) {
944
- return this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ](param, element) : true;
945
- },
946
-
947
- dependTypes: {
948
- "boolean": function (param) {
949
- return param;
950
- },
951
- "string": function (param, element) {
952
- return !!$(param, element.form).length;
953
- },
954
- "function": function (param, element) {
955
- return param(element);
956
- }
957
- },
958
-
959
- optional: function (element) {
960
- var val = this.elementValue(element);
961
- return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch";
962
- },
963
-
964
- startRequest: function (element) {
965
- if (!this.pending[ element.name ]) {
966
- this.pendingRequest++;
967
- $(element).addClass(this.settings.pendingClass);
968
- this.pending[ element.name ] = true;
969
- }
970
- },
971
- stopRequest: function (element, valid) {
972
- this.pendingRequest--;
973
- if (this.pendingRequest < 0) {
974
- this.pendingRequest = 0;
975
- }
976
- delete this.pending[ element.name ];
977
- $(element).removeClass(this.settings.pendingClass);
978
- if (valid && this.pendingRequest === 0 && this.formSubmitted && this.form()) {
979
- $(this.currentForm).submit();
980
- this.formSubmitted = false;
981
- } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {
982
- $(this.currentForm).triggerHandler("invalid-form", [this]);
983
- this.formSubmitted = false;
984
- }
985
- },
986
- previousValue: function (element, method) {
987
- return $.data(element, "previousValue") || $.data(element, "previousValue", {
988
- old: null,
989
- valid: true,
990
- message: this.defaultMessage(element, {method: method})
991
- });
992
- },
993
- destroy: function () {
994
- this.resetForm();
995
- $(this.currentForm)
996
- .off(".validate")
997
- .removeData("validator")
998
- .find(".validate-equalTo-blur")
999
- .off(".validate-equalTo")
1000
- .removeClass("validate-equalTo-blur");
1001
- }
1002
  },
1003
  classRuleSettings: {
1004
- required: {required: true},
1005
- email: {email: true},
1006
- url: {url: true},
1007
- date: {date: true},
1008
- dateISO: {dateISO: true},
1009
- number: {number: true},
1010
- digits: {digits: true},
1011
- creditcard: {creditcard: true}
1012
  },
1013
 
1014
  addClassRules: function (className, rules) {
1015
- if (className.constructor === String) {
1016
- this.classRuleSettings[ className ] = rules;
1017
- } else {
1018
- $.extend(this.classRuleSettings, className);
1019
- }
1020
  },
1021
 
1022
  classRules: function (element) {
1023
- var rules = {},
1024
- classes = $(element).attr("class");
1025
-
1026
- if (classes) {
1027
- $.each(classes.split(" "), function () {
1028
- if (this in $.validator.classRuleSettings) {
1029
- $.extend(rules, $.validator.classRuleSettings[ this ]);
1030
- }
1031
- });
1032
- }
1033
- return rules;
1034
  },
1035
 
1036
  normalizeAttributeRule: function (rules, type, method, value) {
1037
- if (/min|max|step/.test(method) && (type === null || /number|range|text/.test(type))) {
1038
- value = Number(value);
1039
- if (isNaN(value)) {
1040
- value = undefined;
1041
- }
1042
- }
1043
-
1044
- if (value || value === 0) {
1045
- rules[ method ] = value;
1046
- } else if (type === method && type !== "range") {
1047
- rules[ method ] = true;
1048
- }
1049
  },
1050
 
1051
  attributeRules: function (element) {
1052
- var rules = {},
1053
- $element = $(element),
1054
- type = element.getAttribute("type"),
1055
- method, value;
1056
-
1057
- for (method in $.validator.methods) {
1058
- if (method === "required") {
1059
- value = element.getAttribute(method);
1060
- if (value === "") {
1061
- value = true;
1062
- }
1063
- value = !!value;
1064
- } else {
1065
- value = $element.attr(method);
1066
- }
1067
- this.normalizeAttributeRule(rules, type, method, value);
1068
- }
1069
- if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
1070
- delete rules.maxlength;
1071
- }
1072
-
1073
- return rules;
1074
  },
1075
 
1076
  dataRules: function (element) {
1077
- var rules = {},
1078
- $element = $(element),
1079
- type = element.getAttribute("type"),
1080
- method, value;
1081
-
1082
- for (method in $.validator.methods) {
1083
- value = $element.data("rule" + method.charAt(0).toUpperCase() + method.substring(1).toLowerCase());
1084
- this.normalizeAttributeRule(rules, type, method, value);
1085
- }
1086
- return rules;
1087
  },
1088
 
1089
  staticRules: function (element) {
1090
- var rules = {},
1091
- validator = $.data(element.form, "validator");
1092
 
1093
- if (validator.settings.rules) {
1094
- rules = $.validator.normalizeRule(validator.settings.rules[ element.name ]) || {};
1095
- }
1096
- return rules;
1097
  },
1098
 
1099
  normalizeRules: function (rules, element) {
1100
- $.each(rules, function (prop, val) {
1101
- if (val === false) {
1102
- delete rules[ prop ];
1103
- return;
1104
- }
1105
- if (val.param || val.depends) {
1106
- var keepRule = true;
1107
- switch (typeof val.depends) {
1108
- case "string":
1109
- keepRule = !!$(val.depends, element.form).length;
1110
- break;
1111
- case "function":
1112
- keepRule = val.depends.call(element, element);
1113
- break;
1114
- }
1115
- if (keepRule) {
1116
- rules[ prop ] = val.param !== undefined ? val.param : true;
1117
- } else {
1118
- $.data(element.form, "validator").resetElements($(element));
1119
- delete rules[ prop ];
1120
- }
1121
- }
1122
- });
1123
- $.each(rules, function (rule, parameter) {
1124
- rules[ rule ] = $.isFunction(parameter) && rule !== "normalizer" ? parameter(element) : parameter;
1125
- });
1126
- $.each(["minlength", "maxlength"], function () {
1127
- if (rules[ this ]) {
1128
- rules[ this ] = Number(rules[ this ]);
1129
- }
1130
- });
1131
- $.each(["rangelength", "range"], function () {
1132
- var parts;
1133
- if (rules[ this ]) {
1134
- if ($.isArray(rules[ this ])) {
1135
- rules[ this ] = [Number(rules[ this ][ 0 ]), Number(rules[ this ][ 1 ])];
1136
- } else if (typeof rules[ this ] === "string") {
1137
- parts = rules[ this ].replace(/[\[\]]/g, "").split(/[\s,]+/);
1138
- rules[ this ] = [Number(parts[ 0 ]), Number(parts[ 1 ])];
1139
- }
1140
- }
1141
- });
1142
- if ($.validator.autoCreateRanges) {
1143
- if (rules.min != null && rules.max != null) {
1144
- rules.range = [rules.min, rules.max];
1145
- delete rules.min;
1146
- delete rules.max;
1147
- }
1148
- if (rules.minlength != null && rules.maxlength != null) {
1149
- rules.rangelength = [rules.minlength, rules.maxlength];
1150
- delete rules.minlength;
1151
- delete rules.maxlength;
1152
- }
1153
- }
1154
- return rules;
1155
  },
1156
  normalizeRule: function (data) {
1157
- if (typeof data === "string") {
1158
- var transformed = {};
1159
- $.each(data.split(/\s/), function () {
1160
- transformed[ this ] = true;
1161
- });
1162
- data = transformed;
1163
- }
1164
- return data;
1165
  },
1166
  addMethod: function (name, method, message) {
1167
- $.validator.methods[ name ] = method;
1168
- $.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];
1169
- if (method.length < 3) {
1170
- $.validator.addClassRules(name, $.validator.normalizeRule(name));
1171
- }
1172
  },
1173
  methods: {
1174
- required: function (value, element, param) {
1175
- if (!this.depend(param, element)) {
1176
- return "dependency-mismatch";
1177
- }
1178
- if (element.nodeName.toLowerCase() === "select") {
1179
- var val = $(element).val();
1180
- return val && val.length > 0;
1181
- }
1182
- if (this.checkable(element)) {
1183
- return this.getLength(value, element) > 0;
1184
- }
1185
- return value.length > 0;
1186
- },
1187
- email: function (value, element) {
1188
- return this.optional(element) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(value);
1189
- },
1190
- url: function (value, element) {
1191
- return this.optional(element) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(value);
1192
- },
1193
- date: function (value, element) {
1194
- return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());
1195
- },
1196
- dateISO: function (value, element) {
1197
- return this.optional(element) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value);
1198
- },
1199
- number: function (value, element) {
1200
- return this.optional(element) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
1201
- },
1202
- digits: function (value, element) {
1203
- return this.optional(element) || /^\d+$/.test(value);
1204
- },
1205
- minlength: function (value, element, param) {
1206
- var length = $.isArray(value) ? value.length : this.getLength(value, element);
1207
- return this.optional(element) || length >= param;
1208
- },
1209
- maxlength: function (value, element, param) {
1210
- var length = $.isArray(value) ? value.length : this.getLength(value, element);
1211
- return this.optional(element) || length <= param;
1212
- },
1213
- rangelength: function (value, element, param) {
1214
- var length = $.isArray(value) ? value.length : this.getLength(value, element);
1215
- return this.optional(element) || (length >= param[ 0 ] && length <= param[ 1 ]);
1216
- },
1217
- min: function (value, element, param) {
1218
- return this.optional(element) || value >= param;
1219
- },
1220
- max: function (value, element, param) {
1221
- return this.optional(element) || value <= param;
1222
- },
1223
- range: function (value, element, param) {
1224
- return this.optional(element) || (value >= param[ 0 ] && value <= param[ 1 ]);
1225
- },
1226
- step: function (value, element, param) {
1227
- var type = $(element).attr("type"),
1228
- errorMessage = "Step attribute on input type " + type + " is not supported.",
1229
- supportedTypes = ["text", "number", "range"],
1230
- re = new RegExp("\\b" + type + "\\b"),
1231
- notSupported = type && !re.test(supportedTypes.join());
1232
- if (notSupported) {
1233
- throw new Error(errorMessage);
1234
- }
1235
- return this.optional(element) || (value % param === 0);
1236
- },
1237
- equalTo: function (value, element, param) {
1238
- var target = $(param);
1239
- if (this.settings.onfocusout && target.not(".validate-equalTo-blur").length) {
1240
- target.addClass("validate-equalTo-blur").on("blur.validate-equalTo", function () {
1241
- $(element).valid();
1242
- });
1243
- }
1244
- return value === target.val();
1245
- },
1246
- remote: function (value, element, param, method) {
1247
- if (this.optional(element)) {
1248
- return "dependency-mismatch";
1249
- }
1250
-
1251
- method = typeof method === "string" && method || "remote";
1252
-
1253
- var previous = this.previousValue(element, method),
1254
- validator, data, optionDataString;
1255
-
1256
- if (!this.settings.messages[ element.name ]) {
1257
- this.settings.messages[ element.name ] = {};
1258
- }
1259
- previous.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];
1260
- this.settings.messages[ element.name ][ method ] = previous.message;
1261
-
1262
- param = typeof param === "string" && {url: param} || param;
1263
- optionDataString = $.param($.extend({data: value}, param.data));
1264
- if (previous.old === optionDataString) {
1265
- return previous.valid;
1266
- }
1267
-
1268
- previous.old = optionDataString;
1269
- validator = this;
1270
- this.startRequest(element);
1271
- data = {};
1272
- data[ element.name ] = value;
1273
- $.ajax($.extend(true, {
1274
- mode: "abort",
1275
- port: "validate" + element.name,
1276
- dataType: "json",
1277
- data: data,
1278
- context: validator.currentForm,
1279
- success: function (response) {
1280
- var valid = response === true || response === "true",
1281
- errors, message, submitted;
1282
-
1283
- validator.settings.messages[ element.name ][ method ] = previous.originalMessage;
1284
- if (valid) {
1285
- submitted = validator.formSubmitted;
1286
- validator.resetInternals();
1287
- validator.toHide = validator.errorsFor(element);
1288
- validator.formSubmitted = submitted;
1289
- validator.successList.push(element);
1290
- validator.invalid[ element.name ] = false;
1291
- validator.showErrors();
1292
- } else {
1293
- errors = {};
1294
- message = response || validator.defaultMessage(element, {method: method, parameters: value});
1295
- errors[ element.name ] = previous.message = message;
1296
- validator.invalid[ element.name ] = true;
1297
- validator.showErrors(errors);
1298
- }
1299
- previous.valid = valid;
1300
- validator.stopRequest(element, valid);
1301
- }
1302
- }, param));
1303
- return "pending";
1304
- }
1305
  }
1306
  });
1307
  var pendingRequests = {},
1308
- ajax;
1309
  if ($.ajaxPrefilter) {
1310
  $.ajaxPrefilter(function (settings, _, xhr) {
1311
- var port = settings.port;
1312
- if (settings.mode === "abort") {
1313
- if (pendingRequests[ port ]) {
1314
- pendingRequests[ port ].abort();
1315
- }
1316
- pendingRequests[ port ] = xhr;
1317
- }
1318
  });
1319
  } else {
1320
  ajax = $.ajax;
1321
  $.ajax = function (settings) {
1322
- var mode = ("mode" in settings ? settings : $.ajaxSettings).mode,
1323
- port = ("port" in settings ? settings : $.ajaxSettings).port;
1324
- if (mode === "abort") {
1325
- if (pendingRequests[ port ]) {
1326
- pendingRequests[ port ].abort();
1327
- }
1328
- pendingRequests[ port ] = ajax.apply(this, arguments);
1329
- return pendingRequests[ port ];
1330
- }
1331
- return ajax.apply(this, arguments);
1332
  };
1333
  }
1334
  }));
15
  $.extend($.fn, {
16
  validate: function (options) {
17
 
18
+ // If nothing is selected, return nothing; can't chain anyway
19
+ if (!this.length) {
20
+ if (options && options.debug && window.console) {
21
+ console.warn("Nothing selected, can't validate, returning nothing.");
22
+ }
23
+ return;
24
+ }
25
+
26
+ // Check if a validator for this form was already created
27
+ var validator = $.data(this[ 0 ], "validator");
28
+ if (validator) {
29
+ return validator;
30
+ }
31
+
32
+ // Add novalidate tag if HTML5.
33
+ this.attr("novalidate", "novalidate");
34
+
35
+ validator = new $.validator(options, this[ 0 ]);
36
+ $.data(this[ 0 ], "validator", validator);
37
+
38
+ if (validator.settings.onsubmit) {
39
+
40
+ this.on("click.validate", ":submit", function (event) {
41
+ if (validator.settings.submitHandler) {
42
+ validator.submitButton = event.target;
43
+ }
44
+
45
+ // Allow suppressing validation by adding a cancel class to the submit button
46
+ if ($(this).hasClass("cancel")) {
47
+ validator.cancelSubmit = true;
48
+ }
49
+
50
+ // Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
51
+ if ($(this).attr("formnovalidate") !== undefined) {
52
+ validator.cancelSubmit = true;
53
+ }
54
+ });
55
+
56
+ // Validate the form on submit
57
+ this.on("submit.validate", function (event) {
58
+ if (validator.settings.debug) {
59
+
60
+ // Prevent form submit to be able to see console output
61
+ event.preventDefault();
62
+ }
63
+ function handle() {
64
+ var hidden, result;
65
+ if (validator.settings.submitHandler) {
66
+ if (validator.submitButton) {
67
+
68
+ // Insert a hidden input as a replacement for the missing submit button
69
+ hidden = $("<input type='hidden'/>")
70
+ .attr("name", validator.submitButton.name)
71
+ .val($(validator.submitButton).val())
72
+ .appendTo(validator.currentForm);
73
+ }
74
+ result = validator.settings.submitHandler.call(validator, validator.currentForm, event);
75
+ if (validator.submitButton) {
76
+
77
+ // And clean up afterwards; thanks to no-block-scope, hidden can be referenced
78
+ hidden.remove();
79
+ }
80
+ if (result !== undefined) {
81
+ return result;
82
+ }
83
+ return false;
84
+ }
85
+ return true;
86
+ }
87
+ if (validator.cancelSubmit) {
88
+ validator.cancelSubmit = false;
89
+ return handle();
90
+ }
91
+ if (validator.form()) {
92
+ if (validator.pendingRequest) {
93
+ validator.formSubmitted = true;
94
+ return false;
95
+ }
96
+ return handle();
97
+ } else {
98
+ validator.focusInvalid();
99
+ return false;
100
+ }
101
+ });
102
+ }
103
+
104
+ return validator;
105
  },
106
  valid: function () {
107
+ var valid, validator, errorList;
108
+
109
+ if ($(this[ 0 ]).is("form")) {
110
+ valid = this.validate().form();
111
+ } else {
112
+ errorList = [];
113
+ valid = true;
114
+ validator = $(this[ 0 ].form).validate();
115
+ this.each(function () {
116
+ valid = validator.element(this) && valid;
117
+ if (!valid) {
118
+ errorList = errorList.concat(validator.errorList);
119
+ }
120
+ });
121
+ validator.errorList = errorList;
122
+ }
123
+ return valid;
124
  },
125
  rules: function (command, argument) {
126
 
127
+ // If nothing is selected, return nothing; can't chain anyway
128
+ if (!this.length) {
129
+ return;
130
+ }
131
+
132
+ var element = this[ 0 ],
133
+ settings, staticRules, existingRules, data, param, filtered;
134
+
135
+ if (command) {
136
+ settings = $.data(element.form, "validator").settings;
137
+ staticRules = settings.rules;
138
+ existingRules = $.validator.staticRules(element);
139
+ switch (command) {
140
+ case "add":
141
+ $.extend(existingRules, $.validator.normalizeRule(argument));
142
+
143
+ // Remove messages from rules, but allow them to be set separately
144
+ delete existingRules.messages;
145
+ staticRules[ element.name ] = existingRules;
146
+ if (argument.messages) {
147
+ settings.messages[ element.name ] = $.extend(settings.messages[ element.name ], argument.messages);
148
+ }
149
+ break;
150
+ case "remove":
151
+ if (!argument) {
152
+ delete staticRules[ element.name ];
153
+ return existingRules;
154
+ }
155
+ filtered = {};
156
+ $.each(argument.split(/\s/), function (index, method) {
157
+ filtered[ method ] = existingRules[ method ];
158
+ delete existingRules[ method ];
159
+ if (method === "required") {
160
+ $(element).removeAttr("aria-required");
161
+ }
162
+ });
163
+ return filtered;
164
+ }
165
+ }
166
+
167
+ data = $.validator.normalizeRules(
168
+ $.extend(
169
+ {},
170
+ $.validator.classRules(element),
171
+ $.validator.attributeRules(element),
172
+ $.validator.dataRules(element),
173
+ $.validator.staticRules(element)
174
+ ), element);
175
+
176
+ // Make sure required is at front
177
+ if (data.required) {
178
+ param = data.required;
179
+ delete data.required;
180
+ data = $.extend({required: param}, data);
181
+ $(element).attr("aria-required", "true");
182
+ }
183
+
184
+ // Make sure remote is at back
185
+ if (data.remote) {
186
+ param = data.remote;
187
+ delete data.remote;
188
+ data = $.extend(data, {remote: param});
189
+ }
190
+
191
+ return data;
192
  }
193
  });
194
 
195
  // Custom selectors
196
  $.extend($.expr[ ":" ], {
197
  blank: function (a) {
198
+ return !$.trim("" + $(a).val());
199
  },
200
  filled: function (a) {
201
+ var val = $(a).val();
202
+ return val !== null && !!$.trim("" + val);
203
  },
204
 
205
  unchecked: function (a) {
206
+ return !$(a).prop("checked");
207
  }
208
  });
209
 
216
 
217
  $.validator.format = function (source, params) {
218
  if (arguments.length === 1) {
219
+ return function () {
220
+ var args = $.makeArray(arguments);
221
+ args.unshift(source);
222
+ return $.validator.format.apply(this, args);
223
+ };
224
  }
225
  if (params === undefined) {
226
+ return source;
227
  }
228
  if (arguments.length > 2 && params.constructor !== Array) {
229
+ params = $.makeArray(arguments).slice(1);
230
  }
231
  if (params.constructor !== Array) {
232
+ params = [params];
233
  }
234
  $.each(params, function (i, n) {
235
+ source = source.replace(new RegExp("\\{" + i + "\\}", "g"), function () {
236
+ return n;
237
+ });
238
  });
239
  return source;
240
  };
242
  $.extend($.validator, {
243
 
244
  defaults: {
245
+ messages: {},
246
+ groups: {},
247
+ rules: {},
248
+ errorClass: "error",
249
+ pendingClass: "pending",
250
+ validClass: "valid",
251
+ errorElement: "label",
252
+ focusCleanup: false,
253
+ focusInvalid: true,
254
+ errorContainer: $([]),
255
+ errorLabelContainer: $([]),
256
+ onsubmit: true,
257
+ ignore: ":hidden",
258
+ ignoreTitle: false,
259
+ onfocusin: function (element) {
260
+ this.lastActive = element;
261
+ if (this.settings.focusCleanup) {
262
+ if (this.settings.unhighlight) {
263
+ this.settings.unhighlight.call(this, element, this.settings.errorClass, this.settings.validClass);
264
+ }
265
+ this.hideThese(this.errorsFor(element));
266
+ }
267
+ },
268
+ onfocusout: function (element) {
269
+ if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {
270
+ this.element(element);
271
+ }
272
+ },
273
+ onkeyup: function (element, event) {
274
+ var excludedKeys = [
275
+ 16, 17, 18, 20, 35, 36, 37,
276
+ 38, 39, 40, 45, 144, 225
277
+ ];
278
+
279
+ if (event.which === 9 && this.elementValue(element) === "" || $.inArray(event.keyCode, excludedKeys) !== -1) {
280
+ return;
281
+ } else if (element.name in this.submitted || element.name in this.invalid) {
282
+ this.element(element);
283
+ }
284
+ },
285
+ onclick: function (element) {
286
+
287
+ // Click on selects, radiobuttons and checkboxes
288
+ if (element.name in this.submitted) {
289
+ this.element(element);
290
+
291
+ // Or option elements, check parent select in that case
292
+ } else if (element.parentNode.name in this.submitted) {
293
+ this.element(element.parentNode);
294
+ }
295
+ },
296
+ highlight: function (element, errorClass, validClass) {
297
+ if (element.type === "radio") {
298
+ this.findByName(element.name).addClass(errorClass).removeClass(validClass);
299
+ } else {
300
+ $(element).addClass(errorClass).removeClass(validClass);
301
+ }
302
+ },
303
+ unhighlight: function (element, errorClass, validClass) {
304
+ if (element.type === "radio") {
305
+ this.findByName(element.name).removeClass(errorClass).addClass(validClass);
306
+ } else {
307
+ $(element).removeClass(errorClass).addClass(validClass);
308
+ }
309
+ }
310
  },
311
  setDefaults: function (settings) {
312
+ $.extend($.validator.defaults, settings);
313
  },
314
 
315
  messages: {
316
+ required: "This field is required.",
317
+ remote: "Please fix this field.",
318
+ email: "Please enter a valid email address.",
319
+ url: "Please enter a valid URL.",
320
+ date: "Please enter a valid date.",
321
+ dateISO: "Please enter a valid date ( ISO ).",
322
+ number: "Please enter a valid number.",
323
+ digits: "Please enter only digits.",
324
+ equalTo: "Please enter the same value again.",
325
+ maxlength: $.validator.format("Please enter no more than {0} characters."),
326
+ minlength: $.validator.format("Please enter at least {0} characters."),
327
+ rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
328
+ range: $.validator.format("Please enter a value between {0} and {1}."),
329
+ max: $.validator.format("Please enter a value less than or equal to {0}."),
330
+ min: $.validator.format("Please enter a value greater than or equal to {0}."),
331
+ step: $.validator.format("Please enter a multiple of {0}.")
332
  },
333
 
334
  autoCreateRanges: false,
335
 
336
  prototype: {
337
 
338
+ init: function () {
339
+ this.labelContainer = $(this.settings.errorLabelContainer);
340
+ this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
341
+ this.containers = $(this.settings.errorContainer).add(this.settings.errorLabelContainer);
342
+ this.submitted = {};
343
+ this.valueCache = {};
344
+ this.pendingRequest = 0;
345
+ this.pending = {};
346
+ this.invalid = {};
347
+ this.reset();
348
+
349
+ var groups = (this.groups = {}),
350
+ rules;
351
+ $.each(this.settings.groups, function (key, value) {
352
+ if (typeof value === "string") {
353
+ value = value.split(/\s/);
354
+ }
355
+ $.each(value, function (index, name) {
356
+ groups[ name ] = key;
357
+ });
358
+ });
359
+ rules = this.settings.rules;
360
+ $.each(rules, function (key, value) {
361
+ rules[ key ] = $.validator.normalizeRule(value);
362
+ });
363
+
364
+ function delegate(event) {
365
+ var validator = $.data(this.form, "validator"),
366
+ eventType = "on" + event.type.replace(/^validate/, ""),
367
+ settings = validator.settings;
368
+ if (settings[ eventType ] && !$(this).is(settings.ignore)) {
369
+ settings[ eventType ].call(validator, this, event);
370
+ }
371
+ }
372
+
373
+ $(this.currentForm)
374
+ .on("focusin.validate focusout.validate keyup.validate",
375
+ ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " +
376
+ "[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " +
377
+ "[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " +
378
+ "[type='radio'], [type='checkbox'], [contenteditable]", delegate)
379
+ .on("click.validate", "select, option, [type='radio'], [type='checkbox']", delegate);
380
+
381
+ if (this.settings.invalidHandler) {
382
+ $(this.currentForm).on("invalid-form.validate", this.settings.invalidHandler);
383
+ }
384
+
385
+ // Add aria-required to any Static/Data/Class required fields before first validation
386
+ // Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html
387
+ $(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required", "true");
388
+ },
389
+
390
+ form: function () {
391
+ this.checkForm();
392
+ $.extend(this.submitted, this.errorMap);
393
+ this.invalid = $.extend({}, this.errorMap);
394
+ if (!this.valid()) {
395
+ $(this.currentForm).triggerHandler("invalid-form", [this]);
396
+ }
397
+ this.showErrors();
398
+ return this.valid();
399
+ },
400
+
401
+ checkForm: function () {
402
+ this.prepareForm();
403
+ for (var i = 0, elements = (this.currentElements = this.elements()); elements[ i ]; i++) {
404
+ this.check(elements[ i ]);
405
+ }
406
+ return this.valid();
407
+ },
408
+ element: function (element) {
409
+ var cleanElement = this.clean(element),
410
+ checkElement = this.validationTargetFor(cleanElement),
411
+ v = this,
412
+ result = true,
413
+ rs, group;
414
+
415
+ if (checkElement === undefined) {
416
+ delete this.invalid[ cleanElement.name ];
417
+ } else {
418
+ this.prepareElement(checkElement);
419
+ this.currentElements = $(checkElement);
420
+
421
+ // If this element is grouped, then validate all group elements already
422
+ // containing a value
423
+ group = this.groups[ checkElement.name ];
424
+ if (group) {
425
+ $.each(this.groups, function (name, testgroup) {
426
+ if (testgroup === group && name !== checkElement.name) {
427
+ cleanElement = v.validationTargetFor(v.clean(v.findByName(name)));
428
+ if (cleanElement && cleanElement.name in v.invalid) {
429
+ v.currentElements.push(cleanElement);
430
+ result = result && v.check(cleanElement);
431
+ }
432
+ }
433
+ });
434
+ }
435
+
436
+ rs = this.check(checkElement) !== false;
437
+ result = result && rs;
438
+ if (rs) {
439
+ this.invalid[ checkElement.name ] = false;
440
+ } else {
441
+ this.invalid[ checkElement.name ] = true;
442
+ }
443
+
444
+ if (!this.numberOfInvalids()) {
445
+
446
+ // Hide error containers on last error
447
+ this.toHide = this.toHide.add(this.containers);
448
+ }
449
+ this.showErrors();
450
+
451
+ // Add aria-invalid status for screen readers
452
+ $(element).attr("aria-invalid", !rs);
453
+ }
454
+
455
+ return result;
456
+ },
457
+ showErrors: function (errors) {
458
+ if (errors) {
459
+ var validator = this;
460
+
461
+ // Add items to error list and map
462
+ $.extend(this.errorMap, errors);
463
+ this.errorList = $.map(this.errorMap, function (message, name) {
464
+ return {
465
+ message: message,
466
+ element: validator.findByName(name)[ 0 ]
467
+ };
468
+ });
469
+
470
+ // Remove items from success list
471
+ this.successList = $.grep(this.successList, function (element) {
472
+ return !(element.name in errors);
473
+ });
474
+ }
475
+ if (this.settings.showErrors) {
476
+ this.settings.showErrors.call(this, this.errorMap, this.errorList);
477
+ } else {
478
+ this.defaultShowErrors();
479
+ }
480
+ },
481
+ resetForm: function () {
482
+ if ($.fn.resetForm) {
483
+ $(this.currentForm).resetForm();
484
+ }
485
+ this.invalid = {};
486
+ this.submitted = {};
487
+ this.prepareForm();
488
+ this.hideErrors();
489
+ var elements = this.elements()
490
+ .removeData("previousValue")
491
+ .removeAttr("aria-invalid");
492
+
493
+ this.resetElements(elements);
494
+ },
495
+
496
+ resetElements: function (elements) {
497
+ var i;
498
+
499
+ if (this.settings.unhighlight) {
500
+ for (i = 0; elements[ i ]; i++) {
501
+ this.settings.unhighlight.call(this, elements[ i ],
502
+ this.settings.errorClass, "");
503
+ this.findByName(elements[ i ].name).removeClass(this.settings.validClass);
504
+ }
505
+ } else {
506
+ elements
507
+ .removeClass(this.settings.errorClass)
508
+ .removeClass(this.settings.validClass);
509
+ }
510
+ },
511
+
512
+ numberOfInvalids: function () {
513
+ return this.objectLength(this.invalid);
514
+ },
515
+
516
+ objectLength: function (obj) {
517
+ /* jshint unused: false */
518
+ var count = 0,
519
+ i;
520
+ for (i in obj) {
521
+ if (obj[ i ]) {
522
+ count++;
523
+ }
524
+ }
525
+ return count;
526
+ },
527
+
528
+ hideErrors: function () {
529
+ this.hideThese(this.toHide);
530
+ },
531
+
532
+ hideThese: function (errors) {
533
+ errors.not(this.containers).text("");
534
+ this.addWrapper(errors).hide();
535
+ },
536
+
537
+ valid: function () {
538
+ return this.size() === 0;
539
+ },
540
+
541
+ size: function () {
542
+ return this.errorList.length;
543
+ },
544
+
545
+ focusInvalid: function () {
546
+ if (this.settings.focusInvalid) {
547
+ try {
548
+ $(this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])
549
+ .filter(":visible")
550
+ .focus()
551
+
552
+ // Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
553
+ .trigger("focusin");
554
+ } catch (e) {
555
+ }
556
+ }
557
+ },
558
+
559
+ findLastActive: function () {
560
+ var lastActive = this.lastActive;
561
+ return lastActive && $.grep(this.errorList, function (n) {
562
+ return n.element.name === lastActive.name;
563
+ }).length === 1 && lastActive;
564
+ },
565
+
566
+ elements: function () {
567
+ var validator = this,
568
+ rulesCache = {};
569
+
570
+ // Select all valid inputs inside the form (no submit or reset buttons)
571
+ return $(this.currentForm)
572
+ .find("input, select, textarea, [contenteditable]")
573
+ .not(":submit, :reset, :image, :disabled")
574
+ .not(this.settings.ignore)
575
+ .filter(function () {
576
+ var name = this.name || $(this).attr("name"); // For contenteditable
577
+ if (!name && validator.settings.debug && window.console) {
578
+ console.error("%o has no name assigned", this);
579
+ }
580
+
581
+ if (this.hasAttribute("contenteditable")) {
582
+ this.form = $(this).closest("form")[ 0 ];
583
+ }
584
+
585
+ // Select only the first element for each name, and only those with rules specified
586
+ if (name in rulesCache || !validator.objectLength($(this).rules())) {
587
+ return false;
588
+ }
589
+
590
+ rulesCache[ name ] = true;
591
+ return true;
592
+ });
593
+ },
594
+
595
+ clean: function (selector) {
596
+ return $(selector)[ 0 ];
597
+ },
598
+
599
+ errors: function () {
600
+ var errorClass = this.settings.errorClass.split(" ").join(".");
601
+ return $(this.settings.errorElement + "." + errorClass, this.errorContext);
602
+ },
603
+
604
+ resetInternals: function () {
605
+ this.successList = [];
606
+ this.errorList = [];
607
+ this.errorMap = {};
608
+ this.toShow = $([]);
609
+ this.toHide = $([]);
610
+ },
611
+
612
+ reset: function () {
613
+ this.resetInternals();
614
+ this.currentElements = $([]);
615
+ },
616
+
617
+ prepareForm: function () {
618
+ this.reset();
619
+ this.toHide = this.errors().add(this.containers);
620
+ },
621
+
622
+ prepareElement: function (element) {
623
+ this.reset();
624
+ this.toHide = this.errorsFor(element);
625
+ },
626
+
627
+ elementValue: function (element) {
628
+ var $element = $(element),
629
+ type = element.type,
630
+ val, idx;
631
+
632
+ if (type === "radio" || type === "checkbox") {
633
+ return this.findByName(element.name).filter(":checked").val();
634
+ } else if (type === "number" && typeof element.validity !== "undefined") {
635
+ return element.validity.badInput ? "NaN" : $element.val();
636
+ }
637
+
638
+ if (element.hasAttribute("contenteditable")) {
639
+ val = $element.text();
640
+ } else {
641
+ val = $element.val();
642
+ }
643
+
644
+ if (type === "file") {
645
+
646
+ // Modern browser (chrome & safari)
647
+ if (val.substr(0, 12) === "C:\\fakepath\\") {
648
+ return val.substr(12);
649
+ }
650
+
651
+ idx = val.lastIndexOf("/");
652
+ if (idx >= 0) {
653
+ return val.substr(idx + 1);
654
+ }
655
+
656
+ // Windows-based path
657
+ idx = val.lastIndexOf("\\");
658
+ if (idx >= 0) {
659
+ return val.substr(idx + 1);
660
+ }
661
+
662
+ // Just the file name
663
+ return val;
664
+ }
665
+
666
+ if (typeof val === "string") {
667
+ return val.replace(/\r/g, "");
668
+ }
669
+ return val;
670
+ },
671
+
672
+ check: function (element) {
673
+ element = this.validationTargetFor(this.clean(element));
674
+
675
+ var rules = $(element).rules(),
676
+ rulesCount = $.map(rules, function (n, i) {
677
+ return i;
678
+ }).length,
679
+ dependencyMismatch = false,
680
+ val = this.elementValue(element),
681
+ result, method, rule;
682
+ if (typeof rules.normalizer === "function") {
683
+ val = rules.normalizer.call(element, val);
684
+
685
+ if (typeof val !== "string") {
686
+ throw new TypeError("The normalizer should return a string value.");
687
+ }
688
+ delete rules.normalizer;
689
+ }
690
+
691
+ for (method in rules) {
692
+ rule = {method: method, parameters: rules[ method ]};
693
+ try {
694
+ result = $.validator.methods[ method ].call(this, val, element, rule.parameters);
695
+ if (result === "dependency-mismatch" && rulesCount === 1) {
696
+ dependencyMismatch = true;
697
+ continue;
698
+ }
699
+ dependencyMismatch = false;
700
+
701
+ if (result === "pending") {
702
+ this.toHide = this.toHide.not(this.errorsFor(element));
703
+ return;
704
+ }
705
+
706
+ if (!result) {
707
+ this.formatAndAdd(element, rule);
708
+ return false;
709
+ }
710
+ } catch (e) {
711
+ if (this.settings.debug && window.console) {
712
+ console.log("Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e);
713
+ }
714
+ if (e instanceof TypeError) {
715
+ e.message += ". Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.";
716
+ }
717
+
718
+ throw e;
719
+ }
720
+ }
721
+ if (dependencyMismatch) {
722
+ return;
723
+ }
724
+ if (this.objectLength(rules)) {
725
+ this.successList.push(element);
726
+ }
727
+ return true;
728
+ },
729
+
730
+ customDataMessage: function (element, method) {
731
+ return $(element).data("msg" + method.charAt(0).toUpperCase() +
732
+ method.substring(1).toLowerCase()) || $(element).data("msg");
733
+ },
734
+
735
+ // Return the custom message for the given element name and validation method
736
+ customMessage: function (name, method) {
737
+ var m = this.settings.messages[ name ];
738
+ return m && (m.constructor === String ? m : m[ method ]);
739
+ },
740
+
741
+ // Return the first defined argument, allowing empty strings
742
+ findDefined: function () {
743
+ for (var i = 0; i < arguments.length; i++) {
744
+ if (arguments[ i ] !== undefined) {
745
+ return arguments[ i ];
746
+ }
747
+ }
748
+ return undefined;
749
+ },
750
+
751
+ defaultMessage: function (element, rule) {
752
+ var message = this.findDefined(
753
+ this.customMessage(element.name, rule.method),
754
+ this.customDataMessage(element, rule.method),
755
+ // 'title' is never undefined, so handle empty string as undefined
756
+ !this.settings.ignoreTitle && element.title || undefined,
757
+ $.validator.messages[ rule.method ],
758
+ "<strong>Warning: No message defined for " + element.name + "</strong>"
759
+ ),
760
+ theregex = /\$?\{(\d+)\}/g;
761
+ if (typeof message === "function") {
762
+ message = message.call(this, rule.parameters, element);
763
+ } else if (theregex.test(message)) {
764
+ message = $.validator.format(message.replace(theregex, "{$1}"), rule.parameters);
765
+ }
766
+
767
+ return message;
768
+ },
769
+
770
+ formatAndAdd: function (element, rule) {
771
+ var message = this.defaultMessage(element, rule);
772
+
773
+ this.errorList.push({
774
+ message: message,
775
+ element: element,
776
+ method: rule.method
777
+ });
778
+
779
+ this.errorMap[ element.name ] = message;
780
+ this.submitted[ element.name ] = message;
781
+ },
782
+
783
+ addWrapper: function (toToggle) {
784
+ if (this.settings.wrapper) {
785
+ toToggle = toToggle.add(toToggle.parent(this.settings.wrapper));
786
+ }
787
+ return toToggle;
788
+ },
789
+
790
+ defaultShowErrors: function () {
791
+ var i, elements, error;
792
+ for (i = 0; this.errorList[ i ]; i++) {
793
+ error = this.errorList[ i ];
794
+ if (this.settings.highlight) {
795
+ this.settings.highlight.call(this, error.element, this.settings.errorClass, this.settings.validClass);
796
+ }
797
+ this.showLabel(error.element, error.message);
798
+ }
799
+ if (this.errorList.length) {
800
+ this.toShow = this.toShow.add(this.containers);
801
+ }
802
+ if (this.settings.success) {
803
+ for (i = 0; this.successList[ i ]; i++) {
804
+ this.showLabel(this.successList[ i ]);
805
+ }
806
+ }
807
+ if (this.settings.unhighlight) {
808
+ for (i = 0, elements = this.validElements(); elements[ i ]; i++) {
809
+ this.settings.unhighlight.call(this, elements[ i ], this.settings.errorClass, this.settings.validClass);
810
+ }
811
+ }
812
+ this.toHide = this.toHide.not(this.toShow);
813
+ this.hideErrors();
814
+ this.addWrapper(this.toShow).show();
815
+ },
816
+
817
+ validElements: function () {
818
+ return this.currentElements.not(this.invalidElements());
819
+ },
820
+
821
+ invalidElements: function () {
822
+ return $(this.errorList).map(function () {
823
+ return this.element;
824
+ });
825
+ },
826
+
827
+ showLabel: function (element, message) {
828
+ var place, group, errorID, v,
829
+ error = this.errorsFor(element),
830
+ elementID = this.idOrName(element),
831
+ describedBy = $(element).attr("aria-describedby");
832
+
833
+ if (error.length) {
834
+
835
+ // Refresh error/success class
836
+ error.removeClass(this.settings.validClass).addClass(this.settings.errorClass);
837
+
838
+ // Replace message on existing label
839
+ error.html(message);
840
+ } else {
841
+
842
+ // Create error element
843
+ error = $("<" + this.settings.errorElement + ">")
844
+ .attr("id", elementID + "-error")
845
+ .addClass(this.settings.errorClass)
846
+ .html(message || "");
847
+
848
+ // Maintain reference to the element to be placed into the DOM
849
+ place = error;
850
+ if (this.settings.wrapper) {
851
+ place = error.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
852
+ }
853
+ if (this.labelContainer.length) {
854
+ this.labelContainer.append(place);
855
+ } else if (this.settings.errorPlacement) {
856
+ this.settings.errorPlacement(place, $(element));
857
+ } else {
858
+ place.insertAfter(element);
859
+ }
860
+
861
+ if (error.is("label")) {
862
+ error.attr("for", elementID);
863
+ } else if (error.parents("label[for='" + this.escapeCssMeta(elementID) + "']").length === 0) {
864
+ errorID = error.attr("id");
865
+ if (!describedBy) {
866
+ describedBy = errorID;
867
+ } else if (!describedBy.match(new RegExp("\\b" + this.escapeCssMeta(errorID) + "\\b"))) {
868
+ describedBy += " " + errorID;
869
+ }
870
+ $(element).attr("aria-describedby", describedBy);
871
+ group = this.groups[ element.name ];
872
+ if (group) {
873
+ v = this;
874
+ $.each(v.groups, function (name, testgroup) {
875
+ if (testgroup === group) {
876
+ $("[name='" + v.escapeCssMeta(name) + "']", v.currentForm)
877
+ .attr("aria-describedby", error.attr("id"));
878
+ }
879
+ });
880
+ }
881
+ }
882
+ }
883
+ if (!message && this.settings.success) {
884
+ error.text("");
885
+ if (typeof this.settings.success === "string") {
886
+ error.addClass(this.settings.success);
887
+ } else {
888
+ this.settings.success(error, element);
889
+ }
890
+ }
891
+ this.toShow = this.toShow.add(error);
892
+ },
893
+
894
+ errorsFor: function (element) {
895
+ var name = this.escapeCssMeta(this.idOrName(element)),
896
+ describer = $(element).attr("aria-describedby"),
897
+ selector = "label[for='" + name + "'], label[for='" + name + "'] *";
898
+ if (describer) {
899
+ selector = selector + ", #" + this.escapeCssMeta(describer)
900
+ .replace(/\s+/g, ", #");
901
+ }
902
+
903
+ return this
904
+ .errors()
905
+ .filter(selector);
906
+ },
907
+ escapeCssMeta: function (string) {
908
+ return string.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g, "\\$1");
909
+ },
910
+
911
+ idOrName: function (element) {
912
+ return this.groups[ element.name ] || (this.checkable(element) ? element.name : element.id || element.name);
913
+ },
914
+
915
+ validationTargetFor: function (element) {
916
+
917
+ if (this.checkable(element)) {
918
+ element = this.findByName(element.name);
919
+ }
920
+ return $(element).not(this.settings.ignore)[ 0 ];
921
+ },
922
+
923
+ checkable: function (element) {
924
+ return (/radio|checkbox/i).test(element.type);
925
+ },
926
+
927
+ findByName: function (name) {
928
+ return $(this.currentForm).find("[name='" + this.escapeCssMeta(name) + "']");
929
+ },
930
+
931
+ getLength: function (value, element) {
932
+ switch (element.nodeName.toLowerCase()) {
933
+ case "select":
934
+ return $("option:selected", element).length;
935
+ case "input":
936
+ if (this.checkable(element)) {
937
+ return this.findByName(element.name).filter(":checked").length;
938
+ }
939
+ }
940
+ return value.length;
941
+ },
942
+
943
+ depend: function (param, element) {
944
+ return this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ](param, element) : true;
945
+ },
946
+
947
+ dependTypes: {
948
+ "boolean": function (param) {
949
+ return param;
950
+ },
951
+ "string": function (param, element) {
952
+ return !!$(param, element.form).length;
953
+ },
954
+ "function": function (param, element) {
955
+ return param(element);
956
+ }
957
+ },
958
+
959
+ optional: function (element) {
960
+ var val = this.elementValue(element);
961
+ return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch";
962
+ },
963
+
964
+ startRequest: function (element) {
965
+ if (!this.pending[ element.name ]) {
966
+ this.pendingRequest++;
967
+ $(element).addClass(this.settings.pendingClass);
968
+ this.pending[ element.name ] = true;
969
+ }
970
+ },
971
+ stopRequest: function (element, valid) {
972
+ this.pendingRequest--;
973
+ if (this.pendingRequest < 0) {
974
+ this.pendingRequest = 0;
975
+ }
976
+ delete this.pending[ element.name ];
977
+ $(element).removeClass(this.settings.pendingClass);
978
+ if (valid && this.pendingRequest === 0 && this.formSubmitted && this.form()) {
979
+ $(this.currentForm).submit();
980
+ this.formSubmitted = false;
981
+ } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {
982
+ $(this.currentForm).triggerHandler("invalid-form", [this]);
983
+ this.formSubmitted = false;
984
+ }
985
+ },
986
+ previousValue: function (element, method) {
987
+ return $.data(element, "previousValue") || $.data(element, "previousValue", {
988
+ old: null,
989
+ valid: true,
990
+ message: this.defaultMessage(element, {method: method})
991
+ });
992
+ },
993
+ destroy: function () {
994
+ this.resetForm();
995
+ $(this.currentForm)
996
+ .off(".validate")
997
+ .removeData("validator")
998
+ .find(".validate-equalTo-blur")
999
+ .off(".validate-equalTo")
1000
+ .removeClass("validate-equalTo-blur");
1001
+ }
1002
  },
1003
  classRuleSettings: {
1004
+ required: {required: true},
1005
+ email: {email: true},
1006
+ url: {url: true},
1007
+ date: {date: true},
1008
+ dateISO: {dateISO: true},
1009
+ number: {number: true},
1010
+ digits: {digits: true},
1011
+ creditcard: {creditcard: true}
1012
  },
1013
 
1014
  addClassRules: function (className, rules) {
1015
+ if (className.constructor === String) {
1016
+ this.classRuleSettings[ className ] = rules;
1017
+ } else {
1018
+ $.extend(this.classRuleSettings, className);
1019
+ }
1020
  },
1021
 
1022
  classRules: function (element) {
1023
+ var rules = {},
1024
+ classes = $(element).attr("class");
1025
+
1026
+ if (classes) {
1027
+ $.each(classes.split(" "), function () {
1028
+ if (this in $.validator.classRuleSettings) {
1029
+ $.extend(rules, $.validator.classRuleSettings[ this ]);
1030
+ }
1031
+ });
1032
+ }
1033
+ return rules;
1034
  },
1035
 
1036
  normalizeAttributeRule: function (rules, type, method, value) {
1037
+ if (/min|max|step/.test(method) && (type === null || /number|range|text/.test(type))) {
1038
+ value = Number(value);
1039
+ if (isNaN(value)) {
1040
+ value = undefined;
1041
+ }
1042
+ }
1043
+
1044
+ if (value || value === 0) {
1045
+ rules[ method ] = value;
1046
+ } else if (type === method && type !== "range") {
1047
+ rules[ method ] = true;
1048
+ }
1049
  },
1050
 
1051
  attributeRules: function (element) {
1052
+ var rules = {},
1053
+ $element = $(element),
1054
+ type = element.getAttribute("type"),
1055
+ method, value;
1056
+
1057
+ for (method in $.validator.methods) {
1058
+ if (method === "required") {
1059
+ value = element.getAttribute(method);
1060
+ if (value === "") {
1061
+ value = true;
1062
+ }
1063
+ value = !!value;
1064
+ } else {
1065
+ value = $element.attr(method);
1066
+ }
1067
+ this.normalizeAttributeRule(rules, type, method, value);
1068
+ }
1069
+ if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
1070
+ delete rules.maxlength;
1071
+ }
1072
+
1073
+ return rules;
1074
  },
1075
 
1076
  dataRules: function (element) {
1077
+ var rules = {},
1078
+ $element = $(element),
1079
+ type = element.getAttribute("type"),
1080
+ method, value;
1081
+
1082
+ for (method in $.validator.methods) {
1083
+ value = $element.data("rule" + method.charAt(0).toUpperCase() + method.substring(1).toLowerCase());
1084
+ this.normalizeAttributeRule(rules, type, method, value);
1085
+ }
1086
+ return rules;
1087
  },
1088
 
1089
  staticRules: function (element) {
1090
+ var rules = {},
1091
+ validator = $.data(element.form, "validator");
1092
 
1093
+ if (validator.settings.rules) {
1094
+ rules = $.validator.normalizeRule(validator.settings.rules[ element.name ]) || {};
1095
+ }
1096
+ return rules;
1097
  },
1098
 
1099
  normalizeRules: function (rules, element) {
1100
+ $.each(rules, function (prop, val) {
1101
+ if (val === false) {
1102
+ delete rules[ prop ];
1103
+ return;
1104
+ }
1105
+ if (val.param || val.depends) {
1106
+ var keepRule = true;
1107
+ switch (typeof val.depends) {
1108
+ case "string":
1109
+ keepRule = !!$(val.depends, element.form).length;
1110
+ break;
1111
+ case "function":
1112
+ keepRule = val.depends.call(element, element);
1113
+ break;
1114
+ }
1115
+ if (keepRule) {
1116
+ rules[ prop ] = val.param !== undefined ? val.param : true;
1117
+ } else {
1118
+ $.data(element.form, "validator").resetElements($(element));
1119
+ delete rules[ prop ];
1120
+ }
1121
+ }
1122
+ });
1123
+ $.each(rules, function (rule, parameter) {
1124
+ rules[ rule ] = $.isFunction(parameter) && rule !== "normalizer" ? parameter(element) : parameter;
1125
+ });
1126
+ $.each(["minlength", "maxlength"], function () {
1127
+ if (rules[ this ]) {
1128
+ rules[ this ] = Number(rules[ this ]);
1129
+ }
1130
+ });
1131
+ $.each(["rangelength", "range"], function () {
1132
+ var parts;
1133
+ if (rules[ this ]) {
1134
+ if ($.isArray(rules[ this ])) {
1135
+ rules[ this ] = [Number(rules[ this ][ 0 ]), Number(rules[ this ][ 1 ])];
1136
+ } else if (typeof rules[ this ] === "string") {
1137
+ parts = rules[ this ].replace(/[\[\]]/g, "").split(/[\s,]+/);
1138
+ rules[ this ] = [Number(parts[ 0 ]), Number(parts[ 1 ])];
1139
+ }
1140
+ }
1141
+ });
1142
+ if ($.validator.autoCreateRanges) {
1143
+ if (rules.min != null && rules.max != null) {
1144
+ rules.range = [rules.min, rules.max];
1145
+ delete rules.min;
1146
+ delete rules.max;
1147
+ }
1148
+ if (rules.minlength != null && rules.maxlength != null) {
1149
+ rules.rangelength = [rules.minlength, rules.maxlength];
1150
+ delete rules.minlength;
1151
+ delete rules.maxlength;
1152
+ }
1153
+ }
1154
+ return rules;
1155
  },
1156
  normalizeRule: function (data) {
1157
+ if (typeof data === "string") {
1158
+ var transformed = {};
1159
+ $.each(data.split(/\s/), function () {
1160
+ transformed[ this ] = true;
1161
+ });
1162
+ data = transformed;
1163
+ }
1164
+ return data;
1165
  },
1166
  addMethod: function (name, method, message) {
1167
+ $.validator.methods[ name ] = method;
1168
+ $.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];
1169
+ if (method.length < 3) {
1170
+ $.validator.addClassRules(name, $.validator.normalizeRule(name));
1171
+ }
1172
  },
1173
  methods: {
1174
+ required: function (value, element, param) {
1175
+ if (!this.depend(param, element)) {
1176
+ return "dependency-mismatch";
1177
+ }
1178
+ if (element.nodeName.toLowerCase() === "select") {
1179
+ var val = $(element).val();
1180
+ return val && val.length > 0;
1181
+ }
1182
+ if (this.checkable(element)) {
1183
+ return this.getLength(value, element) > 0;
1184
+ }
1185
+ return value.length > 0;
1186
+ },
1187
+ email: function (value, element) {
1188
+ return this.optional(element) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(value);
1189
+ },
1190
+ url: function (value, element) {
1191
+ return this.optional(element) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(value);
1192
+ },
1193
+ date: function (value, element) {
1194
+ return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());
1195
+ },
1196
+ dateISO: function (value, element) {
1197
+ return this.optional(element) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value);
1198
+ },
1199
+ number: function (value, element) {
1200
+ return this.optional(element) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
1201
+ },
1202
+ digits: function (value, element) {
1203
+ return this.optional(element) || /^\d+$/.test(value);
1204
+ },
1205
+ minlength: function (value, element, param) {
1206
+ var length = $.isArray(value) ? value.length : this.getLength(value, element);
1207
+ return this.optional(element) || length >= param;
1208
+ },
1209
+ maxlength: function (value, element, param) {
1210
+ var length = $.isArray(value) ? value.length : this.getLength(value, element);
1211
+ return this.optional(element) || length <= param;
1212
+ },
1213
+ rangelength: function (value, element, param) {
1214
+ var length = $.isArray(value) ? value.length : this.getLength(value, element);
1215
+ return this.optional(element) || (length >= param[ 0 ] && length <= param[ 1 ]);
1216
+ },
1217
+ min: function (value, element, param) {
1218
+ return this.optional(element) || value >= param;
1219
+ },
1220
+ max: function (value, element, param) {
1221
+ return this.optional(element) || value <= param;
1222
+ },
1223
+ range: function (value, element, param) {
1224
+ return this.optional(element) || (value >= param[ 0 ] && value <= param[ 1 ]);
1225
+ },
1226
+ step: function (value, element, param) {
1227
+ var type = $(element).attr("type"),
1228
+ errorMessage = "Step attribute on input type " + type + " is not supported.",
1229
+ supportedTypes = ["text", "number", "range"],
1230
+ re = new RegExp("\\b" + type + "\\b"),
1231
+ notSupported = type && !re.test(supportedTypes.join());
1232
+ if (notSupported) {
1233
+ throw new Error(errorMessage);
1234
+ }
1235
+ return this.optional(element) || (value % param === 0);
1236
+ },
1237
+ equalTo: function (value, element, param) {
1238
+ var target = $(param);
1239
+ if (this.settings.onfocusout && target.not(".validate-equalTo-blur").length) {
1240
+ target.addClass("validate-equalTo-blur").on("blur.validate-equalTo", function () {
1241
+ $(element).valid();
1242
+ });
1243
+ }
1244
+ return value === target.val();
1245
+ },
1246
+ remote: function (value, element, param, method) {
1247
+ if (this.optional(element)) {
1248
+ return "dependency-mismatch";
1249
+ }
1250
+
1251
+ method = typeof method === "string" && method || "remote";
1252
+
1253
+ var previous = this.previousValue(element, method),
1254
+ validator, data, optionDataString;
1255
+
1256
+ if (!this.settings.messages[ element.name ]) {
1257
+ this.settings.messages[ element.name ] = {};
1258
+ }
1259
+ previous.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];
1260
+ this.settings.messages[ element.name ][ method ] = previous.message;
1261
+
1262
+ param = typeof param === "string" && {url: param} || param;
1263
+ optionDataString = $.param($.extend({data: value}, param.data));
1264
+ if (previous.old === optionDataString) {
1265
+ return previous.valid;
1266
+ }
1267
+
1268
+ previous.old = optionDataString;
1269
+ validator = this;
1270
+ this.startRequest(element);
1271
+ data = {};
1272
+ data[ element.name ] = value;
1273
+ $.ajax($.extend(true, {
1274
+ mode: "abort",
1275
+ port: "validate" + element.name,
1276
+ dataType: "json",
1277
+ data: data,
1278
+ context: validator.currentForm,
1279
+ success: function (response) {
1280
+ var valid = response === true || response === "true",
1281
+ errors, message, submitted;
1282
+
1283
+ validator.settings.messages[ element.name ][ method ] = previous.originalMessage;
1284
+ if (valid) {
1285
+ submitted = validator.formSubmitted;
1286
+ validator.resetInternals();
1287
+ validator.toHide = validator.errorsFor(element);
1288
+ validator.formSubmitted = submitted;
1289
+ validator.successList.push(element);
1290
+ validator.invalid[ element.name ] = false;
1291
+ validator.showErrors();
1292
+ } else {
1293
+ errors = {};
1294
+ message = response || validator.defaultMessage(element, {method: method, parameters: value});
1295
+ errors[ element.name ] = previous.message = message;
1296
+ validator.invalid[ element.name ] = true;
1297
+ validator.showErrors(errors);
1298
+ }
1299
+ previous.valid = valid;
1300
+ validator.stopRequest(element, valid);
1301
+ }
1302
+ }, param));
1303
+ return "pending";
1304
+ }
1305
  }
1306
  });
1307
  var pendingRequests = {},
1308
+ ajax;
1309
  if ($.ajaxPrefilter) {
1310
  $.ajaxPrefilter(function (settings, _, xhr) {
1311
+ var port = settings.port;
1312
+ if (settings.mode === "abort") {
1313
+ if (pendingRequests[ port ]) {
1314
+ pendingRequests[ port ].abort();
1315
+ }
1316
+ pendingRequests[ port ] = xhr;
1317
+ }
1318
  });
1319
  } else {
1320
  ajax = $.ajax;
1321
  $.ajax = function (settings) {
1322
+ var mode = ("mode" in settings ? settings : $.ajaxSettings).mode,
1323
+ port = ("port" in settings ? settings : $.ajaxSettings).port;
1324
+ if (mode === "abort") {
1325
+ if (pendingRequests[ port ]) {
1326
+ pendingRequests[ port ].abort();
1327
+ }
1328
+ pendingRequests[ port ] = ajax.apply(this, arguments);
1329
+ return pendingRequests[ port ];
1330
+ }
1331
+ return ajax.apply(this, arguments);
1332
  };
1333
  }
1334
  }));
includes/authentication-manager-mail-bank.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
@@ -17,46 +16,38 @@ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-register-transport.php"
17
  }
18
 
19
  if (!class_exists("authentication_manager_mail_bank")) {
20
-
21
  class authentication_manager_mail_bank {
22
-
23
  public function create_authentication_manager() {
24
- $obj_mail_bank_register_transport = new mail_bank_register_transport();
25
- $transport = $obj_mail_bank_register_transport->retrieve_mailertype_mail_bank();
26
- return $this->create_manager($transport);
27
  }
28
-
29
  public function create_manager(mail_bank_smtp_transport $transport) {
30
- $obj_mb_config_provider = new mail_bank_configuration_provider();
31
- $configuration_settings = $obj_mb_config_provider->get_configuration_settings();
32
- $authorization_token = mail_bank_manage_token::get_instance();
33
- $hostname = $configuration_settings["hostname"];
34
- $client_id = $configuration_settings["client_id"];
35
- $client_secret = $configuration_settings["client_secret"];
36
- $sender_email = $configuration_settings["sender_email"];
37
- $redirect_uri = admin_url("admin-ajax.php");
38
- if ($this->check_google_service_provider_mail_bank($hostname)) {
39
- $obj_service_provider = new google_authentication_mail_bank($client_id, $client_secret, $authorization_token, $redirect_uri, $sender_email);
40
- } elseif ($this->check_microsoft_service_provider_mail_bank($hostname)) {
41
- $obj_service_provider = new microsoft_authentication_mail_bank($client_id, $client_secret, $authorization_token, $redirect_uri);
42
- } elseif ($this->check_yahoo_service_provider_mail_bank($hostname)) {
43
- $obj_service_provider = new yahoo_authentication_mail_bank($client_id, $client_secret, $authorization_token, $redirect_uri);
44
- }
45
- return $obj_service_provider;
46
  }
47
-
48
  public function check_google_service_provider_mail_bank($hostname) {
49
- return mail_bank_zend_mail_helper::email_domains_mail_bank($hostname, "gmail.com") || mail_bank_zend_mail_helper::email_domains_mail_bank($hostname, "googleapis.com");
50
  }
51
-
52
  public function check_microsoft_service_provider_mail_bank($hostname) {
53
- return mail_bank_zend_mail_helper::email_domains_mail_bank($hostname, "live.com");
54
  }
55
-
56
  public function check_yahoo_service_provider_mail_bank($hostname) {
57
- return strpos($hostname, "yahoo");
58
  }
59
-
60
  }
61
-
62
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
16
  }
17
 
18
  if (!class_exists("authentication_manager_mail_bank")) {
 
19
  class authentication_manager_mail_bank {
 
20
  public function create_authentication_manager() {
21
+ $obj_mail_bank_register_transport = new mail_bank_register_transport();
22
+ $transport = $obj_mail_bank_register_transport->retrieve_mailertype_mail_bank();
23
+ return $this->create_manager($transport);
24
  }
 
25
  public function create_manager(mail_bank_smtp_transport $transport) {
26
+ $obj_mb_config_provider = new mail_bank_configuration_provider();
27
+ $configuration_settings = $obj_mb_config_provider->get_configuration_settings();
28
+ $authorization_token = mail_bank_manage_token::get_instance();
29
+ $hostname = $configuration_settings["hostname"];
30
+ $client_id = $configuration_settings["client_id"];
31
+ $client_secret = $configuration_settings["client_secret"];
32
+ $sender_email = $configuration_settings["sender_email"];
33
+ $redirect_uri = admin_url("admin-ajax.php");
34
+ if ($this->check_google_service_provider_mail_bank($hostname)) {
35
+ $obj_service_provider = new google_authentication_mail_bank($client_id, $client_secret, $authorization_token, $redirect_uri, $sender_email);
36
+ } elseif ($this->check_microsoft_service_provider_mail_bank($hostname)) {
37
+ $obj_service_provider = new microsoft_authentication_mail_bank($client_id, $client_secret, $authorization_token, $redirect_uri);
38
+ } elseif ($this->check_yahoo_service_provider_mail_bank($hostname)) {
39
+ $obj_service_provider = new yahoo_authentication_mail_bank($client_id, $client_secret, $authorization_token, $redirect_uri);
40
+ }
41
+ return $obj_service_provider;
42
  }
 
43
  public function check_google_service_provider_mail_bank($hostname) {
44
+ return mail_bank_zend_mail_helper::email_domains_mail_bank($hostname, "gmail.com") || mail_bank_zend_mail_helper::email_domains_mail_bank($hostname, "googleapis.com");
45
  }
 
46
  public function check_microsoft_service_provider_mail_bank($hostname) {
47
+ return mail_bank_zend_mail_helper::email_domains_mail_bank($hostname, "live.com");
48
  }
 
49
  public function check_yahoo_service_provider_mail_bank($hostname) {
50
+ return strpos($hostname, "yahoo");
51
  }
 
52
  }
 
53
  }
includes/footer.php CHANGED
@@ -15,8 +15,8 @@ if (!is_user_logged_in()) {
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
- $access_granted = true;
19
- break;
20
  }
21
  }
22
  if (!$access_granted) {
@@ -29,65 +29,65 @@ if (!is_user_logged_in()) {
29
  <div class="popup" data-popup="ux_open_popup_translator">
30
  <div class="popup-inner">
31
  <div class="portlet box vivid-green" style="margin-bottom:0px;">
32
- <div class="portlet-title">
33
- <div class="caption" id="ux_div_action">
34
- <?php echo $mb_translation_request; ?>
35
- </div>
36
- </div>
37
- <div class="portlet-body form">
38
- <div id="ux_div_popup_header">
39
- <form id="ux_frm_language_translator">
40
- <div class="form-body">
41
- <div class="row">
42
- <div class="col-md-6 popup-control">
43
- <div class="form-group">
44
- <label class="control-label">
45
- <?php echo $mb_feature_requests_your_name; ?> :
46
- <i class="icon-custom-question tooltips" data-original-title="<?php echo $mb_popup_your_name_tooltip; ?>" data-placement="right"></i>
47
- <span class="required" aria-required="true">*</span>
48
- </label>
49
- <input type="text" class="form-control" name="ux_txt_your_name" id="ux_txt_your_name" value="" placeholder="<?php echo $mb_feature_requests_your_name_placeholder; ?>">
50
- </div>
51
- </div>
52
- <div class="col-md-6 popup-control">
53
- <div class="form-group">
54
- <label class="control-label">
55
- <?php echo $mb_feature_requests_your_email; ?> :
56
- <i class="icon-custom-question tooltips" data-original-title="<?php echo $mb_popup_your_email_tooltip; ?>" data-placement="right"></i>
57
- <span class="required" aria-required="true">*</span>
58
- </label>
59
- <input type="text" class="form-control" name="ux_txt_email_address" id="ux_txt_email_address" value="" placeholder="<?php echo $mb_feature_requests_your_email_placeholder; ?>">
60
- </div>
61
- </div>
62
- </div>
63
- <div class="form-group">
64
- <label class="control-label">
65
- <?php echo $mb_language_interested_to_translate; ?> :
66
- <i class="icon-custom-question tooltips" data-original-title="<?php echo $mb_language_interested_to_translate_tooltip; ?>" data-placement="right"></i>
67
- <span class="required" aria-required="true">*</span>
68
- </label>
69
- <input type="text" class="form-control" name="ux_txt_language" id="ux_txt_language" value="" placeholder="<?php echo $mb_language_interested_to_translate_placeholder; ?>">
70
- </div>
71
- <div class="form-group">
72
- <label class="control-label">
73
- <?php echo $mb_popup_query; ?> :
74
- <i class="icon-custom-question tooltips" data-original-title="<?php echo $mb_popup_query_tooltip; ?>" data-placement="right"></i>
75
- <span class="required" aria-required="true">*</span>
76
- </label>
77
- <textarea class="form-control" name="ux_txtarea_query" id="ux_txtarea_query" rows="7" placeholder="<?php echo $mb_popup_query_placeholder; ?>"><?php echo "Hi,\r\r\nI am interested in translating your plugin Mail Bank in my native language.\r\r\nPlease get back to me!\r\r\nThanks"; ?></textarea>
78
- </div>
79
- </div>
80
- <div class="modal-footer">
81
- <div class="form-actions">
82
- <div class="pull-right">
83
- <input type="button" data-popup-close-translator="ux_open_popup_translator" class="btn vivid-green" name="ux_btn_close" id="ux_btn_close" value="<?php echo $mb_manage_backups_close; ?>">
84
- <input type="submit" class="btn vivid-green" name="ux_btn_send_request" id="ux_btn_send_request" value="<?php echo $mb_feature_requests_send_request; ?>">
85
- </div>
86
- </div>
87
- </div>
88
- </form>
89
- </div>
90
- </div>
91
  </div>
92
  </div>
93
  </div>
@@ -97,7 +97,7 @@ if (!is_user_logged_in()) {
97
  {
98
  if (jQuery(this).parent("ul.page-sidebar-menu-tech-banker").size() === 1)
99
  {
100
- jQuery(this).find("> a").append("<span class=\"selected\"></span>");
101
  }
102
  });
103
 
@@ -107,10 +107,10 @@ if (!is_user_logged_in()) {
107
  var content_height = jQuery(".page-content").height() + 30;
108
  if (parseInt(menus_height) > parseInt(content_height))
109
  {
110
- jQuery(".page-content").attr("style", "min-height:" + menus_height + "px")
111
  } else
112
  {
113
- jQuery(".page-sidebar-menu-tech-banker").attr("style", "min-height:" + content_height + "px")
114
  }
115
  }
116
 
@@ -126,27 +126,27 @@ if (!is_user_logged_in()) {
126
  var sidebar_close = parent.children("li.open").removeClass("open");
127
  if (sidebar_close)
128
  {
129
- setInterval(load_sidebar_content_mail_bank, 100);
130
  }
131
  if (sub.is(":visible"))
132
  {
133
- jQuery(this).parent().removeClass("open");
134
- sub.slideUp(slideSpeed);
135
  } else if (hasSubMenu)
136
  {
137
- jQuery(this).parent().addClass("open");
138
- sub.slideDown(slideSpeed);
139
  }
140
  });
141
  function paste_only_digits_mail_bank(control_id)
142
  {
143
  jQuery("#" + control_id).on("paste keypress", function (e)
144
  {
145
- var $this = jQuery("#" + control_id);
146
- setTimeout(function ()
147
- {
148
- $this.val($this.val().replace(/[^0-9]/g, ""));
149
- }, 5);
150
  });
151
  }
152
 
@@ -171,14 +171,14 @@ if (!is_user_logged_in()) {
171
  jQuery("body").append(overlay);
172
  if (control_id !== undefined)
173
  {
174
- var message = control_id;
175
- var success = <?php echo json_encode($mb_success); ?>;
176
- var issuccessmessage = jQuery("#toast-container").exists();
177
- if (issuccessmessage !== true)
178
- {
179
- var shortCutFunction = jQuery("#manage_messages input:checked").val();
180
- toastr[shortCutFunction](message, success);
181
- }
182
  }
183
  }
184
 
@@ -192,24 +192,24 @@ if (!is_user_logged_in()) {
192
  {
193
  var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
194
  var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
195
- ac = 0,
196
- enc = '',
197
- tmp_arr = [];
198
  if (!data)
199
  {
200
- return data;
201
  }
202
  do
203
  {
204
- o1 = data.charCodeAt(i++);
205
- o2 = data.charCodeAt(i++);
206
- o3 = data.charCodeAt(i++);
207
- bits = o1 << 16 | o2 << 8 | o3;
208
- h1 = bits >> 18 & 0x3f;
209
- h2 = bits >> 12 & 0x3f;
210
- h3 = bits >> 6 & 0x3f;
211
- h4 = bits & 0x3f;
212
- tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
213
  } while (i < data.length);
214
  enc = tmp_arr.join('');
215
  var r = data.length % 3;
@@ -230,107 +230,107 @@ if (!is_user_logged_in()) {
230
  var hostname = smtp_host.substr(indexof, 5);
231
  if (smtp_host === "smtp.gmail.com")
232
  {
233
- jQuery("#ux_link_content").text("(" +<?php echo json_encode($mb_email_configuration_get_google_credentials); ?> + ")");
234
- jQuery("#ux_link_reference").attr("href", "https://console.developers.google.com");
235
  } else if (smtp_host === "smtp.live.com")
236
  {
237
- jQuery("#ux_link_content").text("(" +<?php echo json_encode($mb_email_configuration_get_microsoft_credentials); ?> + ")");
238
- jQuery("#ux_link_reference").attr("href", "https://account.live.com/developers/applications/create");
239
  } else if (hostname === "yahoo")
240
  {
241
- jQuery("#ux_link_content").text("(" +<?php echo json_encode($mb_email_configuration_get_yahoo_credentials); ?> + ")");
242
- jQuery("#ux_link_reference").attr("href", "https://developer.yahoo.com/apps/");
243
  } else
244
  {
245
- jQuery("#ux_link_content").text("");
246
  }
247
  }
248
 
249
  function mail_bank_mail_sender(to_email_address)
250
  {
251
  jQuery.post(ajaxurl,
252
- {
253
- data: base64_encode_mail_bank(jQuery("#ux_frm_test_email_configuration").serialize()),
254
- param: "mail_bank_test_email_configuration_module",
255
- action: "mail_bank_action",
256
- _wp_nonce: "<?php echo isset($mail_bank_test_email_configuration) ? $mail_bank_test_email_configuration : ""; ?>"
257
- },
258
- function (data)
259
- {
260
- jQuery("#ux_txtarea_result_log").html("<?php echo $mb_email_configuration_send_test_email_textarea; ?>\n");
261
- jQuery("#ux_txtarea_result_log").append(<?php echo json_encode($mb_test_email_sending_test_email); ?> + "&nbsp;" + to_email_address + "\n");
262
- if (jQuery.trim(data) === "true" || jQuery.trim(data) === "1")
263
- {
264
- jQuery("#ux_div_mail_console").css("display", "block");
265
- jQuery("#console_log_div").css("display", "none");
266
- jQuery("#ux_txtarea_result_log").append(<?php echo json_encode($mb_test_email_sent); ?>);
267
- } else
268
- {
269
- jQuery("#console_log_div").css("display", "none");
270
- jQuery("#ux_div_mail_console").css("display", "block");
271
- if (jQuery.trim(data) !== "")
272
- {
273
- jQuery("#ux_txtarea_result_log").html(data);
274
- } else
275
- {
276
- jQuery("#ux_txtarea_result_log").append(<?php echo json_encode($mb_test_email_not_send); ?>);
277
- }
278
- }
279
- load_sidebar_content_mail_bank();
280
- });
281
  }
282
 
283
  function mail_bank_send_test_mail()
284
  {
285
  jQuery("#ux_frm_test_email_configuration").validate
286
- ({
287
- rules:
288
- {
289
- ux_txt_email:
290
- {
291
- required: true,
292
- email: true
293
- },
294
- ux_txt_subject:
295
- {
296
- required: true
297
- },
298
- ux_content:
299
- {
300
- required: true
301
- }
302
- },
303
- errorPlacement: function ()
304
- {
305
- },
306
- highlight: function (element)
307
- {
308
- jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
309
- },
310
- success: function (label, element)
311
- {
312
- var icon = jQuery(element).parent(".input-icon").children("i");
313
- jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
314
- icon.removeClass("fa-warning").addClass("fa-check");
315
- },
316
- submitHandler: function ()
317
- {
318
- var to_email_address = jQuery("#ux_txt_email").val();
319
- if (window.CKEDITOR)
320
- {
321
- jQuery("#ux_email_configuration_text_area").val(CKEDITOR.instances["ux_content"].getData());
322
- } else if (jQuery("#wp-ux_content-wrap").hasClass("tmce-active"))
323
- {
324
- jQuery("#ux_email_configuration_text_area").val(tinyMCE.get("ux_content").getContent());
325
- } else
326
- {
327
- jQuery("#ux_email_configuration_text_area").val(jQuery("#ux_content").val());
328
- }
329
- mail_bank_mail_sender(to_email_address);
330
- jQuery("#console_log_div").css("display", "block");
331
- jQuery("#ux_div_test_mail").css("display", "none");
332
- }
333
- });
334
  }
335
 
336
  // Close popup
@@ -339,8 +339,8 @@ if (!is_user_logged_in()) {
339
  var confirm_close = confirm(<?php echo json_encode($mb_confirm_close); ?>);
340
  if (confirm_close === true)
341
  {
342
- var targeted_popup_class = jQuery(this).attr("data-popup-close-translator");
343
- jQuery('[data-popup="' + targeted_popup_class + '"]').fadeOut(350);
344
  }
345
  e.preventDefault();
346
  });
@@ -348,25 +348,25 @@ if (!is_user_logged_in()) {
348
  {
349
  jQuery("[data-popup-open]").on("click", function (e)
350
  {
351
- var targeted_popup_class = jQuery(this).attr("data-popup-open");
352
- jQuery('[data-popup="' + targeted_popup_class + '"]').fadeIn(350);
353
- e.preventDefault();
354
  });
355
  // Close popup
356
  jQuery("[data-popup-close]").on("click", function (e)
357
  {
358
- var targeted_popup_class = jQuery(this).attr("data-popup-close");
359
- jQuery('[data-popup="' + targeted_popup_class + '"]').fadeOut(350);
360
- e.preventDefault();
361
  });
362
  jQuery(document).keydown(function (e)
363
  {
364
- // ESCAPE key pressed
365
- if (e.keyCode === 27)
366
- {
367
- var targeted_popup_class = jQuery("[data-popup-close]").attr("data-popup-close");
368
- jQuery('[data-popup="' + targeted_popup_class + '"]').fadeOut(350);
369
- }
370
  });
371
  }
372
 
@@ -374,63 +374,63 @@ if (!is_user_logged_in()) {
374
  var url = "<?php echo tech_banker_url . "/feedbacks.php"; ?>";
375
  var domain_url = "<?php echo site_url(); ?>";
376
  jQuery("#ux_frm_language_translator").validate
377
- ({
378
- rules:
379
- {
380
- ux_txt_your_name:
381
- {
382
- required: true
383
- },
384
- ux_txt_email_address:
385
- {
386
- required: true,
387
- email: true
388
- },
389
- ux_txt_language:
390
- {
391
- required: true
392
- },
393
- ux_txtarea_query:
394
- {
395
- required: true
396
- }
397
- },
398
- errorPlacement: function ()
399
- {
400
- },
401
- highlight: function (element)
402
- {
403
- jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
404
- },
405
- success: function (label, element)
406
- {
407
- var icon = jQuery(element).parent(".input-icon").children("i");
408
- jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
409
- icon.removeClass("fa-warning").addClass("fa-check");
410
- },
411
- submitHandler: function ()
412
- {
413
- translation_request_array.push(jQuery("#ux_txt_your_name").val());
414
- translation_request_array.push(jQuery("#ux_txt_email_address").val());
415
- translation_request_array.push(domain_url);
416
- translation_request_array.push(jQuery("#ux_txt_language").val());
417
- translation_request_array.push(jQuery("#ux_txtarea_query").val());
418
- jQuery.post(url,
419
- {
420
- data: JSON.stringify(translation_request_array),
421
- param: "mail_bank_translation_request"
422
- },
423
- function ()
424
- {
425
- overlay_loading_mail_bank(<?php echo json_encode($mb_feature_request_message) ?>);
426
- setTimeout(function ()
427
- {
428
- remove_overlay_mail_bank();
429
- window.location.href = "admin.php?page=mb_email_configuration";
430
- }, 3000);
431
- });
432
- }
433
- });
434
  function show_pop_up_mail_bank()
435
  {
436
  open_popup_mail_bank();
@@ -451,827 +451,827 @@ if (!is_user_logged_in()) {
451
  $check_wp_mail_bank_wizard = get_option("wp-mail-bank-wizard-set-up");
452
  $page_url = $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : esc_attr($_GET["page"]);
453
  if (isset($_GET["page"])) {
454
- switch ($page_url) {
455
- case "wp_mail_bank_wizard":
456
- ?>
457
- function show_hide_details_wp_mail_bank()
458
- {
459
- if (jQuery("#ux_div_wizard_set_up").hasClass("wizard-set-up"))
460
- {
461
- jQuery("#ux_div_wizard_set_up").css("display", "none");
462
- jQuery("#ux_div_wizard_set_up").removeClass("wizard-set-up");
463
- } else
464
- {
465
- jQuery("#ux_div_wizard_set_up").css("display", "block");
466
- jQuery("#ux_div_wizard_set_up").addClass("wizard-set-up");
467
- }
468
- }
469
 
470
- function plugin_stats_wp_mail_bank(type)
471
- {
472
- overlay_loading_mail_bank();
473
- jQuery.post(ajaxurl,
474
- {
475
- type: type,
476
- param: "wizard_wp_mail_bank",
477
- action: "mail_bank_action",
478
- _wp_nonce: "<?php echo $wp_mail_bank_check_status; ?>"
479
- },
480
- function ()
481
- {
482
- remove_overlay_mail_bank();
483
- window.location.href = "admin.php?page=mb_email_configuration";
484
- });
485
- }
486
 
487
- <?php
488
- break;
489
- case "mb_email_configuration":
490
- ?>
491
- jQuery("#ux_mb_li_email_configuration").addClass("active");
492
- <?php
493
- if (email_configuration_mail_bank == 1) {
494
- ?>
495
- function select_credentials_mail_bank()
496
- {
497
- var selected_credential = jQuery("#ux_ddl_mb_authentication").val();
498
- var type = jQuery("#ux_ddl_type").val();
499
- if (selected_credential === "oauth2" && type === "smtp")
500
- {
501
- jQuery("#ux_div_username_password_authentication").css("display", "none");
502
- jQuery("#ux_div_oauth_authentication").css("display", "block");
503
- check_links_oauth_mail_bank();
504
- } else
505
- {
506
- if (selected_credential === "none")
507
- {
508
- jQuery("#ux_div_username_password_authentication").css("display", "none");
509
- jQuery("#ux_div_oauth_authentication").css("display", "none");
510
- } else
511
- {
512
- jQuery("#ux_div_username_password_authentication").css("display", "block");
513
- jQuery("#ux_div_oauth_authentication").css("display", "none");
514
- }
515
- }
516
- }
517
 
518
- function mail_bank_second_step_settings()
519
- {
520
- jQuery("#ux_div_first_step").css("display", "none");
521
- jQuery("#test_email").css("display", "none");
522
- jQuery("#ux_div_second_step").css("display", "block");
523
- jQuery("#ux_div_step_progres_bar_width").css("width", "66%");
524
- jQuery("#ux_div_frm_wizard li:eq(1)").addClass("active");
525
- jQuery("#ux_div_frm_wizard li:eq(2)").removeClass("active");
526
- }
527
 
528
- function mail_bank_third_step_settings()
529
- {
530
- jQuery("#ux_div_first_step").removeClass("first-step-helper");
531
- jQuery("#test_email").css("display", "block");
532
- jQuery("#ux_div_first_step").css("display", "none");
533
- jQuery("#ux_div_second_step").css("display", "none");
534
- jQuery("#ux_div_step_progres_bar_width").css("width", "100%");
535
- jQuery("#ux_div_frm_wizard li:eq(1)").addClass("active");
536
- jQuery("#ux_div_frm_wizard li:eq(2)").addClass("active");
537
- }
538
 
539
- function mail_bank_from_name_override()
540
- {
541
- var from_name = jQuery("#ux_ddl_from_name").val();
542
- if (jQuery.trim(from_name) === "dont_override")
543
- {
544
- jQuery("#ux_txt_mb_from_name").attr("disabled", true);
545
- } else
546
- {
547
- jQuery("#ux_txt_mb_from_name").attr("disabled", false);
548
- }
549
- }
550
 
551
- function mail_bank_from_email_override()
552
- {
553
- var from_email = jQuery("#ux_ddl_from_email").val();
554
- if (jQuery.trim(from_email) === "dont_override")
555
- {
556
- jQuery("#ux_txt_mb_from_email_configuration").attr("disabled", true);
557
- } else
558
- {
559
- jQuery("#ux_txt_mb_from_email_configuration").attr("disabled", false);
560
- }
561
- }
562
 
563
- function mail_bank_validate_settings()
564
- {
565
- jQuery("#ux_frm_email_configuration").validate
566
- ({
567
- rules:
568
- {
569
- ux_txt_mb_from_name:
570
- {
571
- required: true
572
- },
573
- ux_txt_mb_from_email_configuration:
574
- {
575
- required: true,
576
- email: true
577
- },
578
- ux_txt_email_address:
579
- {
580
- required: true,
581
- email: true
582
- },
583
- ux_txt_host:
584
- {
585
- required: true
586
- },
587
- ux_txt_port:
588
- {
589
- required: true
590
- },
591
- ux_txt_client_id:
592
- {
593
- required: true
594
- },
595
- ux_txt_client_secret:
596
- {
597
- required: true
598
- },
599
- ux_txt_username:
600
- {
601
- required: true
602
- },
603
- ux_txt_password:
604
- {
605
- required: true
606
- }
607
- },
608
- errorPlacement: function ()
609
- {
610
- },
611
- highlight: function (element)
612
- {
613
- jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
614
- },
615
- success: function (label, element)
616
- {
617
- var icon = jQuery(element).parent(".input-icon").children("i");
618
- jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
619
- icon.removeClass("fa-warning").addClass("fa-check");
620
- },
621
- submitHandler: function ()
622
- {
623
- if (jQuery("#ux_div_first_step").hasClass("first-step-helper"))
624
- {
625
- mail_bank_second_step_settings();
626
- } else if (jQuery("#test_email").hasClass("second-step-helper"))
627
- {
628
- jQuery.post(ajaxurl,
629
- {
630
- data: base64_encode_mail_bank(jQuery("#ux_frm_email_configuration").serialize()),
631
- action: "mail_bank_action",
632
- param: "mail_bank_email_configuration_settings_module",
633
- _wp_nonce: "<?php echo $mail_bank_email_configuration_settings; ?>"
634
- },
635
- function (data)
636
- {
637
- var automatic_mail = jQuery("#ux_chk_automatic_sent_mail").is(":checked");
638
- var mailer_type = jQuery("#ux_ddl_type").val();
639
- if (jQuery.trim(data) === "100" && mailer_type === "smtp")
640
- {
641
- var shortCutFunction = jQuery("#toastTypeGroup_error input:checked").val();
642
- toastr[shortCutFunction](<?php echo json_encode($oauth_not_supported); ?>);
643
- } else if (jQuery.trim(data) !== "" && mailer_type === "smtp")
644
- {
645
- window.location.href = data;
646
- } else
647
- {
648
- var send_mail = false;
649
- if (jQuery.trim(automatic_mail) === "true")
650
- {
651
- var send_mail = true;
652
- }
653
- window.location.href = "admin.php?page=mb_email_configuration&auto_mail=" + send_mail;
654
- }
655
- });
656
- }
657
- }
658
- });
659
- }
660
 
661
- function change_settings_mail_bank()
662
- {
663
- var type = jQuery("#ux_ddl_type").val();
664
- switch (type)
665
- {
666
- case "php_mail_function":
667
- jQuery("#ux_div_smtp_mail_function").css("display", "none");
668
- break;
669
- case "smtp":
670
- jQuery("#ux_div_smtp_mail_function").css("display", "block");
671
- break;
672
- }
673
- select_credentials_mail_bank();
674
- }
675
 
676
- function mail_bank_get_host_port()
677
- {
678
- change_settings_mail_bank();
679
- var smtp_user = jQuery("#ux_txt_email_address").val();
680
- jQuery.post(ajaxurl,
681
- {
682
- smtp_user: smtp_user,
683
- param: "mail_bank_set_hostname_port_module",
684
- action: "mail_bank_action",
685
- _wp_nonce: "<?php echo $mail_bank_set_hostname_port; ?>"
686
- },
687
- function (data)
688
- {
689
- if (jQuery.trim(data) !== "")
690
- {
691
- jQuery("#ux_txt_host").val(data);
692
- check_links_oauth_mail_bank();
693
- } else
694
- {
695
- jQuery("#ux_txt_host").val("");
696
- jQuery("#ux_link_content").text("");
697
- }
698
- change_settings_mail_bank();
699
- });
700
- }
701
 
702
- function change_link_content_mail_bank()
703
- {
704
- var host_type = jQuery("#ux_txt_host").val();
705
- var indexof = host_type.indexOf("yahoo");
706
- var hostname = host_type.substr(indexof, 5);
707
- if (host_type === "smtp.gmail.com")
708
- {
709
- check_links_oauth_mail_bank();
710
- jQuery("#ux_ddl_mb_authentication").val("oauth2");
711
- select_credentials_mail_bank();
712
- } else if (host_type === "smtp.live.com")
713
- {
714
- check_links_oauth_mail_bank();
715
- jQuery("#ux_ddl_mb_authentication").val("oauth2");
716
- select_credentials_mail_bank();
717
- } else if (hostname === "yahoo")
718
- {
719
- check_links_oauth_mail_bank();
720
- jQuery("#ux_ddl_mb_authentication").val("oauth2");
721
- select_credentials_mail_bank();
722
- } else
723
- {
724
- check_links_oauth_mail_bank();
725
- jQuery("#ux_ddl_mb_authentication").val("login");
726
- select_credentials_mail_bank();
727
- }
728
- }
729
 
730
- jQuery(document).ready(function ()
731
- {
732
- if (window.CKEDITOR)
733
- {
734
- CKEDITOR.replace("ux_content");
735
- }
736
- jQuery("#ux_ddl_type").val("<?php echo isset($email_configuration_array["mailer_type"]) ? esc_attr($email_configuration_array["mailer_type"]) : ""; ?>");
737
- jQuery("#ux_ddl_mb_authentication").val("<?php echo isset($email_configuration_array["auth_type"]) ? esc_attr($email_configuration_array["auth_type"]) : "login"; ?>");
738
- jQuery("#ux_ddl_from_name").val("<?php echo isset($email_configuration_array["sender_name_configuration"]) ? esc_html($email_configuration_array["sender_name_configuration"]) : ""; ?>");
739
- jQuery("#ux_ddl_from_email").val("<?php echo isset($email_configuration_array["from_email_configuration"]) ? esc_attr($email_configuration_array["from_email_configuration"]) : ""; ?>");
740
- jQuery("#ux_ddl_encryption").val("<?php echo isset($email_configuration_array["enc_type"]) ? esc_attr($email_configuration_array["enc_type"]) : "" ?>");
741
- <?php
742
- if (isset($test_secret_key_error)) {
743
- ?>
744
- var shortCutFunction = jQuery("#toastTypeGroup_error input:checked").val();
745
- toastr[shortCutFunction](<?php echo json_encode($test_secret_key_error); ?>);
746
- mail_bank_second_step_settings();
747
- <?php
748
- }
749
- if (isset($automatically_send_mail)) {
750
- ?>
751
- window.location.href = "admin.php?page=mb_email_configuration&auto_mail=true";
752
- <?php
753
- } elseif (isset($automatically_not_send_mail)) {
754
- ?>
755
- window.location.href = "admin.php?page=mb_email_configuration&auto_mail=false";
756
- <?php
757
- }
758
- ?>
759
- load_sidebar_content_mail_bank();
760
- //change_link_content_mail_bank();
761
- select_credentials_mail_bank();
762
- change_settings_mail_bank();
763
- mail_bank_from_name_override();
764
- mail_bank_from_email_override();
765
- <?php
766
- if (isset($_REQUEST["auto_mail"]) && esc_attr($_REQUEST["auto_mail"]) == "true") {
767
- ?>
768
- mail_bank_mail_sender("<?php echo get_option('admin_email'); ?>");
769
- jQuery("#console_log_div").css("display", "block");
770
- jQuery("#ux_div_mail_console").css("display", "none");
771
- jQuery("#ux_div_test_mail").css("display", "none");
772
- mail_bank_third_step_settings();
773
- <?php
774
- } elseif (isset($_REQUEST["auto_mail"]) && esc_attr($_REQUEST["auto_mail"]) == "false") {
775
- ?>
776
- jQuery("#ux_div_mail_console").css("display", "none");
777
- jQuery("#ux_div_test_mail").css("display", "block");
778
- mail_bank_third_step_settings();
779
- <?php
780
- }
781
- if ($email_configuration_array["hostname"] != "") {
782
- ?>
783
- jQuery("#ux_txt_host").val("<?php echo isset($email_configuration_array["hostname"]) ? esc_attr($email_configuration_array["hostname"]) : ""; ?>");
784
- <?php
785
- } else {
786
- ?>
787
- mail_bank_get_host_port();
788
- <?php
789
- }
790
- ?>
791
- });
792
- function mail_bank_move_to_second_step()
793
- {
794
- jQuery("#ux_div_first_step").addClass("first-step-helper");
795
- mail_bank_validate_settings();
796
- }
797
 
798
- function mail_bank_move_to_first_step()
799
- {
800
- jQuery("#ux_div_first_step").removeClass("first-step-helper");
801
- jQuery("#test_email").removeClass("second-step-helper");
802
- jQuery("#ux_div_first_step").css("display", "block");
803
- jQuery("#test_email").css("display", "none");
804
- jQuery("#ux_div_second_step").css("display", "none");
805
- jQuery("#ux_div_step_progres_bar_width").css("width", "33%");
806
- jQuery("#ux_div_frm_wizard li:eq(1)").removeClass("active");
807
- }
808
 
809
- function mail_bank_save_changes()
810
- {
811
- overlay_loading_mail_bank(<?php echo json_encode($mb_update_email_configuration); ?>);
812
- setTimeout(function ()
813
- {
814
- remove_overlay_mail_bank();
815
- window.location.href = "admin.php?page=mb_email_configuration";
816
- }, 3000);
817
- }
818
 
819
- function mail_bank_move_to_third_step()
820
- {
821
- mail_bank_validate_settings();
822
- jQuery("#ux_div_first_step").removeClass("first-step-helper");
823
- jQuery("#test_email").addClass("second-step-helper");
824
- }
825
 
826
- function mail_bank_select_port()
827
- {
828
- var encryption = jQuery("#ux_ddl_encryption").val();
829
- switch (encryption)
830
- {
831
- case "none":
832
- case "tls":
833
- jQuery("#ux_txt_port").val(587);
834
- break;
835
- case "ssl":
836
- jQuery("#ux_txt_port").val(465);
837
- break;
838
- }
839
- }
840
 
841
- var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
842
- setTimeout(function ()
843
- {
844
- clearInterval(sidebar_load_interval);
845
- }, 5000);
846
- load_sidebar_content_mail_bank();
847
- <?php
848
- }
849
- break;
850
- case "mb_test_email":
851
- ?>
852
- jQuery("#ux_mb_li_test_email").addClass("active");
853
- jQuery(document).ready(function ()
854
- {
855
- if (window.CKEDITOR)
856
- {
857
- CKEDITOR.replace("ux_content");
858
- }
859
- });
860
- <?php
861
- break;
862
- case "mb_connectivity_test":
863
- ?>
864
- jQuery("#ux_mb_li_connectivity_test").addClass("active");
865
- <?php
866
- if (conectivity_test_email_mail_bank == 1) {
867
- ?>
868
- jQuery("#ux_frm_settings").validate
869
- ({
870
- rules:
871
- {
872
- ux_txt_conn_search:
873
- {
874
- required: true
875
- }
876
- },
877
- errorPlacement: function ()
878
- {
879
- },
880
- highlight: function (element)
881
- {
882
- jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
883
- },
884
- success: function (label, element)
885
- {
886
- var icon = jQuery(element).parent(".input-icon").children("i");
887
- jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
888
- icon.removeClass("fa-warning").addClass("fa-check");
889
- },
890
- submitHandler: function ()
891
- {
892
- jQuery("#ux_div_connectivity_test").css("display", "block");
893
- overlay_loading_mail_bank();
894
- jQuery.post(ajaxurl,
895
- {
896
- smtp_host: jQuery("#ux_txt_conn_search").val(),
897
- param: "mail_bank_connectivity_test",
898
- action: "mail_bank_action",
899
- _wp_nonce: "<?php echo $connectivity_test_nonce; ?>"
900
- },
901
- function (data)
902
- {
903
- jQuery("#ux_tbody_smtp").html(data);
904
- setTimeout(function ()
905
- {
906
- remove_overlay_mail_bank();
907
- }, 1000);
908
- });
909
- }
910
- });
911
- var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
912
- setTimeout(function ()
913
- {
914
- clearInterval(sidebar_load_interval);
915
- }, 5000);
916
- <?php
917
- }
918
- break;
919
- case "mb_email_logs":
920
- ?>
921
- jQuery("#ux_mb_li_email_logs").addClass("active");
922
- <?php
923
- if (email_logs_mail_bank == 1) {
924
- ?>
925
- jQuery(document).ready(function ()
926
- {
927
- jQuery("#ux_txt_mb_start_date").datepicker
928
- ({
929
- dateFormat: 'mm/dd/yy',
930
- numberOfMonths: 1,
931
- changeMonth: true,
932
- changeYear: true,
933
- yearRange: "1970:2039",
934
- onSelect: function (selected)
935
- {
936
- jQuery("#ux_txt_mb_end_date").datepicker("option", "minDate", selected)
937
- }
938
- });
939
- jQuery("#ux_txt_mb_end_date").datepicker
940
- ({
941
- dateFormat: 'mm/dd/yy',
942
- numberOfMonths: 1,
943
- changeMonth: true,
944
- changeYear: true,
945
- yearRange: "1970:2039",
946
- onSelect: function (selected)
947
- {
948
- jQuery("#ux_txt_mb_start_date").datepicker("option", "maxDate", selected)
949
- }
950
- });
951
- });
952
- function prevent_datepicker_mail_bank(id)
953
- {
954
- jQuery("#" + id).on("keypress", function (e)
955
- {
956
- e.preventDefault();
957
- });
958
- }
959
 
960
- var oTable = jQuery("#ux_tbl_email_logs").dataTable
961
- ({
962
- "pagingType": "full_numbers",
963
- "language":
964
- {
965
- "emptyTable": "No data available in table",
966
- "info": "Showing _START_ to _END_ of _TOTAL_ entries",
967
- "infoEmpty": "No entries found",
968
- "infoFiltered": "(filtered1 from _MAX_ total entries)",
969
- "lengthMenu": "Show _MENU_ entries",
970
- "search": "Search:",
971
- "zeroRecords": "No matching records found"
972
- },
973
- "bSort": true,
974
- "pageLength": 10,
975
- "aoColumnDefs": [{"bSortable": false, "aTargets": [0]}]
976
- });
977
- var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
978
- setTimeout(function ()
979
- {
980
- clearInterval(sidebar_load_interval);
981
- }, 5000);
982
- jQuery("#ux_chk_all_email_logs").click(function ()
983
- {
984
- jQuery("input[type=checkbox]", oTable.fnGetFilteredNodes()).attr("checked", this.checked);
985
- });
986
- function check_email_logs()
987
- {
988
- if (jQuery("input:checked", oTable.fnGetFilteredNodes()).length === jQuery("input[type=checkbox]", oTable.fnGetFilteredNodes()).length)
989
- {
990
- jQuery("#ux_chk_all_email_logs").attr("checked", "checked");
991
- } else
992
- {
993
- jQuery("#ux_chk_all_email_logs").removeAttr("checked");
994
- }
995
- }
996
 
997
- var ux_frm_email_logs = jQuery("#ux_frm_email_logs").validate
998
- ({
999
- submitHandler: function ()
1000
- {
1001
- premium_edition_notification_mail_bank();
1002
- }
1003
- });
1004
- load_sidebar_content_mail_bank();
1005
- <?php
1006
- }
1007
- break;
1008
- case "mb_settings":
1009
- ?>
1010
- jQuery("#ux_mb_li_settings").addClass("active");
1011
- <?php
1012
- if (settings_mail_bank == 1) {
1013
- ?>
1014
- jQuery(document).ready(function ()
1015
- {
1016
- jQuery("#ux_ddl_debug_mode").val("<?php echo isset($settings_data_array["debug_mode"]) ? esc_attr($settings_data_array["debug_mode"]) : "enable"; ?>");
1017
- jQuery("#ux_ddl_remove_tables").val("<?php echo isset($settings_data_array["remove_tables_at_uninstall"]) ? esc_attr($settings_data_array["remove_tables_at_uninstall"]) : "disable"; ?>");
1018
- jQuery("#ux_ddl_monitor_email_logs").val("<?php echo isset($settings_data_array["monitor_email_logs"]) ? esc_attr($settings_data_array["monitor_email_logs"]) : "enable"; ?>");
1019
- });
1020
- jQuery("#ux_frm_settings").validate
1021
- ({
1022
- submitHandler: function ()
1023
- {
1024
- overlay_loading_mail_bank(<?php echo json_encode($mb_update_settings); ?>);
1025
- jQuery.post(ajaxurl,
1026
- {
1027
- data: base64_encode_mail_bank(jQuery("#ux_frm_settings").serialize()),
1028
- action: "mail_bank_action",
1029
- param: "mail_bank_settings_module",
1030
- _wp_nonce: "<?php echo $mail_bank_settings; ?>"
1031
- },
1032
- function ()
1033
- {
1034
- setTimeout(function ()
1035
- {
1036
- remove_overlay_mail_bank();
1037
- window.location.href = "admin.php?page=mb_settings";
1038
- }, 3000);
1039
- });
1040
- }
1041
- });
1042
- load_sidebar_content_mail_bank();
1043
- <?php
1044
- }
1045
- break;
1046
- case "mb_roles_and_capabilities":
1047
- ?>
1048
- jQuery("#ux_mb_li_roles_and_capabilities").addClass("active");
1049
- var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
1050
- setTimeout(function ()
1051
- {
1052
- clearInterval(sidebar_load_interval);
1053
- }, 5000);
1054
- <?php
1055
- if (roles_and_capabilities_mail_bank == 1) {
1056
- ?>
1057
- function full_control_function_mail_bank(id, div_id)
1058
- {
1059
- var checkbox_id = jQuery(id).prop("checked");
1060
- jQuery("#" + div_id + " input[type=checkbox]").each(function ()
1061
- {
1062
- if (checkbox_id)
1063
- {
1064
- jQuery(this).attr("checked", "checked");
1065
- if (jQuery(id).attr("id") !== jQuery(this).attr("id"))
1066
- {
1067
- jQuery(this).attr("disabled", "disabled");
1068
- }
1069
- } else
1070
- {
1071
- if (jQuery(id).attr("id") !== jQuery(this).attr("id"))
1072
- {
1073
- jQuery(this).removeAttr("disabled");
1074
- jQuery("#ux_chk_other_capabilities_manage_options").attr("disabled", "disabled");
1075
- jQuery("#ux_chk_other_capabilities_read").attr("checked", "checked").attr("disabled", "disabled");
1076
- }
1077
- }
1078
- });
1079
- }
1080
 
1081
- function show_roles_capabilities_mail_bank(id, div_id)
1082
- {
1083
- if (jQuery(id).prop("checked"))
1084
- {
1085
- jQuery("#" + div_id).css("display", "block");
1086
- } else
1087
- {
1088
- jQuery("#" + div_id).css("display", "none");
1089
- }
1090
- }
1091
 
1092
- jQuery(document).ready(function ()
1093
- {
1094
- jQuery("#ux_ddl_mail_bank_menu").val("<?php echo isset($details_roles_capabilities["show_mail_bank_top_bar_menu"]) ? esc_attr($details_roles_capabilities["show_mail_bank_top_bar_menu"]) : "enable"; ?>");
1095
- show_roles_capabilities_mail_bank("#ux_chk_author", "ux_div_author_roles");
1096
- full_control_function_mail_bank("#ux_chk_full_control_author", "ux_div_author_roles");
1097
- show_roles_capabilities_mail_bank("#ux_chk_editor", "ux_div_editor_roles");
1098
- full_control_function_mail_bank("#ux_chk_full_control_editor", "ux_div_editor_roles");
1099
- show_roles_capabilities_mail_bank("#ux_chk_contributor", "ux_div_contributor_roles");
1100
- full_control_function_mail_bank("#ux_chk_full_control_contributor", "ux_div_contributor_roles");
1101
- show_roles_capabilities_mail_bank("#ux_chk_subscriber", "ux_div_subscriber_roles");
1102
- full_control_function_mail_bank("#ux_chk_full_control_subscriber", "ux_div_subscriber_roles");
1103
- show_roles_capabilities_mail_bank("#ux_chk_others_privileges", "ux_div_other_privileges_roles");
1104
- full_control_function_mail_bank("#ux_chk_full_control_other_privileges_roles", "ux_div_other_privileges_roles");
1105
- full_control_function_mail_bank("#ux_chk_full_control_other_roles", "ux_div_other_roles");
1106
- });
1107
- jQuery("#ux_frm_roles_and_capabilities").validate
1108
- ({
1109
- submitHandler: function ()
1110
- {
1111
- premium_edition_notification_mail_bank();
1112
- }
1113
- });
1114
- load_sidebar_content_mail_bank();
1115
- <?php
1116
- }
1117
- break;
1118
- case "mb_feedbacks":
1119
- ?>
1120
- jQuery("#ux_mb_li_feedbacks").addClass("active");
1121
- load_sidebar_content_mail_bank();
1122
- var feedback_array = [];
1123
- var url = "<?php echo tech_banker_url . "/feedbacks.php"; ?>";
1124
- var domain_url = "<?php echo site_url(); ?>";
1125
- jQuery("#ux_frm_feedbacks").validate
1126
- ({
1127
- rules:
1128
- {
1129
- ux_txt_your_name:
1130
- {
1131
- required: true
1132
- },
1133
- ux_txt_email_address:
1134
- {
1135
- required: true,
1136
- email: true
1137
- },
1138
- ux_txtarea_feedbacks:
1139
- {
1140
- required: true
1141
- }
1142
- },
1143
- errorPlacement: function ()
1144
- {
1145
- },
1146
- highlight: function (element)
1147
- {
1148
- jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
1149
- },
1150
- success: function (label, element)
1151
- {
1152
- var icon = jQuery(element).parent(".input-icon").children("i");
1153
- jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
1154
- icon.removeClass("fa-warning").addClass("fa-check");
1155
- },
1156
- submitHandler: function ()
1157
- {
1158
- feedback_array.push(jQuery("#ux_txt_your_name").val(), jQuery("#ux_txt_email_address").val(), domain_url, jQuery("#ux_txtarea_feedbacks").val());
1159
- overlay_loading_mail_bank(<?php echo json_encode($mb_update_feedbacks); ?>);
1160
- jQuery.post(url,
1161
- {
1162
- data: JSON.stringify(feedback_array),
1163
- param: "mail_bank_send_feedback"
1164
- },
1165
- function ()
1166
- {
1167
- setTimeout(function ()
1168
- {
1169
- remove_overlay_mail_bank();
1170
- window.location.href = "admin.php?page=mb_feedbacks";
1171
- }, 3000);
1172
- });
1173
- }
1174
- });
1175
- load_sidebar_content_mail_bank();
1176
- <?php
1177
- break;
1178
- case "mb_system_information":
1179
- ?>
1180
- jQuery("#ux_mb_li_system_information").addClass("active");
1181
- var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
1182
- setTimeout(function ()
1183
- {
1184
- clearInterval(sidebar_load_interval);
1185
- }, 5000);
1186
- <?php
1187
- if (system_information_mail_bank == 1) {
1188
- ?>
1189
- jQuery.getSystemReport = function (strDefault, stringCount, string, location)
1190
- {
1191
- var o = strDefault.toString();
1192
- if (!string)
1193
- {
1194
- string = "0";
1195
- }
1196
- while (o.length < stringCount)
1197
- {
1198
- if (location === "undefined")
1199
- {
1200
- o = string + o;
1201
- } else
1202
- {
1203
- o = o + string;
1204
- }
1205
- }
1206
- return o;
1207
- };
1208
- jQuery(".system-report").click(function ()
1209
- {
1210
- var report = "";
1211
- jQuery(".custom-form-body").each(function ()
1212
- {
1213
- jQuery("h3.form-section", jQuery(this)).each(function ()
1214
- {
1215
- report = report + "\n### " + jQuery.trim(jQuery(this).text()) + " ###\n\n";
1216
- });
1217
- jQuery("tbody > tr", jQuery(this)).each(function ()
1218
- {
1219
- var the_name = jQuery.getSystemReport(jQuery.trim(jQuery(this).find("strong").text()), 25, " ");
1220
- var the_value = jQuery.trim(jQuery(this).find("span").text());
1221
- var value_array = the_value.split(", ");
1222
- if (value_array.length > 1)
1223
- {
1224
- var temp_line = "";
1225
- jQuery.each(value_array, function (key, line)
1226
- {
1227
- var tab = (key == 0) ? 0 : 25;
1228
- temp_line = temp_line + jQuery.getSystemReport("", tab, " ", "f") + line + "\n";
1229
- });
1230
- the_value = temp_line;
1231
- }
1232
- report = report + "" + the_name + the_value + "\n";
1233
- });
1234
- });
1235
- try
1236
- {
1237
- jQuery("#ux_system_information").slideDown();
1238
- jQuery("#ux_system_information textarea").val(report).focus().select();
1239
- return false;
1240
- } catch (e)
1241
- {
1242
- }
1243
- return false;
1244
- });
1245
- jQuery("#ux_btn_system_information").click(function ()
1246
- {
1247
- if (jQuery("#ux_btn_system_information").text() === "Close System Information!")
1248
- {
1249
- jQuery("#ux_system_information").slideUp();
1250
- jQuery("#ux_btn_system_information").html("Get System Information!");
1251
- } else
1252
- {
1253
- jQuery("#ux_btn_system_information").html("Close System Information!");
1254
- jQuery("#ux_btn_system_information").removeClass("system-information");
1255
- jQuery("#ux_btn_system_information").addClass("close-information");
1256
- }
1257
- });
1258
- load_sidebar_content_mail_bank();
1259
- <?php
1260
- }
1261
- break;
1262
 
1263
- case "mb_upgrade":
1264
- ?>
1265
- jQuery("#ux_li_upgrade").addClass("active");
1266
- var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
1267
- setTimeout(function ()
1268
- {
1269
- clearInterval(sidebar_load_interval);
1270
- }, 5000);
1271
- load_sidebar_content_mail_bank();
1272
- <?php
1273
- break;
1274
- }
1275
  }
1276
  ?>
1277
  </script>
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
  }
21
  }
22
  if (!$access_granted) {
29
  <div class="popup" data-popup="ux_open_popup_translator">
30
  <div class="popup-inner">
31
  <div class="portlet box vivid-green" style="margin-bottom:0px;">
32
+ <div class="portlet-title">
33
+ <div class="caption" id="ux_div_action">
34
+ <?php echo $mb_translation_request; ?>
35
+ </div>
36
+ </div>
37
+ <div class="portlet-body form">
38
+ <div id="ux_div_popup_header">
39
+ <form id="ux_frm_language_translator">
40
+ <div class="form-body">
41
+ <div class="row">
42
+ <div class="col-md-6 popup-control">
43
+ <div class="form-group">
44
+ <label class="control-label">
45
+ <?php echo $mb_feature_requests_your_name; ?> :
46
+ <i class="icon-custom-question tooltips" data-original-title="<?php echo $mb_popup_your_name_tooltip; ?>" data-placement="right"></i>
47
+ <span class="required" aria-required="true">*</span>
48
+ </label>
49
+ <input type="text" class="form-control" name="ux_txt_your_name" id="ux_txt_your_name" value="" placeholder="<?php echo $mb_feature_requests_your_name_placeholder; ?>">
50
+ </div>
51
+ </div>
52
+ <div class="col-md-6 popup-control">
53
+ <div class="form-group">
54
+ <label class="control-label">
55
+ <?php echo $mb_feature_requests_your_email; ?> :
56
+ <i class="icon-custom-question tooltips" data-original-title="<?php echo $mb_popup_your_email_tooltip; ?>" data-placement="right"></i>
57
+ <span class="required" aria-required="true">*</span>
58
+ </label>
59
+ <input type="text" class="form-control" name="ux_txt_email_address" id="ux_txt_email_address" value="" placeholder="<?php echo $mb_feature_requests_your_email_placeholder; ?>">
60
+ </div>
61
+ </div>
62
+ </div>
63
+ <div class="form-group">
64
+ <label class="control-label">
65
+ <?php echo $mb_language_interested_to_translate; ?> :
66
+ <i class="icon-custom-question tooltips" data-original-title="<?php echo $mb_language_interested_to_translate_tooltip; ?>" data-placement="right"></i>
67
+ <span class="required" aria-required="true">*</span>
68
+ </label>
69
+ <input type="text" class="form-control" name="ux_txt_language" id="ux_txt_language" value="" placeholder="<?php echo $mb_language_interested_to_translate_placeholder; ?>">
70
+ </div>
71
+ <div class="form-group">
72
+ <label class="control-label">
73
+ <?php echo $mb_popup_query; ?> :
74
+ <i class="icon-custom-question tooltips" data-original-title="<?php echo $mb_popup_query_tooltip; ?>" data-placement="right"></i>
75
+ <span class="required" aria-required="true">*</span>
76
+ </label>
77
+ <textarea class="form-control" name="ux_txtarea_query" id="ux_txtarea_query" rows="7" placeholder="<?php echo $mb_popup_query_placeholder; ?>"><?php echo "Hi,\r\r\nI am interested in translating your plugin Mail Bank in my native language.\r\r\nPlease get back to me!\r\r\nThanks"; ?></textarea>
78
+ </div>
79
+ </div>
80
+ <div class="modal-footer">
81
+ <div class="form-actions">
82
+ <div class="pull-right">
83
+ <input type="button" data-popup-close-translator="ux_open_popup_translator" class="btn vivid-green" name="ux_btn_close" id="ux_btn_close" value="<?php echo $mb_manage_backups_close; ?>">
84
+ <input type="submit" class="btn vivid-green" name="ux_btn_send_request" id="ux_btn_send_request" value="<?php echo $mb_feature_requests_send_request; ?>">
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </form>
89
+ </div>
90
+ </div>
91
  </div>
92
  </div>
93
  </div>
97
  {
98
  if (jQuery(this).parent("ul.page-sidebar-menu-tech-banker").size() === 1)
99
  {
100
+ jQuery(this).find("> a").append("<span class=\"selected\"></span>");
101
  }
102
  });
103
 
107
  var content_height = jQuery(".page-content").height() + 30;
108
  if (parseInt(menus_height) > parseInt(content_height))
109
  {
110
+ jQuery(".page-content").attr("style", "min-height:" + menus_height + "px")
111
  } else
112
  {
113
+ jQuery(".page-sidebar-menu-tech-banker").attr("style", "min-height:" + content_height + "px")
114
  }
115
  }
116
 
126
  var sidebar_close = parent.children("li.open").removeClass("open");
127
  if (sidebar_close)
128
  {
129
+ setInterval(load_sidebar_content_mail_bank, 100);
130
  }
131
  if (sub.is(":visible"))
132
  {
133
+ jQuery(this).parent().removeClass("open");
134
+ sub.slideUp(slideSpeed);
135
  } else if (hasSubMenu)
136
  {
137
+ jQuery(this).parent().addClass("open");
138
+ sub.slideDown(slideSpeed);
139
  }
140
  });
141
  function paste_only_digits_mail_bank(control_id)
142
  {
143
  jQuery("#" + control_id).on("paste keypress", function (e)
144
  {
145
+ var $this = jQuery("#" + control_id);
146
+ setTimeout(function ()
147
+ {
148
+ $this.val($this.val().replace(/[^0-9]/g, ""));
149
+ }, 5);
150
  });
151
  }
152
 
171
  jQuery("body").append(overlay);
172
  if (control_id !== undefined)
173
  {
174
+ var message = control_id;
175
+ var success = <?php echo json_encode($mb_success); ?>;
176
+ var issuccessmessage = jQuery("#toast-container").exists();
177
+ if (issuccessmessage !== true)
178
+ {
179
+ var shortCutFunction = jQuery("#manage_messages input:checked").val();
180
+ toastr[shortCutFunction](message, success);
181
+ }
182
  }
183
  }
184
 
192
  {
193
  var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
194
  var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
195
+ ac = 0,
196
+ enc = '',
197
+ tmp_arr = [];
198
  if (!data)
199
  {
200
+ return data;
201
  }
202
  do
203
  {
204
+ o1 = data.charCodeAt(i++);
205
+ o2 = data.charCodeAt(i++);
206
+ o3 = data.charCodeAt(i++);
207
+ bits = o1 << 16 | o2 << 8 | o3;
208
+ h1 = bits >> 18 & 0x3f;
209
+ h2 = bits >> 12 & 0x3f;
210
+ h3 = bits >> 6 & 0x3f;
211
+ h4 = bits & 0x3f;
212
+ tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
213
  } while (i < data.length);
214
  enc = tmp_arr.join('');
215
  var r = data.length % 3;
230
  var hostname = smtp_host.substr(indexof, 5);
231
  if (smtp_host === "smtp.gmail.com")
232
  {
233
+ jQuery("#ux_link_content").text("(" +<?php echo json_encode($mb_email_configuration_get_google_credentials); ?> + ")");
234
+ jQuery("#ux_link_reference").attr("href", "https://console.developers.google.com");
235
  } else if (smtp_host === "smtp.live.com")
236
  {
237
+ jQuery("#ux_link_content").text("(" +<?php echo json_encode($mb_email_configuration_get_microsoft_credentials); ?> + ")");
238
+ jQuery("#ux_link_reference").attr("href", "https://account.live.com/developers/applications/create");
239
  } else if (hostname === "yahoo")
240
  {
241
+ jQuery("#ux_link_content").text("(" +<?php echo json_encode($mb_email_configuration_get_yahoo_credentials); ?> + ")");
242
+ jQuery("#ux_link_reference").attr("href", "https://developer.yahoo.com/apps/");
243
  } else
244
  {
245
+ jQuery("#ux_link_content").text("");
246
  }
247
  }
248
 
249
  function mail_bank_mail_sender(to_email_address)
250
  {
251
  jQuery.post(ajaxurl,
252
+ {
253
+ data: base64_encode_mail_bank(jQuery("#ux_frm_test_email_configuration").serialize()),
254
+ param: "mail_bank_test_email_configuration_module",
255
+ action: "mail_bank_action",
256
+ _wp_nonce: "<?php echo isset($mail_bank_test_email_configuration) ? $mail_bank_test_email_configuration : ""; ?>"
257
+ },
258
+ function (data)
259
+ {
260
+ jQuery("#ux_txtarea_result_log").html("<?php echo $mb_email_configuration_send_test_email_textarea; ?>\n");
261
+ jQuery("#ux_txtarea_result_log").append(<?php echo json_encode($mb_test_email_sending_test_email); ?> + "&nbsp;" + to_email_address + "\n");
262
+ if (jQuery.trim(data) === "true" || jQuery.trim(data) === "1")
263
+ {
264
+ jQuery("#ux_div_mail_console").css("display", "block");
265
+ jQuery("#console_log_div").css("display", "none");
266
+ jQuery("#ux_txtarea_result_log").append(<?php echo json_encode($mb_test_email_sent); ?>);
267
+ } else
268
+ {
269
+ jQuery("#console_log_div").css("display", "none");
270
+ jQuery("#ux_div_mail_console").css("display", "block");
271
+ if (jQuery.trim(data) !== "")
272
+ {
273
+ jQuery("#ux_txtarea_result_log").html(data);
274
+ } else
275
+ {
276
+ jQuery("#ux_txtarea_result_log").append(<?php echo json_encode($mb_test_email_not_send); ?>);
277
+ }
278
+ }
279
+ load_sidebar_content_mail_bank();
280
+ });
281
  }
282
 
283
  function mail_bank_send_test_mail()
284
  {
285
  jQuery("#ux_frm_test_email_configuration").validate
286
+ ({
287
+ rules:
288
+ {
289
+ ux_txt_email:
290
+ {
291
+ required: true,
292
+ email: true
293
+ },
294
+ ux_txt_subject:
295
+ {
296
+ required: true
297
+ },
298
+ ux_content:
299
+ {
300
+ required: true
301
+ }
302
+ },
303
+ errorPlacement: function ()
304
+ {
305
+ },
306
+ highlight: function (element)
307
+ {
308
+ jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
309
+ },
310
+ success: function (label, element)
311
+ {
312
+ var icon = jQuery(element).parent(".input-icon").children("i");
313
+ jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
314
+ icon.removeClass("fa-warning").addClass("fa-check");
315
+ },
316
+ submitHandler: function ()
317
+ {
318
+ var to_email_address = jQuery("#ux_txt_email").val();
319
+ if (window.CKEDITOR)
320
+ {
321
+ jQuery("#ux_email_configuration_text_area").val(CKEDITOR.instances["ux_content"].getData());
322
+ } else if (jQuery("#wp-ux_content-wrap").hasClass("tmce-active"))
323
+ {
324
+ jQuery("#ux_email_configuration_text_area").val(tinyMCE.get("ux_content").getContent());
325
+ } else
326
+ {
327
+ jQuery("#ux_email_configuration_text_area").val(jQuery("#ux_content").val());
328
+ }
329
+ mail_bank_mail_sender(to_email_address);
330
+ jQuery("#console_log_div").css("display", "block");
331
+ jQuery("#ux_div_test_mail").css("display", "none");
332
+ }
333
+ });
334
  }
335
 
336
  // Close popup
339
  var confirm_close = confirm(<?php echo json_encode($mb_confirm_close); ?>);
340
  if (confirm_close === true)
341
  {
342
+ var targeted_popup_class = jQuery(this).attr("data-popup-close-translator");
343
+ jQuery('[data-popup="' + targeted_popup_class + '"]').fadeOut(350);
344
  }
345
  e.preventDefault();
346
  });
348
  {
349
  jQuery("[data-popup-open]").on("click", function (e)
350
  {
351
+ var targeted_popup_class = jQuery(this).attr("data-popup-open");
352
+ jQuery('[data-popup="' + targeted_popup_class + '"]').fadeIn(350);
353
+ e.preventDefault();
354
  });
355
  // Close popup
356
  jQuery("[data-popup-close]").on("click", function (e)
357
  {
358
+ var targeted_popup_class = jQuery(this).attr("data-popup-close");
359
+ jQuery('[data-popup="' + targeted_popup_class + '"]').fadeOut(350);
360
+ e.preventDefault();
361
  });
362
  jQuery(document).keydown(function (e)
363
  {
364
+ // ESCAPE key pressed
365
+ if (e.keyCode === 27)
366
+ {
367
+ var targeted_popup_class = jQuery("[data-popup-close]").attr("data-popup-close");
368
+ jQuery('[data-popup="' + targeted_popup_class + '"]').fadeOut(350);
369
+ }
370
  });
371
  }
372
 
374
  var url = "<?php echo tech_banker_url . "/feedbacks.php"; ?>";
375
  var domain_url = "<?php echo site_url(); ?>";
376
  jQuery("#ux_frm_language_translator").validate
377
+ ({
378
+ rules:
379
+ {
380
+ ux_txt_your_name:
381
+ {
382
+ required: true
383
+ },
384
+ ux_txt_email_address:
385
+ {
386
+ required: true,
387
+ email: true
388
+ },
389
+ ux_txt_language:
390
+ {
391
+ required: true
392
+ },
393
+ ux_txtarea_query:
394
+ {
395
+ required: true
396
+ }
397
+ },
398
+ errorPlacement: function ()
399
+ {
400
+ },
401
+ highlight: function (element)
402
+ {
403
+ jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
404
+ },
405
+ success: function (label, element)
406
+ {
407
+ var icon = jQuery(element).parent(".input-icon").children("i");
408
+ jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
409
+ icon.removeClass("fa-warning").addClass("fa-check");
410
+ },
411
+ submitHandler: function ()
412
+ {
413
+ translation_request_array.push(jQuery("#ux_txt_your_name").val());
414
+ translation_request_array.push(jQuery("#ux_txt_email_address").val());
415
+ translation_request_array.push(domain_url);
416
+ translation_request_array.push(jQuery("#ux_txt_language").val());
417
+ translation_request_array.push(jQuery("#ux_txtarea_query").val());
418
+ jQuery.post(url,
419
+ {
420
+ data: JSON.stringify(translation_request_array),
421
+ param: "mail_bank_translation_request"
422
+ },
423
+ function ()
424
+ {
425
+ overlay_loading_mail_bank(<?php echo json_encode($mb_feature_request_message) ?>);
426
+ setTimeout(function ()
427
+ {
428
+ remove_overlay_mail_bank();
429
+ window.location.href = "admin.php?page=mb_email_configuration";
430
+ }, 3000);
431
+ });
432
+ }
433
+ });
434
  function show_pop_up_mail_bank()
435
  {
436
  open_popup_mail_bank();
451
  $check_wp_mail_bank_wizard = get_option("wp-mail-bank-wizard-set-up");
452
  $page_url = $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : esc_attr($_GET["page"]);
453
  if (isset($_GET["page"])) {
454
+ switch ($page_url) {
455
+ case "wp_mail_bank_wizard":
456
+ ?>
457
+ function show_hide_details_wp_mail_bank()
458
+ {
459
+ if (jQuery("#ux_div_wizard_set_up").hasClass("wizard-set-up"))
460
+ {
461
+ jQuery("#ux_div_wizard_set_up").css("display", "none");
462
+ jQuery("#ux_div_wizard_set_up").removeClass("wizard-set-up");
463
+ } else
464
+ {
465
+ jQuery("#ux_div_wizard_set_up").css("display", "block");
466
+ jQuery("#ux_div_wizard_set_up").addClass("wizard-set-up");
467
+ }
468
+ }
469
 
470
+ function plugin_stats_wp_mail_bank(type)
471
+ {
472
+ overlay_loading_mail_bank();
473
+ jQuery.post(ajaxurl,
474
+ {
475
+ type: type,
476
+ param: "wizard_wp_mail_bank",
477
+ action: "mail_bank_action",
478
+ _wp_nonce: "<?php echo $wp_mail_bank_check_status; ?>"
479
+ },
480
+ function ()
481
+ {
482
+ remove_overlay_mail_bank();
483
+ window.location.href = "admin.php?page=mb_email_configuration";
484
+ });
485
+ }
486
 
487
+ <?php
488
+ break;
489
+ case "mb_email_configuration":
490
+ ?>
491
+ jQuery("#ux_mb_li_email_configuration").addClass("active");
492
+ <?php
493
+ if (email_configuration_mail_bank == 1) {
494
+ ?>
495
+ function select_credentials_mail_bank()
496
+ {
497
+ var selected_credential = jQuery("#ux_ddl_mb_authentication").val();
498
+ var type = jQuery("#ux_ddl_type").val();
499
+ if (selected_credential === "oauth2" && type === "smtp")
500
+ {
501
+ jQuery("#ux_div_username_password_authentication").css("display", "none");
502
+ jQuery("#ux_div_oauth_authentication").css("display", "block");
503
+ check_links_oauth_mail_bank();
504
+ } else
505
+ {
506
+ if (selected_credential === "none")
507
+ {
508
+ jQuery("#ux_div_username_password_authentication").css("display", "none");
509
+ jQuery("#ux_div_oauth_authentication").css("display", "none");
510
+ } else
511
+ {
512
+ jQuery("#ux_div_username_password_authentication").css("display", "block");
513
+ jQuery("#ux_div_oauth_authentication").css("display", "none");
514
+ }
515
+ }
516
+ }
517
 
518
+ function mail_bank_second_step_settings()
519
+ {
520
+ jQuery("#ux_div_first_step").css("display", "none");
521
+ jQuery("#test_email").css("display", "none");
522
+ jQuery("#ux_div_second_step").css("display", "block");
523
+ jQuery("#ux_div_step_progres_bar_width").css("width", "66%");
524
+ jQuery("#ux_div_frm_wizard li:eq(1)").addClass("active");
525
+ jQuery("#ux_div_frm_wizard li:eq(2)").removeClass("active");
526
+ }
527
 
528
+ function mail_bank_third_step_settings()
529
+ {
530
+ jQuery("#ux_div_first_step").removeClass("first-step-helper");
531
+ jQuery("#test_email").css("display", "block");
532
+ jQuery("#ux_div_first_step").css("display", "none");
533
+ jQuery("#ux_div_second_step").css("display", "none");
534
+ jQuery("#ux_div_step_progres_bar_width").css("width", "100%");
535
+ jQuery("#ux_div_frm_wizard li:eq(1)").addClass("active");
536
+ jQuery("#ux_div_frm_wizard li:eq(2)").addClass("active");
537
+ }
538
 
539
+ function mail_bank_from_name_override()
540
+ {
541
+ var from_name = jQuery("#ux_ddl_from_name").val();
542
+ if (jQuery.trim(from_name) === "dont_override")
543
+ {
544
+ jQuery("#ux_txt_mb_from_name").attr("disabled", true);
545
+ } else
546
+ {
547
+ jQuery("#ux_txt_mb_from_name").attr("disabled", false);
548
+ }
549
+ }
550
 
551
+ function mail_bank_from_email_override()
552
+ {
553
+ var from_email = jQuery("#ux_ddl_from_email").val();
554
+ if (jQuery.trim(from_email) === "dont_override")
555
+ {
556
+ jQuery("#ux_txt_mb_from_email_configuration").attr("disabled", true);
557
+ } else
558
+ {
559
+ jQuery("#ux_txt_mb_from_email_configuration").attr("disabled", false);
560
+ }
561
+ }
562
 
563
+ function mail_bank_validate_settings()
564
+ {
565
+ jQuery("#ux_frm_email_configuration").validate
566
+ ({
567
+ rules:
568
+ {
569
+ ux_txt_mb_from_name:
570
+ {
571
+ required: true
572
+ },
573
+ ux_txt_mb_from_email_configuration:
574
+ {
575
+ required: true,
576
+ email: true
577
+ },
578
+ ux_txt_email_address:
579
+ {
580
+ required: true,
581
+ email: true
582
+ },
583
+ ux_txt_host:
584
+ {
585
+ required: true
586
+ },
587
+ ux_txt_port:
588
+ {
589
+ required: true
590
+ },
591
+ ux_txt_client_id:
592
+ {
593
+ required: true
594
+ },
595
+ ux_txt_client_secret:
596
+ {
597
+ required: true
598
+ },
599
+ ux_txt_username:
600
+ {
601
+ required: true
602
+ },
603
+ ux_txt_password:
604
+ {
605
+ required: true
606
+ }
607
+ },
608
+ errorPlacement: function ()
609
+ {
610
+ },
611
+ highlight: function (element)
612
+ {
613
+ jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
614
+ },
615
+ success: function (label, element)
616
+ {
617
+ var icon = jQuery(element).parent(".input-icon").children("i");
618
+ jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
619
+ icon.removeClass("fa-warning").addClass("fa-check");
620
+ },
621
+ submitHandler: function ()
622
+ {
623
+ if (jQuery("#ux_div_first_step").hasClass("first-step-helper"))
624
+ {
625
+ mail_bank_second_step_settings();
626
+ } else if (jQuery("#test_email").hasClass("second-step-helper"))
627
+ {
628
+ jQuery.post(ajaxurl,
629
+ {
630
+ data: base64_encode_mail_bank(jQuery("#ux_frm_email_configuration").serialize()),
631
+ action: "mail_bank_action",
632
+ param: "mail_bank_email_configuration_settings_module",
633
+ _wp_nonce: "<?php echo $mail_bank_email_configuration_settings; ?>"
634
+ },
635
+ function (data)
636
+ {
637
+ var automatic_mail = jQuery("#ux_chk_automatic_sent_mail").is(":checked");
638
+ var mailer_type = jQuery("#ux_ddl_type").val();
639
+ if (jQuery.trim(data) === "100" && mailer_type === "smtp")
640
+ {
641
+ var shortCutFunction = jQuery("#toastTypeGroup_error input:checked").val();
642
+ toastr[shortCutFunction](<?php echo json_encode($oauth_not_supported); ?>);
643
+ } else if (jQuery.trim(data) !== "" && mailer_type === "smtp")
644
+ {
645
+ window.location.href = data;
646
+ } else
647
+ {
648
+ var send_mail = false;
649
+ if (jQuery.trim(automatic_mail) === "true")
650
+ {
651
+ var send_mail = true;
652
+ }
653
+ window.location.href = "admin.php?page=mb_email_configuration&auto_mail=" + send_mail;
654
+ }
655
+ });
656
+ }
657
+ }
658
+ });
659
+ }
660
 
661
+ function change_settings_mail_bank()
662
+ {
663
+ var type = jQuery("#ux_ddl_type").val();
664
+ switch (type)
665
+ {
666
+ case "php_mail_function":
667
+ jQuery("#ux_div_smtp_mail_function").css("display", "none");
668
+ break;
669
+ case "smtp":
670
+ jQuery("#ux_div_smtp_mail_function").css("display", "block");
671
+ break;
672
+ }
673
+ select_credentials_mail_bank();
674
+ }
675
 
676
+ function mail_bank_get_host_port()
677
+ {
678
+ change_settings_mail_bank();
679
+ var smtp_user = jQuery("#ux_txt_email_address").val();
680
+ jQuery.post(ajaxurl,
681
+ {
682
+ smtp_user: smtp_user,
683
+ param: "mail_bank_set_hostname_port_module",
684
+ action: "mail_bank_action",
685
+ _wp_nonce: "<?php echo $mail_bank_set_hostname_port; ?>"
686
+ },
687
+ function (data)
688
+ {
689
+ if (jQuery.trim(data) !== "")
690
+ {
691
+ jQuery("#ux_txt_host").val(data);
692
+ check_links_oauth_mail_bank();
693
+ } else
694
+ {
695
+ jQuery("#ux_txt_host").val("");
696
+ jQuery("#ux_link_content").text("");
697
+ }
698
+ change_settings_mail_bank();
699
+ });
700
+ }
701
 
702
+ function change_link_content_mail_bank()
703
+ {
704
+ var host_type = jQuery("#ux_txt_host").val();
705
+ var indexof = host_type.indexOf("yahoo");
706
+ var hostname = host_type.substr(indexof, 5);
707
+ if (host_type === "smtp.gmail.com")
708
+ {
709
+ check_links_oauth_mail_bank();
710
+ jQuery("#ux_ddl_mb_authentication").val("oauth2");
711
+ select_credentials_mail_bank();
712
+ } else if (host_type === "smtp.live.com")
713
+ {
714
+ check_links_oauth_mail_bank();
715
+ jQuery("#ux_ddl_mb_authentication").val("oauth2");
716
+ select_credentials_mail_bank();
717
+ } else if (hostname === "yahoo")
718
+ {
719
+ check_links_oauth_mail_bank();
720
+ jQuery("#ux_ddl_mb_authentication").val("oauth2");
721
+ select_credentials_mail_bank();
722
+ } else
723
+ {
724
+ check_links_oauth_mail_bank();
725
+ jQuery("#ux_ddl_mb_authentication").val("login");
726
+ select_credentials_mail_bank();
727
+ }
728
+ }
729
 
730
+ jQuery(document).ready(function ()
731
+ {
732
+ if (window.CKEDITOR)
733
+ {
734
+ CKEDITOR.replace("ux_content");
735
+ }
736
+ jQuery("#ux_ddl_type").val("<?php echo isset($email_configuration_array["mailer_type"]) ? esc_attr($email_configuration_array["mailer_type"]) : ""; ?>");
737
+ jQuery("#ux_ddl_mb_authentication").val("<?php echo isset($email_configuration_array["auth_type"]) ? esc_attr($email_configuration_array["auth_type"]) : "login"; ?>");
738
+ jQuery("#ux_ddl_from_name").val("<?php echo isset($email_configuration_array["sender_name_configuration"]) ? esc_html($email_configuration_array["sender_name_configuration"]) : ""; ?>");
739
+ jQuery("#ux_ddl_from_email").val("<?php echo isset($email_configuration_array["from_email_configuration"]) ? esc_attr($email_configuration_array["from_email_configuration"]) : ""; ?>");
740
+ jQuery("#ux_ddl_encryption").val("<?php echo isset($email_configuration_array["enc_type"]) ? esc_attr($email_configuration_array["enc_type"]) : "" ?>");
741
+ <?php
742
+ if (isset($test_secret_key_error)) {
743
+ ?>
744
+ var shortCutFunction = jQuery("#toastTypeGroup_error input:checked").val();
745
+ toastr[shortCutFunction](<?php echo json_encode($test_secret_key_error); ?>);
746
+ mail_bank_second_step_settings();
747
+ <?php
748
+ }
749
+ if (isset($automatically_send_mail)) {
750
+ ?>
751
+ window.location.href = "admin.php?page=mb_email_configuration&auto_mail=true";
752
+ <?php
753
+ } elseif (isset($automatically_not_send_mail)) {
754
+ ?>
755
+ window.location.href = "admin.php?page=mb_email_configuration&auto_mail=false";
756
+ <?php
757
+ }
758
+ ?>
759
+ load_sidebar_content_mail_bank();
760
+ //change_link_content_mail_bank();
761
+ select_credentials_mail_bank();
762
+ change_settings_mail_bank();
763
+ mail_bank_from_name_override();
764
+ mail_bank_from_email_override();
765
+ <?php
766
+ if (isset($_REQUEST["auto_mail"]) && esc_attr($_REQUEST["auto_mail"]) == "true") {
767
+ ?>
768
+ mail_bank_mail_sender("<?php echo get_option('admin_email'); ?>");
769
+ jQuery("#console_log_div").css("display", "block");
770
+ jQuery("#ux_div_mail_console").css("display", "none");
771
+ jQuery("#ux_div_test_mail").css("display", "none");
772
+ mail_bank_third_step_settings();
773
+ <?php
774
+ } elseif (isset($_REQUEST["auto_mail"]) && esc_attr($_REQUEST["auto_mail"]) == "false") {
775
+ ?>
776
+ jQuery("#ux_div_mail_console").css("display", "none");
777
+ jQuery("#ux_div_test_mail").css("display", "block");
778
+ mail_bank_third_step_settings();
779
+ <?php
780
+ }
781
+ if ($email_configuration_array["hostname"] != "") {
782
+ ?>
783
+ jQuery("#ux_txt_host").val("<?php echo isset($email_configuration_array["hostname"]) ? esc_attr($email_configuration_array["hostname"]) : ""; ?>");
784
+ <?php
785
+ } else {
786
+ ?>
787
+ mail_bank_get_host_port();
788
+ <?php
789
+ }
790
+ ?>
791
+ });
792
+ function mail_bank_move_to_second_step()
793
+ {
794
+ jQuery("#ux_div_first_step").addClass("first-step-helper");
795
+ mail_bank_validate_settings();
796
+ }
797
 
798
+ function mail_bank_move_to_first_step()
799
+ {
800
+ jQuery("#ux_div_first_step").removeClass("first-step-helper");
801
+ jQuery("#test_email").removeClass("second-step-helper");
802
+ jQuery("#ux_div_first_step").css("display", "block");
803
+ jQuery("#test_email").css("display", "none");
804
+ jQuery("#ux_div_second_step").css("display", "none");
805
+ jQuery("#ux_div_step_progres_bar_width").css("width", "33%");
806
+ jQuery("#ux_div_frm_wizard li:eq(1)").removeClass("active");
807
+ }
808
 
809
+ function mail_bank_save_changes()
810
+ {
811
+ overlay_loading_mail_bank(<?php echo json_encode($mb_update_email_configuration); ?>);
812
+ setTimeout(function ()
813
+ {
814
+ remove_overlay_mail_bank();
815
+ window.location.href = "admin.php?page=mb_email_configuration";
816
+ }, 3000);
817
+ }
818
 
819
+ function mail_bank_move_to_third_step()
820
+ {
821
+ mail_bank_validate_settings();
822
+ jQuery("#ux_div_first_step").removeClass("first-step-helper");
823
+ jQuery("#test_email").addClass("second-step-helper");
824
+ }
825
 
826
+ function mail_bank_select_port()
827
+ {
828
+ var encryption = jQuery("#ux_ddl_encryption").val();
829
+ switch (encryption)
830
+ {
831
+ case "none":
832
+ case "tls":
833
+ jQuery("#ux_txt_port").val(587);
834
+ break;
835
+ case "ssl":
836
+ jQuery("#ux_txt_port").val(465);
837
+ break;
838
+ }
839
+ }
840
 
841
+ var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
842
+ setTimeout(function ()
843
+ {
844
+ clearInterval(sidebar_load_interval);
845
+ }, 5000);
846
+ load_sidebar_content_mail_bank();
847
+ <?php
848
+ }
849
+ break;
850
+ case "mb_test_email":
851
+ ?>
852
+ jQuery("#ux_mb_li_test_email").addClass("active");
853
+ jQuery(document).ready(function ()
854
+ {
855
+ if (window.CKEDITOR)
856
+ {
857
+ CKEDITOR.replace("ux_content");
858
+ }
859
+ });
860
+ <?php
861
+ break;
862
+ case "mb_connectivity_test":
863
+ ?>
864
+ jQuery("#ux_mb_li_connectivity_test").addClass("active");
865
+ <?php
866
+ if (conectivity_test_email_mail_bank == 1) {
867
+ ?>
868
+ jQuery("#ux_frm_settings").validate
869
+ ({
870
+ rules:
871
+ {
872
+ ux_txt_conn_search:
873
+ {
874
+ required: true
875
+ }
876
+ },
877
+ errorPlacement: function ()
878
+ {
879
+ },
880
+ highlight: function (element)
881
+ {
882
+ jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
883
+ },
884
+ success: function (label, element)
885
+ {
886
+ var icon = jQuery(element).parent(".input-icon").children("i");
887
+ jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
888
+ icon.removeClass("fa-warning").addClass("fa-check");
889
+ },
890
+ submitHandler: function ()
891
+ {
892
+ jQuery("#ux_div_connectivity_test").css("display", "block");
893
+ overlay_loading_mail_bank();
894
+ jQuery.post(ajaxurl,
895
+ {
896
+ smtp_host: jQuery("#ux_txt_conn_search").val(),
897
+ param: "mail_bank_connectivity_test",
898
+ action: "mail_bank_action",
899
+ _wp_nonce: "<?php echo $connectivity_test_nonce; ?>"
900
+ },
901
+ function (data)
902
+ {
903
+ jQuery("#ux_tbody_smtp").html(data);
904
+ setTimeout(function ()
905
+ {
906
+ remove_overlay_mail_bank();
907
+ }, 1000);
908
+ });
909
+ }
910
+ });
911
+ var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
912
+ setTimeout(function ()
913
+ {
914
+ clearInterval(sidebar_load_interval);
915
+ }, 5000);
916
+ <?php
917
+ }
918
+ break;
919
+ case "mb_email_logs":
920
+ ?>
921
+ jQuery("#ux_mb_li_email_logs").addClass("active");
922
+ <?php
923
+ if (email_logs_mail_bank == 1) {
924
+ ?>
925
+ jQuery(document).ready(function ()
926
+ {
927
+ jQuery("#ux_txt_mb_start_date").datepicker
928
+ ({
929
+ dateFormat: 'mm/dd/yy',
930
+ numberOfMonths: 1,
931
+ changeMonth: true,
932
+ changeYear: true,
933
+ yearRange: "1970:2039",
934
+ onSelect: function (selected)
935
+ {
936
+ jQuery("#ux_txt_mb_end_date").datepicker("option", "minDate", selected)
937
+ }
938
+ });
939
+ jQuery("#ux_txt_mb_end_date").datepicker
940
+ ({
941
+ dateFormat: 'mm/dd/yy',
942
+ numberOfMonths: 1,
943
+ changeMonth: true,
944
+ changeYear: true,
945
+ yearRange: "1970:2039",
946
+ onSelect: function (selected)
947
+ {
948
+ jQuery("#ux_txt_mb_start_date").datepicker("option", "maxDate", selected)
949
+ }
950
+ });
951
+ });
952
+ function prevent_datepicker_mail_bank(id)
953
+ {
954
+ jQuery("#" + id).on("keypress", function (e)
955
+ {
956
+ e.preventDefault();
957
+ });
958
+ }
959
 
960
+ var oTable = jQuery("#ux_tbl_email_logs").dataTable
961
+ ({
962
+ "pagingType": "full_numbers",
963
+ "language":
964
+ {
965
+ "emptyTable": "No data available in table",
966
+ "info": "Showing _START_ to _END_ of _TOTAL_ entries",
967
+ "infoEmpty": "No entries found",
968
+ "infoFiltered": "(filtered1 from _MAX_ total entries)",
969
+ "lengthMenu": "Show _MENU_ entries",
970
+ "search": "Search:",
971
+ "zeroRecords": "No matching records found"
972
+ },
973
+ "bSort": true,
974
+ "pageLength": 10,
975
+ "aoColumnDefs": [{"bSortable": false, "aTargets": [0]}]
976
+ });
977
+ var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
978
+ setTimeout(function ()
979
+ {
980
+ clearInterval(sidebar_load_interval);
981
+ }, 5000);
982
+ jQuery("#ux_chk_all_email_logs").click(function ()
983
+ {
984
+ jQuery("input[type=checkbox]", oTable.fnGetFilteredNodes()).attr("checked", this.checked);
985
+ });
986
+ function check_email_logs()
987
+ {
988
+ if (jQuery("input:checked", oTable.fnGetFilteredNodes()).length === jQuery("input[type=checkbox]", oTable.fnGetFilteredNodes()).length)
989
+ {
990
+ jQuery("#ux_chk_all_email_logs").attr("checked", "checked");
991
+ } else
992
+ {
993
+ jQuery("#ux_chk_all_email_logs").removeAttr("checked");
994
+ }
995
+ }
996
 
997
+ var ux_frm_email_logs = jQuery("#ux_frm_email_logs").validate
998
+ ({
999
+ submitHandler: function ()
1000
+ {
1001
+ premium_edition_notification_mail_bank();
1002
+ }
1003
+ });
1004
+ load_sidebar_content_mail_bank();
1005
+ <?php
1006
+ }
1007
+ break;
1008
+ case "mb_settings":
1009
+ ?>
1010
+ jQuery("#ux_mb_li_settings").addClass("active");
1011
+ <?php
1012
+ if (settings_mail_bank == 1) {
1013
+ ?>
1014
+ jQuery(document).ready(function ()
1015
+ {
1016
+ jQuery("#ux_ddl_debug_mode").val("<?php echo isset($settings_data_array["debug_mode"]) ? esc_attr($settings_data_array["debug_mode"]) : "enable"; ?>");
1017
+ jQuery("#ux_ddl_remove_tables").val("<?php echo isset($settings_data_array["remove_tables_at_uninstall"]) ? esc_attr($settings_data_array["remove_tables_at_uninstall"]) : "disable"; ?>");
1018
+ jQuery("#ux_ddl_monitor_email_logs").val("<?php echo isset($settings_data_array["monitor_email_logs"]) ? esc_attr($settings_data_array["monitor_email_logs"]) : "enable"; ?>");
1019
+ });
1020
+ jQuery("#ux_frm_settings").validate
1021
+ ({
1022
+ submitHandler: function ()
1023
+ {
1024
+ overlay_loading_mail_bank(<?php echo json_encode($mb_update_settings); ?>);
1025
+ jQuery.post(ajaxurl,
1026
+ {
1027
+ data: base64_encode_mail_bank(jQuery("#ux_frm_settings").serialize()),
1028
+ action: "mail_bank_action",
1029
+ param: "mail_bank_settings_module",
1030
+ _wp_nonce: "<?php echo $mail_bank_settings; ?>"
1031
+ },
1032
+ function ()
1033
+ {
1034
+ setTimeout(function ()
1035
+ {
1036
+ remove_overlay_mail_bank();
1037
+ window.location.href = "admin.php?page=mb_settings";
1038
+ }, 3000);
1039
+ });
1040
+ }
1041
+ });
1042
+ load_sidebar_content_mail_bank();
1043
+ <?php
1044
+ }
1045
+ break;
1046
+ case "mb_roles_and_capabilities":
1047
+ ?>
1048
+ jQuery("#ux_mb_li_roles_and_capabilities").addClass("active");
1049
+ var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
1050
+ setTimeout(function ()
1051
+ {
1052
+ clearInterval(sidebar_load_interval);
1053
+ }, 5000);
1054
+ <?php
1055
+ if (roles_and_capabilities_mail_bank == 1) {
1056
+ ?>
1057
+ function full_control_function_mail_bank(id, div_id)
1058
+ {
1059
+ var checkbox_id = jQuery(id).prop("checked");
1060
+ jQuery("#" + div_id + " input[type=checkbox]").each(function ()
1061
+ {
1062
+ if (checkbox_id)
1063
+ {
1064
+ jQuery(this).attr("checked", "checked");
1065
+ if (jQuery(id).attr("id") !== jQuery(this).attr("id"))
1066
+ {
1067
+ jQuery(this).attr("disabled", "disabled");
1068
+ }
1069
+ } else
1070
+ {
1071
+ if (jQuery(id).attr("id") !== jQuery(this).attr("id"))
1072
+ {
1073
+ jQuery(this).removeAttr("disabled");
1074
+ jQuery("#ux_chk_other_capabilities_manage_options").attr("disabled", "disabled");
1075
+ jQuery("#ux_chk_other_capabilities_read").attr("checked", "checked").attr("disabled", "disabled");
1076
+ }
1077
+ }
1078
+ });
1079
+ }
1080
 
1081
+ function show_roles_capabilities_mail_bank(id, div_id)
1082
+ {
1083
+ if (jQuery(id).prop("checked"))
1084
+ {
1085
+ jQuery("#" + div_id).css("display", "block");
1086
+ } else
1087
+ {
1088
+ jQuery("#" + div_id).css("display", "none");
1089
+ }
1090
+ }
1091
 
1092
+ jQuery(document).ready(function ()
1093
+ {
1094
+ jQuery("#ux_ddl_mail_bank_menu").val("<?php echo isset($details_roles_capabilities["show_mail_bank_top_bar_menu"]) ? esc_attr($details_roles_capabilities["show_mail_bank_top_bar_menu"]) : "enable"; ?>");
1095
+ show_roles_capabilities_mail_bank("#ux_chk_author", "ux_div_author_roles");
1096
+ full_control_function_mail_bank("#ux_chk_full_control_author", "ux_div_author_roles");
1097
+ show_roles_capabilities_mail_bank("#ux_chk_editor", "ux_div_editor_roles");
1098
+ full_control_function_mail_bank("#ux_chk_full_control_editor", "ux_div_editor_roles");
1099
+ show_roles_capabilities_mail_bank("#ux_chk_contributor", "ux_div_contributor_roles");
1100
+ full_control_function_mail_bank("#ux_chk_full_control_contributor", "ux_div_contributor_roles");
1101
+ show_roles_capabilities_mail_bank("#ux_chk_subscriber", "ux_div_subscriber_roles");
1102
+ full_control_function_mail_bank("#ux_chk_full_control_subscriber", "ux_div_subscriber_roles");
1103
+ show_roles_capabilities_mail_bank("#ux_chk_others_privileges", "ux_div_other_privileges_roles");
1104
+ full_control_function_mail_bank("#ux_chk_full_control_other_privileges_roles", "ux_div_other_privileges_roles");
1105
+ full_control_function_mail_bank("#ux_chk_full_control_other_roles", "ux_div_other_roles");
1106
+ });
1107
+ jQuery("#ux_frm_roles_and_capabilities").validate
1108
+ ({
1109
+ submitHandler: function ()
1110
+ {
1111
+ premium_edition_notification_mail_bank();
1112
+ }
1113
+ });
1114
+ load_sidebar_content_mail_bank();
1115
+ <?php
1116
+ }
1117
+ break;
1118
+ case "mb_feedbacks":
1119
+ ?>
1120
+ jQuery("#ux_mb_li_feedbacks").addClass("active");
1121
+ load_sidebar_content_mail_bank();
1122
+ var feedback_array = [];
1123
+ var url = "<?php echo tech_banker_url . "/feedbacks.php"; ?>";
1124
+ var domain_url = "<?php echo site_url(); ?>";
1125
+ jQuery("#ux_frm_feedbacks").validate
1126
+ ({
1127
+ rules:
1128
+ {
1129
+ ux_txt_your_name:
1130
+ {
1131
+ required: true
1132
+ },
1133
+ ux_txt_email_address:
1134
+ {
1135
+ required: true,
1136
+ email: true
1137
+ },
1138
+ ux_txtarea_feedbacks:
1139
+ {
1140
+ required: true
1141
+ }
1142
+ },
1143
+ errorPlacement: function ()
1144
+ {
1145
+ },
1146
+ highlight: function (element)
1147
+ {
1148
+ jQuery(element).closest(".form-group").removeClass("has-success").addClass("has-error");
1149
+ },
1150
+ success: function (label, element)
1151
+ {
1152
+ var icon = jQuery(element).parent(".input-icon").children("i");
1153
+ jQuery(element).closest(".form-group").removeClass("has-error").addClass("has-success");
1154
+ icon.removeClass("fa-warning").addClass("fa-check");
1155
+ },
1156
+ submitHandler: function ()
1157
+ {
1158
+ feedback_array.push(jQuery("#ux_txt_your_name").val(), jQuery("#ux_txt_email_address").val(), domain_url, jQuery("#ux_txtarea_feedbacks").val());
1159
+ overlay_loading_mail_bank(<?php echo json_encode($mb_update_feedbacks); ?>);
1160
+ jQuery.post(url,
1161
+ {
1162
+ data: JSON.stringify(feedback_array),
1163
+ param: "mail_bank_send_feedback"
1164
+ },
1165
+ function ()
1166
+ {
1167
+ setTimeout(function ()
1168
+ {
1169
+ remove_overlay_mail_bank();
1170
+ window.location.href = "admin.php?page=mb_feedbacks";
1171
+ }, 3000);
1172
+ });
1173
+ }
1174
+ });
1175
+ load_sidebar_content_mail_bank();
1176
+ <?php
1177
+ break;
1178
+ case "mb_system_information":
1179
+ ?>
1180
+ jQuery("#ux_mb_li_system_information").addClass("active");
1181
+ var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
1182
+ setTimeout(function ()
1183
+ {
1184
+ clearInterval(sidebar_load_interval);
1185
+ }, 5000);
1186
+ <?php
1187
+ if (system_information_mail_bank == 1) {
1188
+ ?>
1189
+ jQuery.getSystemReport = function (strDefault, stringCount, string, location)
1190
+ {
1191
+ var o = strDefault.toString();
1192
+ if (!string)
1193
+ {
1194
+ string = "0";
1195
+ }
1196
+ while (o.length < stringCount)
1197
+ {
1198
+ if (location === "undefined")
1199
+ {
1200
+ o = string + o;
1201
+ } else
1202
+ {
1203
+ o = o + string;
1204
+ }
1205
+ }
1206
+ return o;
1207
+ };
1208
+ jQuery(".system-report").click(function ()
1209
+ {
1210
+ var report = "";
1211
+ jQuery(".custom-form-body").each(function ()
1212
+ {
1213
+ jQuery("h3.form-section", jQuery(this)).each(function ()
1214
+ {
1215
+ report = report + "\n### " + jQuery.trim(jQuery(this).text()) + " ###\n\n";
1216
+ });
1217
+ jQuery("tbody > tr", jQuery(this)).each(function ()
1218
+ {
1219
+ var the_name = jQuery.getSystemReport(jQuery.trim(jQuery(this).find("strong").text()), 25, " ");
1220
+ var the_value = jQuery.trim(jQuery(this).find("span").text());
1221
+ var value_array = the_value.split(", ");
1222
+ if (value_array.length > 1)
1223
+ {
1224
+ var temp_line = "";
1225
+ jQuery.each(value_array, function (key, line)
1226
+ {
1227
+ var tab = (key == 0) ? 0 : 25;
1228
+ temp_line = temp_line + jQuery.getSystemReport("", tab, " ", "f") + line + "\n";
1229
+ });
1230
+ the_value = temp_line;
1231
+ }
1232
+ report = report + "" + the_name + the_value + "\n";
1233
+ });
1234
+ });
1235
+ try
1236
+ {
1237
+ jQuery("#ux_system_information").slideDown();
1238
+ jQuery("#ux_system_information textarea").val(report).focus().select();
1239
+ return false;
1240
+ } catch (e)
1241
+ {
1242
+ }
1243
+ return false;
1244
+ });
1245
+ jQuery("#ux_btn_system_information").click(function ()
1246
+ {
1247
+ if (jQuery("#ux_btn_system_information").text() === "Close System Information!")
1248
+ {
1249
+ jQuery("#ux_system_information").slideUp();
1250
+ jQuery("#ux_btn_system_information").html("Get System Information!");
1251
+ } else
1252
+ {
1253
+ jQuery("#ux_btn_system_information").html("Close System Information!");
1254
+ jQuery("#ux_btn_system_information").removeClass("system-information");
1255
+ jQuery("#ux_btn_system_information").addClass("close-information");
1256
+ }
1257
+ });
1258
+ load_sidebar_content_mail_bank();
1259
+ <?php
1260
+ }
1261
+ break;
1262
 
1263
+ case "mb_upgrade":
1264
+ ?>
1265
+ jQuery("#ux_li_upgrade").addClass("active");
1266
+ var sidebar_load_interval = setInterval(load_sidebar_content_mail_bank, 1000);
1267
+ setTimeout(function ()
1268
+ {
1269
+ clearInterval(sidebar_load_interval);
1270
+ }, 5000);
1271
+ load_sidebar_content_mail_bank();
1272
+ <?php
1273
+ break;
1274
+ }
1275
  }
1276
  ?>
1277
  </script>
includes/google-authentication-mail-bank.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
@@ -10,64 +9,58 @@ if (file_exists(MAIL_BANK_DIR_PATH . "includes/token-manager-mail-bank.php")) {
10
  if (!class_exists("google_authentication_mail_bank")) {
11
 
12
  class google_authentication_mail_bank extends token_manager_mail_bank {
13
-
14
  public
15
- $client_id,
16
- $client_secret,
17
- $callback_uri,
18
- $sender_email,
19
- $token_url;
20
-
21
  // Constructor
22
  public function __construct($client_id, $client_secret, mail_bank_manage_token $authorization_token, $callback_uri, $sender_email) {
23
- $this->sender_email = $sender_email;
24
- $this->client_id = $client_id;
25
- $this->client_secret = $client_secret;
26
- $this->callback_uri = $callback_uri;
27
- $this->token_url = "https://www.googleapis.com/oauth2/v3/token";
28
- parent::__construct($client_id, $client_secret, $authorization_token, $callback_uri);
29
  }
30
-
31
  // This function request the token code
32
  public function get_token_code($state_id) {
33
- $configurations = array(
34
- "response_type" => "code",
35
- "redirect_uri" => urlencode($this->callback_uri),
36
- "client_id" => $this->client_id,
37
- "scope" => urlencode("https://mail.google.com/"),
38
- "access_type" => "offline",
39
- "approval_prompt" => "force",
40
- "state" => $state_id,
41
- "login_hint" => $this->sender_email
42
- );
43
 
44
- echo $oauth_url = "https://accounts.google.com/o/oauth2/auth?" . build_query($configurations);
45
  }
46
-
47
  // This function process the token code
48
  public function process_token_Code($state_id) {
49
- if (isset($_REQUEST["access_token"])) {
50
- $code = esc_attr($_REQUEST["access_token"]);
51
- $configurations = array(
52
- "client_id" => $this->client_id,
53
- "client_secret" => $this->client_secret,
54
- "grant_type" => "authorization_code",
55
- "redirect_uri" => $this->callback_uri,
56
- "code" => $code
57
- );
58
- $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($this->token_url, $configurations);
59
- $test_error = $this->process_response($response);
60
- if (isset($test_error->error)) {
61
- return $test_error;
62
- } else {
63
- $this->get_authorization_token()->set_vendorname_mail_bank("google");
64
- return "1";
65
- }
66
- } else {
67
- return false;
68
- }
69
  }
70
-
71
  }
72
-
73
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
9
  if (!class_exists("google_authentication_mail_bank")) {
10
 
11
  class google_authentication_mail_bank extends token_manager_mail_bank {
 
12
  public
13
+ $client_id,
14
+ $client_secret,
15
+ $callback_uri,
16
+ $sender_email,
17
+ $token_url;
 
18
  // Constructor
19
  public function __construct($client_id, $client_secret, mail_bank_manage_token $authorization_token, $callback_uri, $sender_email) {
20
+ $this->sender_email = $sender_email;
21
+ $this->client_id = $client_id;
22
+ $this->client_secret = $client_secret;
23
+ $this->callback_uri = $callback_uri;
24
+ $this->token_url = "https://www.googleapis.com/oauth2/v3/token";
25
+ parent::__construct($client_id, $client_secret, $authorization_token, $callback_uri);
26
  }
 
27
  // This function request the token code
28
  public function get_token_code($state_id) {
29
+ $configurations = array(
30
+ "response_type" => "code",
31
+ "redirect_uri" => urlencode($this->callback_uri),
32
+ "client_id" => $this->client_id,
33
+ "scope" => urlencode("https://mail.google.com/"),
34
+ "access_type" => "offline",
35
+ "approval_prompt" => "force",
36
+ "state" => $state_id,
37
+ "login_hint" => $this->sender_email
38
+ );
39
 
40
+ echo $oauth_url = "https://accounts.google.com/o/oauth2/auth?" . build_query($configurations);
41
  }
 
42
  // This function process the token code
43
  public function process_token_Code($state_id) {
44
+ if (isset($_REQUEST["access_token"])) {
45
+ $code = esc_attr($_REQUEST["access_token"]);
46
+ $configurations = array(
47
+ "client_id" => $this->client_id,
48
+ "client_secret" => $this->client_secret,
49
+ "grant_type" => "authorization_code",
50
+ "redirect_uri" => $this->callback_uri,
51
+ "code" => $code
52
+ );
53
+ $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($this->token_url, $configurations);
54
+ $test_error = $this->process_response($response);
55
+ if (isset($test_error->error)) {
56
+ return $test_error;
57
+ } else {
58
+ $this->get_authorization_token()->set_vendorname_mail_bank("google");
59
+ return "1";
60
+ }
61
+ } else {
62
+ return false;
63
+ }
64
  }
 
65
  }
 
66
  }
includes/header.php CHANGED
@@ -15,8 +15,8 @@ if (!is_user_logged_in()) {
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
- $access_granted = true;
19
- break;
20
  }
21
  }
22
  if (!$access_granted) {
@@ -26,14 +26,14 @@ if (!is_user_logged_in()) {
26
  <div class="page-container">
27
  <div id="manage_messages" style="display:none;">
28
  <div class="radio">
29
- <input type="radio" value="success" checked="checked" />
30
  </div>
31
  </div>
32
  <div id="toastTypeGroup_error" style="display:none;">
33
  <div class="radio">
34
- <input type="radio" value="error" checked=""/>
35
  </div>
36
  </div>
37
- <?php
38
  }
39
  }
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
  }
21
  }
22
  if (!$access_granted) {
26
  <div class="page-container">
27
  <div id="manage_messages" style="display:none;">
28
  <div class="radio">
29
+ <input type="radio" value="success" checked="checked" />
30
  </div>
31
  </div>
32
  <div id="toastTypeGroup_error" style="display:none;">
33
  <div class="radio">
34
+ <input type="radio" value="error" checked=""/>
35
  </div>
36
  </div>
37
+ <?php
38
  }
39
  }
includes/mail-bank-configuration-provider.php CHANGED
@@ -1,26 +1,22 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
6
  if (!class_exists("mail_bank_configuration_provider")) {
7
 
8
  class mail_bank_configuration_provider {
9
-
10
  public function get_configuration_settings() {
11
- global $wpdb;
12
- $email_configuration_data = $wpdb->get_var
13
- (
14
- $wpdb->prepare
15
- (
16
- "SELECT meta_value FROM " . mail_bank_meta() .
17
- " WHERE meta_key=%s", "email_configuration"
18
- )
19
- );
20
- $email_configuration_array = maybe_unserialize($email_configuration_data);
21
- return $email_configuration_array;
22
  }
23
-
24
  }
25
-
26
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
5
  if (!class_exists("mail_bank_configuration_provider")) {
6
 
7
  class mail_bank_configuration_provider {
 
8
  public function get_configuration_settings() {
9
+ global $wpdb;
10
+ $email_configuration_data = $wpdb->get_var
11
+ (
12
+ $wpdb->prepare
13
+ (
14
+ "SELECT meta_value FROM " . mail_bank_meta() .
15
+ " WHERE meta_key=%s", "email_configuration"
16
+ )
17
+ );
18
+ $email_configuration_array = maybe_unserialize($email_configuration_data);
19
+ return $email_configuration_array;
20
  }
 
21
  }
 
22
  }
includes/mail-bank-configure-transport.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
@@ -10,54 +9,50 @@ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-configuration-provider.
10
  if (!class_exists("mail_bank_configure_transport")) {
11
 
12
  class mail_bank_configure_transport {
13
-
14
  public function configure_plain_transport() {
15
- $obj_mail_bank_configuration_provider = new mail_bank_configuration_provider();
16
- $configuration_setting = $obj_mail_bank_configuration_provider->get_configuration_settings();
17
-
18
- $port = $configuration_setting["port"];
19
- $enc_type = $configuration_setting["enc_type"];
20
-
21
- //set configurations
22
- $config = array(
23
- "port" => $port
24
- );
25
- if ($enc_type != "none") {
26
- $config["ssl"] = $enc_type;
27
- }
28
-
29
- $config["auth"] = $configuration_setting["auth_type"];
30
- $config["username"] = $configuration_setting["username"];
31
- $config["password"] = base64_decode($configuration_setting["password"]);
32
- return $config;
33
  }
34
-
35
  public function configure_oauth_transport() {
36
- $obj_mail_bank_configuration_provider = new mail_bank_configuration_provider();
37
- $configuration_setting = $obj_mail_bank_configuration_provider->get_configuration_settings();
38
- $sender_email = $configuration_setting["email_address"];
39
-
40
- //set vendor name for yahoo
41
- $vendor = "";
42
- if (mail_bank_zend_mail_helper::email_domains_mail_bank($configuration_setting["hostname"], "yahoo.com")) {
43
- $vendor = "yahoo";
44
- }
45
-
46
- $obj_mail_bank_manage_token = mail_bank_manage_token::get_instance();
47
- // create oauth2 string
48
- $xoauth2_request = base64_encode(sprintf("user=%s\1auth=Bearer %s\1%s\1", $sender_email, $obj_mail_bank_manage_token->retrieve_access_token_mail_bank(), $vendor));
49
-
50
- //set configurations
51
- $config = array(
52
- "ssl" => $configuration_setting["enc_type"],
53
- "port" => $configuration_setting["port"],
54
- "auth" => "oauth2",
55
- "xoauth2_request" => $xoauth2_request
56
- );
57
-
58
- return $config;
59
  }
60
-
61
  }
62
-
63
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
9
  if (!class_exists("mail_bank_configure_transport")) {
10
 
11
  class mail_bank_configure_transport {
 
12
  public function configure_plain_transport() {
13
+ $obj_mail_bank_configuration_provider = new mail_bank_configuration_provider();
14
+ $configuration_setting = $obj_mail_bank_configuration_provider->get_configuration_settings();
15
+
16
+ $port = $configuration_setting["port"];
17
+ $enc_type = $configuration_setting["enc_type"];
18
+
19
+ //set configurations
20
+ $config = array(
21
+ "port" => $port
22
+ );
23
+ if ($enc_type != "none") {
24
+ $config["ssl"] = $enc_type;
25
+ }
26
+
27
+ $config["auth"] = $configuration_setting["auth_type"];
28
+ $config["username"] = $configuration_setting["username"];
29
+ $config["password"] = base64_decode($configuration_setting["password"]);
30
+ return $config;
31
  }
 
32
  public function configure_oauth_transport() {
33
+ $obj_mail_bank_configuration_provider = new mail_bank_configuration_provider();
34
+ $configuration_setting = $obj_mail_bank_configuration_provider->get_configuration_settings();
35
+ $sender_email = $configuration_setting["email_address"];
36
+
37
+ //set vendor name for yahoo
38
+ $vendor = "";
39
+ if (mail_bank_zend_mail_helper::email_domains_mail_bank($configuration_setting["hostname"], "yahoo.com")) {
40
+ $vendor = "yahoo";
41
+ }
42
+
43
+ $obj_mail_bank_manage_token = mail_bank_manage_token::get_instance();
44
+ // create oauth2 string
45
+ $xoauth2_request = base64_encode(sprintf("user=%s\1auth=Bearer %s\1%s\1", $sender_email, $obj_mail_bank_manage_token->retrieve_access_token_mail_bank(), $vendor));
46
+
47
+ //set configurations
48
+ $config = array(
49
+ "ssl" => $configuration_setting["enc_type"],
50
+ "port" => $configuration_setting["port"],
51
+ "auth" => "oauth2",
52
+ "xoauth2_request" => $xoauth2_request
53
+ );
54
+
55
+ return $config;
56
  }
 
57
  }
 
58
  }
includes/mail-bank-email-log.php CHANGED
@@ -1,129 +1,118 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
6
  if (!class_exists("mail_bank_email_log")) {
7
 
8
  class mail_bank_email_log {
9
-
10
  public $to_recipients;
11
  public $subject;
12
  public $body;
13
-
14
  }
15
-
16
  }
17
 
18
  if (!class_exists("mail_bank_email_log_writter")) {
19
 
20
  // This class is used to create logs.
21
  class mail_bank_email_log_writter {
22
-
23
  // This function is used to write success logs.
24
  public function mb_success_log($email_logs, $email_message, $debug_mode, $email_configuration_settings, $obj_mail_bank_manage_email) {
25
- $status = "Sent";
26
- $subject = $email_message->mb_get_subject();
27
- $this->mb_create_email_log($email_logs, $email_message);
28
- $this->mb_email_log($email_logs, $debug_mode, $status, $email_configuration_settings, $obj_mail_bank_manage_email, $email_message);
29
  }
30
-
31
  // This function is used to write failure logs.
32
  public function mb_failure_log($email_logs, $email_message = null, $debug_mode, $email_configuration_settings, $obj_mail_bank_manage_email) {
33
- $status = "Not Sent";
34
- $this->mb_create_email_log($email_logs, $email_message);
35
- $this->mb_email_log($email_logs, $debug_mode, $status, $email_configuration_settings, $obj_mail_bank_manage_email, $email_message);
36
  }
37
-
38
  // This function writes the Email Logs.
39
  public function mb_email_log($email_logs, $debug_mode, $status, $email_configuration_settings, $obj_mail_bank_manage_email, $message) {
40
- $sender = $message->get_email_address_mail_bank();
41
-
42
- $sender_email = $email_configuration_settings["from_email_configuration"] == "override" ? $email_configuration_settings["sender_email"] : $sender->mb_get_email();
43
- $sender_name = $email_configuration_settings["sender_name_configuration"] == "override" ? $email_configuration_settings["sender_name"] : $sender->mb_get_name();
44
-
45
- $cc_recipients = $obj_mail_bank_manage_email->mb_get_cc_recipients();
46
- $bcc_recipients = $obj_mail_bank_manage_email->mb_get_bcc_recipients();
47
- $cc_address = "";
48
- if ($email_configuration_settings["cc"] == "") {
49
- $cc_array = array();
50
- foreach ($cc_recipients as $recipient) {
51
- array_push($cc_array, $recipient->email);
52
- }
53
- $cc_address = implode(",", $cc_array);
54
- } else {
55
- $cc_address = $email_configuration_settings["cc"];
56
- }
57
- $bcc_address = "";
58
- if ($email_configuration_settings["bcc"] == "") {
59
- $bcc_array = array();
60
- foreach ($bcc_recipients as $recipient) {
61
- array_push($bcc_array, $recipient->email);
62
- }
63
- $bcc_address = implode(",", $bcc_array);
64
- } else {
65
- $bcc_address = $email_configuration_settings["bcc"];
66
- }
67
-
68
- $email_logs_data_array = array();
69
- $email_logs_data_array["email_to"] = $email_logs->to_recipients;
70
- $email_logs_data_array["cc"] = $cc_address;
71
- $email_logs_data_array["bcc"] = $bcc_address;
72
- $email_logs_data_array["subject"] = $email_logs->subject;
73
- $email_logs_data_array["content"] = $email_logs->body;
74
- $email_logs_data_array["sender_name"] = $sender_name;
75
- $email_logs_data_array["sender_email"] = $sender_email;
76
- if ($debug_mode == "enable") {
77
- $email_logs_data_array["debug_mode"] = $debug_mode;
78
- $email_logs_data_array["debugging_output"] = get_option("mail_bank_mail_status");
79
- }
80
- $email_logs_data_array["timestamp"] = MAIL_BANK_LOCAL_TIME;
81
- $email_logs_data_array["status"] = $status;
82
- global $wpdb;
83
- $email_logs_id = $wpdb->get_var
84
- (
85
- $wpdb->prepare
86
- (
87
- "SELECT id FROM " . mail_bank() .
88
- " WHERE type = %s", "email_logs"
89
- )
90
- );
91
-
92
- $email_logs_data = array();
93
- $email_logs_data["meta_id"] = $email_logs_id;
94
- $email_logs_data["meta_key"] = "email_logs";
95
- $email_logs_data["meta_value"] = serialize($email_logs_data_array);
96
- $wpdb->insert(mail_bank_meta(), $email_logs_data);
97
  }
98
-
99
  // This function is used to create email logs
100
  public function mb_create_email_log($email_logs, mail_bank_manage_email $email_message = null) {
101
- if ($email_message) {
102
- $email_logs->to_recipients = $this->mb_flat_emails($email_message->mb_get_to_recipients());
103
- $email_logs->subject = $email_message->mb_get_subject();
104
- $email_logs->body = $email_message->mb_get_body();
105
- }
106
- return $email_logs;
107
  }
108
-
109
  // This function creates a readable "TO" entry based on the recipient header
110
  public static function mb_flat_emails(array $addresses) {
111
- $flat = "";
112
- $count = 0;
113
- foreach ($addresses as $address) {
114
- if ($count >= 3) {
115
- $flat .= sprintf('.. +%d more', sizeof($addresses) - $count);
116
- break;
117
- }
118
- if ($count > 0) {
119
- $flat .= ', ';
120
- }
121
- $flat .= $address->mb_email_format();
122
- $count ++;
123
- }
124
- return $flat;
125
  }
126
-
127
  }
128
-
129
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
5
  if (!class_exists("mail_bank_email_log")) {
6
 
7
  class mail_bank_email_log {
 
8
  public $to_recipients;
9
  public $subject;
10
  public $body;
 
11
  }
 
12
  }
13
 
14
  if (!class_exists("mail_bank_email_log_writter")) {
15
 
16
  // This class is used to create logs.
17
  class mail_bank_email_log_writter {
 
18
  // This function is used to write success logs.
19
  public function mb_success_log($email_logs, $email_message, $debug_mode, $email_configuration_settings, $obj_mail_bank_manage_email) {
20
+ $status = "Sent";
21
+ $subject = $email_message->mb_get_subject();
22
+ $this->mb_create_email_log($email_logs, $email_message);
23
+ $this->mb_email_log($email_logs, $debug_mode, $status, $email_configuration_settings, $obj_mail_bank_manage_email, $email_message);
24
  }
 
25
  // This function is used to write failure logs.
26
  public function mb_failure_log($email_logs, $email_message = null, $debug_mode, $email_configuration_settings, $obj_mail_bank_manage_email) {
27
+ $status = "Not Sent";
28
+ $this->mb_create_email_log($email_logs, $email_message);
29
+ $this->mb_email_log($email_logs, $debug_mode, $status, $email_configuration_settings, $obj_mail_bank_manage_email, $email_message);
30
  }
 
31
  // This function writes the Email Logs.
32
  public function mb_email_log($email_logs, $debug_mode, $status, $email_configuration_settings, $obj_mail_bank_manage_email, $message) {
33
+ $sender = $message->get_email_address_mail_bank();
34
+
35
+ $sender_email = $email_configuration_settings["from_email_configuration"] == "override" ? $email_configuration_settings["sender_email"] : $sender->mb_get_email();
36
+ $sender_name = $email_configuration_settings["sender_name_configuration"] == "override" ? $email_configuration_settings["sender_name"] : $sender->mb_get_name();
37
+
38
+ $cc_recipients = $obj_mail_bank_manage_email->mb_get_cc_recipients();
39
+ $bcc_recipients = $obj_mail_bank_manage_email->mb_get_bcc_recipients();
40
+ $cc_address = "";
41
+ if ($email_configuration_settings["cc"] == "") {
42
+ $cc_array = array();
43
+ foreach ($cc_recipients as $recipient) {
44
+ array_push($cc_array, $recipient->email);
45
+ }
46
+ $cc_address = implode(",", $cc_array);
47
+ } else {
48
+ $cc_address = $email_configuration_settings["cc"];
49
+ }
50
+ $bcc_address = "";
51
+ if ($email_configuration_settings["bcc"] == "") {
52
+ $bcc_array = array();
53
+ foreach ($bcc_recipients as $recipient) {
54
+ array_push($bcc_array, $recipient->email);
55
+ }
56
+ $bcc_address = implode(",", $bcc_array);
57
+ } else {
58
+ $bcc_address = $email_configuration_settings["bcc"];
59
+ }
60
+
61
+ $email_logs_data_array = array();
62
+ $email_logs_data_array["email_to"] = $email_logs->to_recipients;
63
+ $email_logs_data_array["cc"] = $cc_address;
64
+ $email_logs_data_array["bcc"] = $bcc_address;
65
+ $email_logs_data_array["subject"] = $email_logs->subject;
66
+ $email_logs_data_array["content"] = $email_logs->body;
67
+ $email_logs_data_array["sender_name"] = $sender_name;
68
+ $email_logs_data_array["sender_email"] = $sender_email;
69
+ if ($debug_mode == "enable") {
70
+ $email_logs_data_array["debug_mode"] = $debug_mode;
71
+ $email_logs_data_array["debugging_output"] = get_option("mail_bank_mail_status");
72
+ }
73
+ $email_logs_data_array["timestamp"] = MAIL_BANK_LOCAL_TIME;
74
+ $email_logs_data_array["status"] = $status;
75
+ global $wpdb;
76
+ $email_logs_id = $wpdb->get_var
77
+ (
78
+ $wpdb->prepare
79
+ (
80
+ "SELECT id FROM " . mail_bank() .
81
+ " WHERE type = %s", "email_logs"
82
+ )
83
+ );
84
+
85
+ $email_logs_data = array();
86
+ $email_logs_data["meta_id"] = $email_logs_id;
87
+ $email_logs_data["meta_key"] = "email_logs";
88
+ $email_logs_data["meta_value"] = serialize($email_logs_data_array);
89
+ $wpdb->insert(mail_bank_meta(), $email_logs_data);
90
  }
 
91
  // This function is used to create email logs
92
  public function mb_create_email_log($email_logs, mail_bank_manage_email $email_message = null) {
93
+ if ($email_message) {
94
+ $email_logs->to_recipients = $this->mb_flat_emails($email_message->mb_get_to_recipients());
95
+ $email_logs->subject = $email_message->mb_get_subject();
96
+ $email_logs->body = $email_message->mb_get_body();
97
+ }
98
+ return $email_logs;
99
  }
 
100
  // This function creates a readable "TO" entry based on the recipient header
101
  public static function mb_flat_emails(array $addresses) {
102
+ $flat = "";
103
+ $count = 0;
104
+ foreach ($addresses as $address) {
105
+ if ($count >= 3) {
106
+ $flat .= sprintf('.. +%d more', sizeof($addresses) - $count);
107
+ break;
108
+ }
109
+ if ($count > 0) {
110
+ $flat .= ', ';
111
+ }
112
+ $flat .= $address->mb_email_format();
113
+ $count ++;
114
+ }
115
+ return $flat;
116
  }
 
117
  }
 
118
  }
includes/mail-bank-manage-email-address.php CHANGED
@@ -1,80 +1,68 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
6
  if (!class_exists("mail_bank_manage_email_address")) {
7
 
8
  class mail_bank_manage_email_address {
9
-
10
  public
11
- $name,
12
- $email;
13
-
14
  public function __construct($email, $name = null) {
15
- if (preg_match('/(.*)<(.+)>/', $email, $matches)) {
16
- if (count($matches) == 3) {
17
- $name = $matches [1];
18
- $email = $matches [2];
19
- }
20
- }
21
- $this->mb_set_email(trim($email));
22
- $this->mb_set_name(trim($name));
23
  }
24
-
25
  public function mb_get_name() {
26
- return $this->name;
27
  }
28
-
29
  public function mb_get_email() {
30
- return $this->email;
31
  }
32
-
33
  public function mb_email_format() {
34
- $name = $this->mb_get_name();
35
- if (!empty($name)) {
36
- return sprintf("%s <%s>", $this->mb_get_name(), $this->mb_get_email());
37
- } else {
38
- return sprintf("%s", $this->mb_get_email());
39
- }
40
  }
41
-
42
  public function mb_set_name($name) {
43
- $this->name = $name;
44
  }
45
-
46
  public function mb_set_email($email) {
47
- $this->email = $email;
48
  }
49
-
50
  // This function validate the email address.
51
  public function validate_email_contents_mail_bank($description = "") {
52
- if (!mail_bank_zend_mail_helper::email_validation_mail_bank($this->email)) {
53
- if (empty($description)) {
54
- $message = sprintf('Invalid e-mail address "%s"', $this->email);
55
- } else {
56
- $message = sprintf('Invalid "%1$s" e-mail address "%2$s"', $description, $this->email);
57
- }
58
- throw new Exception($message);
59
- }
60
  }
61
-
62
  // This function takes a string or array of addresses and return an array.
63
  public static function convert_string_to_array_mail_bank($emails) {
64
- if (!is_array($emails)) {
65
- $t = explode(",", $emails);
66
- $emails = array();
67
- foreach ($t as $k => $v) {
68
- if (strpos($v, ',') !== false) {
69
- $t[$k] = '"' . str_replace(' <', '" <', $v);
70
- }
71
- $simplified_email = trim($t [$k]);
72
- array_push($emails, $simplified_email);
73
- }
74
- }
75
- return $emails;
76
  }
77
-
78
  }
79
-
80
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
5
  if (!class_exists("mail_bank_manage_email_address")) {
6
 
7
  class mail_bank_manage_email_address {
 
8
  public
9
+ $name,
10
+ $email;
 
11
  public function __construct($email, $name = null) {
12
+ if (preg_match('/(.*)<(.+)>/', $email, $matches)) {
13
+ if (count($matches) == 3) {
14
+ $name = $matches [1];
15
+ $email = $matches [2];
16
+ }
17
+ }
18
+ $this->mb_set_email(trim($email));
19
+ $this->mb_set_name(trim($name));
20
  }
 
21
  public function mb_get_name() {
22
+ return $this->name;
23
  }
 
24
  public function mb_get_email() {
25
+ return $this->email;
26
  }
 
27
  public function mb_email_format() {
28
+ $name = $this->mb_get_name();
29
+ if (!empty($name)) {
30
+ return sprintf("%s <%s>", $this->mb_get_name(), $this->mb_get_email());
31
+ } else {
32
+ return sprintf("%s", $this->mb_get_email());
33
+ }
34
  }
 
35
  public function mb_set_name($name) {
36
+ $this->name = $name;
37
  }
 
38
  public function mb_set_email($email) {
39
+ $this->email = $email;
40
  }
 
41
  // This function validate the email address.
42
  public function validate_email_contents_mail_bank($description = "") {
43
+ if (!mail_bank_zend_mail_helper::email_validation_mail_bank($this->email)) {
44
+ if (empty($description)) {
45
+ $message = sprintf('Invalid e-mail address "%s"', $this->email);
46
+ } else {
47
+ $message = sprintf('Invalid "%1$s" e-mail address "%2$s"', $description, $this->email);
48
+ }
49
+ throw new Exception($message);
50
+ }
51
  }
 
52
  // This function takes a string or array of addresses and return an array.
53
  public static function convert_string_to_array_mail_bank($emails) {
54
+ if (!is_array($emails)) {
55
+ $t = explode(",", $emails);
56
+ $emails = array();
57
+ foreach ($t as $k => $v) {
58
+ if (strpos($v, ',') !== false) {
59
+ $t[$k] = '"' . str_replace(' <', '" <', $v);
60
+ }
61
+ $simplified_email = trim($t [$k]);
62
+ array_push($emails, $simplified_email);
63
+ }
64
+ }
65
+ return $emails;
66
  }
 
67
  }
 
68
  }
includes/mail-bank-manage-email.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
@@ -7,37 +6,32 @@ if (!class_exists("mail_bank_manage_email")) {
7
  if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-email-address.php")) {
8
  require_once MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-email-address.php";
9
  }
10
-
11
  class mail_bank_manage_email {
12
-
13
  const EOL = "\r\n";
14
-
15
  public
16
- $from,
17
- $reply_to,
18
- $to_recipients,
19
- $cc_recipients,
20
- $bcc_recipients,
21
- $subject,
22
- $body,
23
- $body_textpart,
24
- $body_htmlpart,
25
- $headers,
26
- $attachments,
27
- $date,
28
- $message_id,
29
- $content_type,
30
- $charset,
31
- $boundary;
32
-
33
  // Constructor
34
  function __construct() {
35
- $this->headers = array();
36
- $this->to_recipients = array();
37
- $this->cc_recipients = array();
38
- $this->bcc_recipients = array();
39
  }
40
-
41
  // public static function getinstance()
42
  // {
43
  // static $inst = null;
@@ -49,328 +43,290 @@ if (!class_exists("mail_bank_manage_email")) {
49
  // }
50
 
51
  public function check_email_body_parts_mail_bank() {
52
- return empty($this->body_textpart) && empty($this->body_htmlpart);
53
  }
54
-
55
  public function validate_email_contents_mail_bank($transport) {
56
- $this->validate_email_headers_mail_bank();
57
  }
58
-
59
  // This function create body parts based on content type
60
  public function createBodyParts() {
61
- if (false !== stripos($this->content_type, "multipart") && !empty($this->boundary)) {
62
- $this->content_type = sprintf("%s;\r\n\t boundary=\"%s\"", $this->content_type, $this->mb_get_boundary());
63
- }
64
-
65
- $body = $this->mb_get_body();
66
- $content_type = $this->mb_get_content_type();
67
- if ($content_type == "") {
68
- $content_type = apply_filters("wp_mail_content_type", $content_type);
69
- }
70
- if (substr($content_type, 0, 9) === "text/html") {
71
- $this->mb_set_body_htmlPart($body);
72
- } else if (substr($content_type, 0, 10) === "text/plain") {
73
- $this->mb_set_body_textpart($body);
74
- } else if (substr($content_type, 0, 21) === "multipart/alternative") {
75
- $arr = explode(PHP_EOL, $body);
76
- $textBody = "";
77
- $htmlBody = "";
78
- $mode = "";
79
- foreach ($arr as $s) {
80
- if (substr($s, 0, 25) === "Content-Type: text/plain;") {
81
- $mode = "foundText";
82
- } else if (substr($s, 0, 24) === "Content-Type: text/html;") {
83
- $mode = "foundHtml";
84
- } else if ($mode == "textReading") {
85
- $textBody .= $s;
86
- } else if ($mode == "htmlReading") {
87
- $htmlBody .= $s;
88
- } else if ($mode == "foundText") {
89
- $trim = trim($s);
90
- if (empty($trim)) {
91
- $mode = "textReading";
92
- }
93
- } else if ($mode == "foundHtml") {
94
- $trim = trim($s);
95
- if (empty($trim)) {
96
- $mode = "htmlReading";
97
- }
98
- }
99
- }
100
- $this->mb_set_body_htmlPart($htmlBody);
101
- $this->mb_set_body_textpart($textBody);
102
- } else {
103
- $this->mb_set_body_textpart($body);
104
- }
105
  }
106
-
107
  // This function validate email headers
108
  public function validate_email_headers_mail_bank() {
109
- if (isset($this->reply_to)) {
110
- $this->mb_get_reply_to()->validate_email_contents_mail_bank("Reply-To");
111
- }
112
 
113
- // validate the from address
114
- $this->get_email_address_mail_bank()->validate_email_contents_mail_bank("From");
115
 
116
- // validate the to recipients
117
- foreach ((array) $this->mb_get_to_recipients() as $to_address) {
118
- $to_address->validate_email_contents_mail_bank("To");
119
- }
120
 
121
- // validate the cc recipients
122
- foreach ((array) $this->mb_get_cc_recipients() as $cc_address) {
123
- $cc_address->validate_email_contents_mail_bank("Cc");
124
- }
125
 
126
- // validate the bcc recipients
127
- foreach ((array) $this->mb_get_bcc_recipients() as $bcc_address) {
128
- $bcc_address->validate_email_contents_mail_bank("Bcc");
129
- }
130
  }
131
-
132
  public function get_email_address_mail_bank() {
133
- return $this->from;
134
  }
135
-
136
  // Get the charset.
137
  public function mb_get_charset() {
138
- return $this->charset;
139
  }
140
-
141
  // Set the charset
142
  public function mb_set_charset($charset) {
143
- $this->charset = $charset;
144
  }
145
-
146
  // Get the content type
147
  public function mb_get_content_type() {
148
- return $this->content_type;
149
  }
150
-
151
  public function mb_set_content_type($content_type) {
152
- $this->content_type = $content_type;
153
  }
154
-
155
  public function mb_addto($to) {
156
- $this->mb_add_recipients($this->to_recipients, $to);
157
  }
158
-
159
  public function mb_add_cc($cc) {
160
- $this->mb_add_recipients($this->cc_recipients, $cc);
161
  }
162
-
163
  public function mb_add_bcc($bcc) {
164
- $this->mb_add_recipients($this->bcc_recipients, $bcc);
165
  }
166
-
167
  public function mb_add_recipients(&$all_recipients, $recipients) {
168
- if (!empty($recipients)) {
169
- $recipients = mail_bank_manage_email_address::convert_string_to_array_mail_bank($recipients);
170
- foreach ($recipients as $recipient) {
171
- if (!empty($recipient)) {
172
- array_push($all_recipients, new mail_bank_manage_email_address($recipient));
173
- }
174
- }
175
- }
176
  }
177
-
178
  // This function add headers
179
  public function mb_add_headers($headers) {
180
- if (!is_array($headers)) {
181
- $headers = explode("\n", str_replace("\r\n", "\n", $headers));
182
- }
183
- foreach ($headers as $header) {
184
- if (!empty($header)) {
185
- if (strpos($header, ":") === false) {
186
- if (false !== stripos($header, "boundary=")) {
187
- $parts = preg_split("/boundary=/i", trim($header));
188
- $this->boundary = trim(str_replace(array(
189
- "'",
190
- '"'
191
- ), '', $parts [1]));
192
- }
193
- continue;
194
- }
195
- list($name, $content) = explode(":", trim($header), 2);
196
- $this->mb_process_header($name, $content);
197
- }
198
- }
199
  }
200
-
201
  // This function process headers
202
  public function mb_process_header($name, $content) {
203
- $name = trim($name);
204
- $content = trim($content);
205
- switch (strtolower($name)) {
206
- case "content-type" :
207
- if (strpos($content, ";") !== false) {
208
- list($type, $charset) = explode(";", $content);
209
- $this->mb_set_content_type(trim($type));
210
- if (false !== stripos($charset, "charset=")) {
211
- $charset = trim(str_replace(array(
212
- 'charset=',
213
- '"'
214
- ), '', $charset));
215
- } elseif (false !== stripos($charset, "boundary=")) {
216
- $this->boundary = trim(str_replace(array(
217
- 'BOUNDARY=',
218
- 'boundary=',
219
- '"'
220
- ), '', $charset));
221
- $charset = '';
222
- }
223
- if (!empty($charset)) {
224
- $this->mb_set_charset($charset);
225
- }
226
- } else {
227
- $this->mb_set_content_type(trim($content));
228
- }
229
- break;
230
- case "to" :
231
- $this->mb_addto($content);
232
- break;
233
- case "cc" :
234
- $this->mb_add_cc($content);
235
- break;
236
- case "bcc" :
237
- $this->mb_add_bcc($content);
238
- break;
239
- case "from" :
240
- $this->mb_set_from($content);
241
- break;
242
- case "subject" :
243
- $this->mb_set_subject($content);
244
- break;
245
- case "reply-to" :
246
- $this->mb_set_replyto($content);
247
- break;
248
- case "sender" :
249
- break;
250
- case "return-path" :
251
- break;
252
- case "date" :
253
- $this->mb_set_date($content);
254
- break;
255
- case "message-id" :
256
- $this->mb_set_messageid($content);
257
- break;
258
- default :
259
- array_push($this->headers, array(
260
- "name" => $name,
261
- "content" => $content
262
- ));
263
- break;
264
- }
265
  }
266
-
267
  // Add attachments to the message
268
  public function mb_add_attachments_to_mail(mail_bank_Zend_Mail $mail) {
269
- $attachments = $this->attachments;
270
- if (!is_array($attachments)) {
271
- $attributes_array = explode(PHP_EOL, $attachments);
272
- } else {
273
- $attributes_array = $attachments;
274
- }
275
- foreach ($attributes_array as $file) {
276
- if (file_exists($file)) {
277
- $at = new mail_bank_Zend_Mime_Part(file_get_contents($file));
278
- $at->disposition = mail_bank_Zend_Mime::DISPOSITION_ATTACHMENT;
279
- $at->encoding = mail_bank_Zend_Mime::ENCODING_BASE64;
280
- $at->filename = basename($file);
281
- $mail->addAttachment($at);
282
- }
283
- }
284
  }
285
-
286
  function mb_set_body($body) {
287
- $this->body = $body;
288
  }
289
-
290
  function mb_set_body_textpart($body_textpart) {
291
- $this->body_textpart = $body_textpart;
292
  }
293
-
294
  function mb_set_body_htmlPart($body_htmlpart) {
295
- $this->body_htmlpart = $body_htmlpart;
296
  }
297
-
298
  function mb_set_subject($subject) {
299
- $this->subject = $subject;
300
  }
301
-
302
  function mb_set_attachments($attachments) {
303
- $this->attachments = $attachments;
304
  }
305
-
306
  function mb_set_from($email, $name = null) {
307
- if (!empty($email)) {
308
- $this->from = new mail_bank_manage_email_address($email, $name);
309
- }
310
  }
311
-
312
  function mb_set_replyto($reply_to) {
313
- if (!empty($reply_to)) {
314
- $this->reply_to = new mail_bank_manage_email_address($reply_to);
315
- }
316
  }
317
-
318
  function mb_set_messageid($message_id) {
319
- $this->message_id = $message_id;
320
  }
321
-
322
  function mb_set_date($date) {
323
- $this->date = $date;
324
  }
325
-
326
  public function mb_get_headers() {
327
- return $this->headers;
328
  }
329
-
330
  public function mb_get_boundary() {
331
- return $this->boundary;
332
  }
333
-
334
  public function mb_get_to_recipients() {
335
- return $this->to_recipients;
336
  }
337
-
338
  public function mb_get_cc_recipients() {
339
- return $this->cc_recipients;
340
  }
341
-
342
  public function mb_get_bcc_recipients() {
343
- return $this->bcc_recipients;
344
  }
345
-
346
  public function mb_get_reply_to() {
347
- return $this->reply_to;
348
  }
349
-
350
  public function mb_get_date() {
351
- return $this->date;
352
  }
353
-
354
  public function mb_get_message_id() {
355
- return $this->message_id;
356
  }
357
-
358
  public function mb_get_subject() {
359
- return $this->subject;
360
  }
361
-
362
  public function mb_get_body() {
363
- return $this->body;
364
  }
365
-
366
  public function mb_get_body_textPart() {
367
- return $this->body_textpart;
368
  }
369
-
370
  public function mb_get_body_html_part() {
371
- return $this->body_htmlpart;
372
  }
373
-
374
  }
375
-
376
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
6
  if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-email-address.php")) {
7
  require_once MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-email-address.php";
8
  }
 
9
  class mail_bank_manage_email {
 
10
  const EOL = "\r\n";
 
11
  public
12
+ $from,
13
+ $reply_to,
14
+ $to_recipients,
15
+ $cc_recipients,
16
+ $bcc_recipients,
17
+ $subject,
18
+ $body,
19
+ $body_textpart,
20
+ $body_htmlpart,
21
+ $headers,
22
+ $attachments,
23
+ $date,
24
+ $message_id,
25
+ $content_type,
26
+ $charset,
27
+ $boundary;
 
28
  // Constructor
29
  function __construct() {
30
+ $this->headers = array();
31
+ $this->to_recipients = array();
32
+ $this->cc_recipients = array();
33
+ $this->bcc_recipients = array();
34
  }
 
35
  // public static function getinstance()
36
  // {
37
  // static $inst = null;
43
  // }
44
 
45
  public function check_email_body_parts_mail_bank() {
46
+ return empty($this->body_textpart) && empty($this->body_htmlpart);
47
  }
 
48
  public function validate_email_contents_mail_bank($transport) {
49
+ $this->validate_email_headers_mail_bank();
50
  }
 
51
  // This function create body parts based on content type
52
  public function createBodyParts() {
53
+ if (false !== stripos($this->content_type, "multipart") && !empty($this->boundary)) {
54
+ $this->content_type = sprintf("%s;\r\n\t boundary=\"%s\"", $this->content_type, $this->mb_get_boundary());
55
+ }
56
+
57
+ $body = $this->mb_get_body();
58
+ $content_type = $this->mb_get_content_type();
59
+ if ($content_type == "") {
60
+ $content_type = apply_filters("wp_mail_content_type", $content_type);
61
+ }
62
+ if (substr($content_type, 0, 9) === "text/html") {
63
+ $this->mb_set_body_htmlPart($body);
64
+ } else if (substr($content_type, 0, 10) === "text/plain") {
65
+ $this->mb_set_body_textpart($body);
66
+ } else if (substr($content_type, 0, 21) === "multipart/alternative") {
67
+ $arr = explode(PHP_EOL, $body);
68
+ $textBody = "";
69
+ $htmlBody = "";
70
+ $mode = "";
71
+ foreach ($arr as $s) {
72
+ if (substr($s, 0, 25) === "Content-Type: text/plain;") {
73
+ $mode = "foundText";
74
+ } else if (substr($s, 0, 24) === "Content-Type: text/html;") {
75
+ $mode = "foundHtml";
76
+ } else if ($mode == "textReading") {
77
+ $textBody .= $s;
78
+ } else if ($mode == "htmlReading") {
79
+ $htmlBody .= $s;
80
+ } else if ($mode == "foundText") {
81
+ $trim = trim($s);
82
+ if (empty($trim)) {
83
+ $mode = "textReading";
84
+ }
85
+ } else if ($mode == "foundHtml") {
86
+ $trim = trim($s);
87
+ if (empty($trim)) {
88
+ $mode = "htmlReading";
89
+ }
90
+ }
91
+ }
92
+ $this->mb_set_body_htmlPart($htmlBody);
93
+ $this->mb_set_body_textpart($textBody);
94
+ } else {
95
+ $this->mb_set_body_textpart($body);
96
+ }
97
  }
 
98
  // This function validate email headers
99
  public function validate_email_headers_mail_bank() {
100
+ if (isset($this->reply_to)) {
101
+ $this->mb_get_reply_to()->validate_email_contents_mail_bank("Reply-To");
102
+ }
103
 
104
+ // validate the from address
105
+ $this->get_email_address_mail_bank()->validate_email_contents_mail_bank("From");
106
 
107
+ // validate the to recipients
108
+ foreach ((array) $this->mb_get_to_recipients() as $to_address) {
109
+ $to_address->validate_email_contents_mail_bank("To");
110
+ }
111
 
112
+ // validate the cc recipients
113
+ foreach ((array) $this->mb_get_cc_recipients() as $cc_address) {
114
+ $cc_address->validate_email_contents_mail_bank("Cc");
115
+ }
116
 
117
+ // validate the bcc recipients
118
+ foreach ((array) $this->mb_get_bcc_recipients() as $bcc_address) {
119
+ $bcc_address->validate_email_contents_mail_bank("Bcc");
120
+ }
121
  }
 
122
  public function get_email_address_mail_bank() {
123
+ return $this->from;
124
  }
 
125
  // Get the charset.
126
  public function mb_get_charset() {
127
+ return $this->charset;
128
  }
 
129
  // Set the charset
130
  public function mb_set_charset($charset) {
131
+ $this->charset = $charset;
132
  }
 
133
  // Get the content type
134
  public function mb_get_content_type() {
135
+ return $this->content_type;
136
  }
 
137
  public function mb_set_content_type($content_type) {
138
+ $this->content_type = $content_type;
139
  }
 
140
  public function mb_addto($to) {
141
+ $this->mb_add_recipients($this->to_recipients, $to);
142
  }
 
143
  public function mb_add_cc($cc) {
144
+ $this->mb_add_recipients($this->cc_recipients, $cc);
145
  }
 
146
  public function mb_add_bcc($bcc) {
147
+ $this->mb_add_recipients($this->bcc_recipients, $bcc);
148
  }
 
149
  public function mb_add_recipients(&$all_recipients, $recipients) {
150
+ if (!empty($recipients)) {
151
+ $recipients = mail_bank_manage_email_address::convert_string_to_array_mail_bank($recipients);
152
+ foreach ($recipients as $recipient) {
153
+ if (!empty($recipient)) {
154
+ array_push($all_recipients, new mail_bank_manage_email_address($recipient));
155
+ }
156
+ }
157
+ }
158
  }
 
159
  // This function add headers
160
  public function mb_add_headers($headers) {
161
+ if (!is_array($headers)) {
162
+ $headers = explode("\n", str_replace("\r\n", "\n", $headers));
163
+ }
164
+ foreach ($headers as $header) {
165
+ if (!empty($header)) {
166
+ if (strpos($header, ":") === false) {
167
+ if (false !== stripos($header, "boundary=")) {
168
+ $parts = preg_split("/boundary=/i", trim($header));
169
+ $this->boundary = trim(str_replace(array(
170
+ "'",
171
+ '"'
172
+ ), '', $parts [1]));
173
+ }
174
+ continue;
175
+ }
176
+ list($name, $content) = explode(":", trim($header), 2);
177
+ $this->mb_process_header($name, $content);
178
+ }
179
+ }
180
  }
 
181
  // This function process headers
182
  public function mb_process_header($name, $content) {
183
+ $name = trim($name);
184
+ $content = trim($content);
185
+ switch (strtolower($name)) {
186
+ case "content-type" :
187
+ if (strpos($content, ";") !== false) {
188
+ list($type, $charset) = explode(";", $content);
189
+ $this->mb_set_content_type(trim($type));
190
+ if (false !== stripos($charset, "charset=")) {
191
+ $charset = trim(str_replace(array(
192
+ 'charset=',
193
+ '"'
194
+ ), '', $charset));
195
+ } elseif (false !== stripos($charset, "boundary=")) {
196
+ $this->boundary = trim(str_replace(array(
197
+ 'BOUNDARY=',
198
+ 'boundary=',
199
+ '"'
200
+ ), '', $charset));
201
+ $charset = '';
202
+ }
203
+ if (!empty($charset)) {
204
+ $this->mb_set_charset($charset);
205
+ }
206
+ } else {
207
+ $this->mb_set_content_type(trim($content));
208
+ }
209
+ break;
210
+ case "to" :
211
+ $this->mb_addto($content);
212
+ break;
213
+ case "cc" :
214
+ $this->mb_add_cc($content);
215
+ break;
216
+ case "bcc" :
217
+ $this->mb_add_bcc($content);
218
+ break;
219
+ case "from" :
220
+ $this->mb_set_from($content);
221
+ break;
222
+ case "subject" :
223
+ $this->mb_set_subject($content);
224
+ break;
225
+ case "reply-to" :
226
+ $this->mb_set_replyto($content);
227
+ break;
228
+ case "sender" :
229
+ break;
230
+ case "return-path" :
231
+ break;
232
+ case "date" :
233
+ $this->mb_set_date($content);
234
+ break;
235
+ case "message-id" :
236
+ $this->mb_set_messageid($content);
237
+ break;
238
+ default :
239
+ array_push($this->headers, array(
240
+ "name" => $name,
241
+ "content" => $content
242
+ ));
243
+ break;
244
+ }
245
  }
 
246
  // Add attachments to the message
247
  public function mb_add_attachments_to_mail(mail_bank_Zend_Mail $mail) {
248
+ $attachments = $this->attachments;
249
+ if (!is_array($attachments)) {
250
+ $attributes_array = explode(PHP_EOL, $attachments);
251
+ } else {
252
+ $attributes_array = $attachments;
253
+ }
254
+ foreach ($attributes_array as $file) {
255
+ if (file_exists($file)) {
256
+ $at = new mail_bank_Zend_Mime_Part(file_get_contents($file));
257
+ $at->disposition = mail_bank_Zend_Mime::DISPOSITION_ATTACHMENT;
258
+ $at->encoding = mail_bank_Zend_Mime::ENCODING_BASE64;
259
+ $at->filename = basename($file);
260
+ $mail->addAttachment($at);
261
+ }
262
+ }
263
  }
 
264
  function mb_set_body($body) {
265
+ $this->body = $body;
266
  }
 
267
  function mb_set_body_textpart($body_textpart) {
268
+ $this->body_textpart = $body_textpart;
269
  }
 
270
  function mb_set_body_htmlPart($body_htmlpart) {
271
+ $this->body_htmlpart = $body_htmlpart;
272
  }
 
273
  function mb_set_subject($subject) {
274
+ $this->subject = $subject;
275
  }
 
276
  function mb_set_attachments($attachments) {
277
+ $this->attachments = $attachments;
278
  }
 
279
  function mb_set_from($email, $name = null) {
280
+ if (!empty($email)) {
281
+ $this->from = new mail_bank_manage_email_address($email, $name);
282
+ }
283
  }
 
284
  function mb_set_replyto($reply_to) {
285
+ if (!empty($reply_to)) {
286
+ $this->reply_to = new mail_bank_manage_email_address($reply_to);
287
+ }
288
  }
 
289
  function mb_set_messageid($message_id) {
290
+ $this->message_id = $message_id;
291
  }
 
292
  function mb_set_date($date) {
293
+ $this->date = $date;
294
  }
 
295
  public function mb_get_headers() {
296
+ return $this->headers;
297
  }
 
298
  public function mb_get_boundary() {
299
+ return $this->boundary;
300
  }
 
301
  public function mb_get_to_recipients() {
302
+ return $this->to_recipients;
303
  }
 
304
  public function mb_get_cc_recipients() {
305
+ return $this->cc_recipients;
306
  }
 
307
  public function mb_get_bcc_recipients() {
308
+ return $this->bcc_recipients;
309
  }
 
310
  public function mb_get_reply_to() {
311
+ return $this->reply_to;
312
  }
 
313
  public function mb_get_date() {
314
+ return $this->date;
315
  }
 
316
  public function mb_get_message_id() {
317
+ return $this->message_id;
318
  }
 
319
  public function mb_get_subject() {
320
+ return $this->subject;
321
  }
 
322
  public function mb_get_body() {
323
+ return $this->body;
324
  }
 
325
  public function mb_get_body_textPart() {
326
+ return $this->body_textpart;
327
  }
 
328
  public function mb_get_body_html_part() {
329
+ return $this->body_htmlpart;
330
  }
 
331
  }
 
332
  }
includes/mail-bank-manage-token.php CHANGED
@@ -1,85 +1,68 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
6
  if (!class_exists("mail_bank_manage_token")) {
7
 
8
  class mail_bank_manage_token {
9
-
10
  public
11
- $vendor_name,
12
- $access_token,
13
- $refresh_token,
14
- $expiry_time;
15
-
16
  public function __construct() {
17
- $this->get_token_mail_bank();
18
  }
19
-
20
  public static function get_instance() {
21
- static $instance = null;
22
- if ($instance === null) {
23
- $instance = new mail_bank_manage_token();
24
- }
25
- return $instance;
26
  }
27
-
28
  public function isValid() {
29
- $access_token = $this->retrieve_access_token_mail_bank();
30
- $refresh_token = $this->retrieve_refresh_token_mail_bank();
31
- return !(empty($access_token) || empty($refresh_token));
32
  }
33
-
34
  public function get_token_mail_bank() {
35
- $oauth_token = get_option("mail_bank_auth");
36
- $this->set_access_token_mail_bank($oauth_token["access_token"]);
37
- $this->set_refresh_token_mail_bank($oauth_token["refresh_token"]);
38
- $this->set_token_expirytime_mail_bank($oauth_token["auth_token_expires"]);
39
- $this->set_vendorname_mail_bank($oauth_token["vendor_name"]);
40
  }
41
-
42
  // Save the mail bank oauth token properties to the database
43
  public function save_token_mail_bank() {
44
- $oauth_token["access_token"] = $this->retrieve_access_token_mail_bank();
45
- $oauth_token["refresh_token"] = $this->retrieve_refresh_token_mail_bank();
46
- $oauth_token["auth_token_expires"] = $this->retrieve_token_expiry_time_mail_bank();
47
- $oauth_token["vendor_name"] = $this->get_vendor_mail_bank();
48
- update_option("mail_bank_auth", $oauth_token);
49
  }
50
-
51
  public function get_vendor_mail_bank() {
52
- return $this->vendor_name;
53
  }
54
-
55
  public function retrieve_token_expiry_time_mail_bank() {
56
- return $this->expiry_time;
57
  }
58
-
59
  public function retrieve_access_token_mail_bank() {
60
- return $this->access_token;
61
  }
62
-
63
  public function retrieve_refresh_token_mail_bank() {
64
- return $this->refresh_token;
65
  }
66
-
67
  public function set_vendorname_mail_bank($name) {
68
- $this->vendor_name = esc_html($name);
69
  }
70
-
71
  public function set_token_expirytime_mail_bank($time) {
72
- $this->expiry_time = esc_html($time);
73
  }
74
-
75
  public function set_access_token_mail_bank($token) {
76
- $this->access_token = esc_html($token);
77
  }
78
-
79
  public function set_refresh_token_mail_bank($token) {
80
- $this->refresh_token = esc_html($token);
81
  }
82
-
83
  }
84
-
85
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
5
  if (!class_exists("mail_bank_manage_token")) {
6
 
7
  class mail_bank_manage_token {
 
8
  public
9
+ $vendor_name,
10
+ $access_token,
11
+ $refresh_token,
12
+ $expiry_time;
 
13
  public function __construct() {
14
+ $this->get_token_mail_bank();
15
  }
 
16
  public static function get_instance() {
17
+ static $instance = null;
18
+ if ($instance === null) {
19
+ $instance = new mail_bank_manage_token();
20
+ }
21
+ return $instance;
22
  }
 
23
  public function isValid() {
24
+ $access_token = $this->retrieve_access_token_mail_bank();
25
+ $refresh_token = $this->retrieve_refresh_token_mail_bank();
26
+ return !(empty($access_token) || empty($refresh_token));
27
  }
 
28
  public function get_token_mail_bank() {
29
+ $oauth_token = get_option("mail_bank_auth");
30
+ $this->set_access_token_mail_bank($oauth_token["access_token"]);
31
+ $this->set_refresh_token_mail_bank($oauth_token["refresh_token"]);
32
+ $this->set_token_expirytime_mail_bank($oauth_token["auth_token_expires"]);
33
+ $this->set_vendorname_mail_bank($oauth_token["vendor_name"]);
34
  }
 
35
  // Save the mail bank oauth token properties to the database
36
  public function save_token_mail_bank() {
37
+ $oauth_token["access_token"] = $this->retrieve_access_token_mail_bank();
38
+ $oauth_token["refresh_token"] = $this->retrieve_refresh_token_mail_bank();
39
+ $oauth_token["auth_token_expires"] = $this->retrieve_token_expiry_time_mail_bank();
40
+ $oauth_token["vendor_name"] = $this->get_vendor_mail_bank();
41
+ update_option("mail_bank_auth", $oauth_token);
42
  }
 
43
  public function get_vendor_mail_bank() {
44
+ return $this->vendor_name;
45
  }
 
46
  public function retrieve_token_expiry_time_mail_bank() {
47
+ return $this->expiry_time;
48
  }
 
49
  public function retrieve_access_token_mail_bank() {
50
+ return $this->access_token;
51
  }
 
52
  public function retrieve_refresh_token_mail_bank() {
53
+ return $this->refresh_token;
54
  }
 
55
  public function set_vendorname_mail_bank($name) {
56
+ $this->vendor_name = esc_html($name);
57
  }
 
58
  public function set_token_expirytime_mail_bank($time) {
59
+ $this->expiry_time = esc_html($time);
60
  }
 
61
  public function set_access_token_mail_bank($token) {
62
+ $this->access_token = esc_html($token);
63
  }
 
64
  public function set_refresh_token_mail_bank($token) {
65
+ $this->refresh_token = esc_html($token);
66
  }
 
67
  }
 
68
  }
includes/mail-bank-register-transport.php CHANGED
@@ -1,23 +1,17 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
6
  if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-configure-transport.php")) {
7
  require_once MAIL_BANK_DIR_PATH . "includes/mail-bank-configure-transport.php";
8
  }
9
-
10
  class mail_bank_register_transport {
11
-
12
  public static $transport;
13
-
14
  public function listing_transport_mail_bank($instance) {
15
  self::$transport = $instance;
16
  }
17
-
18
  // This function is used to get the transport
19
  public function retrieve_mailertype_mail_bank() {
20
  return self::$transport;
21
  }
22
-
23
- }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
5
  if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-configure-transport.php")) {
6
  require_once MAIL_BANK_DIR_PATH . "includes/mail-bank-configure-transport.php";
7
  }
 
8
  class mail_bank_register_transport {
 
9
  public static $transport;
 
10
  public function listing_transport_mail_bank($instance) {
11
  self::$transport = $instance;
12
  }
 
13
  // This function is used to get the transport
14
  public function retrieve_mailertype_mail_bank() {
15
  return self::$transport;
16
  }
17
+ }
 
includes/mail-bank-send-mail.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
@@ -19,140 +18,130 @@ if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.
19
  if (!class_exists("mail_bank_send_mail")) {
20
 
21
  class mail_bank_send_mail {
22
-
23
  public
24
- $exception,
25
- $configuration_settings,
26
- $obj_mail_bank_register_transport;
27
-
28
  public function __construct() {
29
- $obj_mb_config_provider = new mail_bank_configuration_provider();
30
- $this->obj_mail_bank_register_transport = new mail_bank_register_transport();
31
- $this->configuration_settings = $obj_mb_config_provider->get_configuration_settings();
32
  }
33
-
34
  // This function is used to send the message and return the result.
35
  public function send_email_message_mail_bank($to, $subject, $message, $headers = "", $attachments = array(), $email_configuration_settings) {
36
- $mail_bank_manage_email = $this->build_message_mail_bank($to, $subject, $message, $headers, $attachments);
37
 
38
- $log = new mail_bank_email_log();
39
- $log->email_to = $to;
40
- $log->email_subject = $subject;
41
- $log->email_message = $message;
42
- $log->email_headers = $headers;
43
 
44
- return $this->get_message_content_mail_bank($mail_bank_manage_email, $log, $email_configuration_settings);
45
  }
46
-
47
  // This function is used to build a message based on the wordPress wp_mail parameters.
48
  public function build_message_mail_bank($to, $subject, $message, $headers, $attachments) {
49
- if (!is_array($attachments)) {
50
- $attachments = explode("\n", str_replace("\r\n", "\n", $attachments));
51
- }
52
 
53
- // Creates the message
54
- $mail_bank_manage_email = $this->create_message_mail_bank();
55
- $this->get_entire_message_content_mail_bank($mail_bank_manage_email, $to, $subject, $message, $headers, $attachments);
56
 
57
- // Return the message
58
- return $mail_bank_manage_email;
59
  }
60
-
61
  // This function is used to create the instance of mail_bank_manage_email.
62
  public function create_message_mail_bank() {
63
- $message = new mail_bank_manage_email();
64
- $transport = $this->obj_mail_bank_register_transport->retrieve_mailertype_mail_bank();
65
- $message->mb_set_from($this->configuration_settings["email_address"], html_entity_decode($this->configuration_settings["sender_name"], ENT_QUOTES));
66
- $message->mb_set_charset(get_bloginfo("charset"));
67
- return $message;
68
  }
69
-
70
  // This function is used to get the options and token generated to send the message
71
  public function get_message_content_mail_bank(mail_bank_manage_email $message, mail_bank_email_log $log, $email_configuration_settings) {
72
- global $wpdb;
73
- $mail_bank_settings_data = $wpdb->get_row
74
- (
75
- $wpdb->prepare
76
- (
77
- "SELECT meta_value FROM " . mail_bank_meta() .
78
- " WHERE meta_key = %s", "settings"
79
- )
80
- );
81
-
82
- $settings_data = maybe_unserialize($mail_bank_settings_data->meta_value);
83
- $ob_mb_config_provider = new mail_bank_configuration_provider();
84
- $this->configuration_settings = $ob_mb_config_provider->get_configuration_settings();
85
- $authorization_token = mail_bank_manage_token::get_instance();
86
-
87
- $transport = $this->obj_mail_bank_register_transport->retrieve_mailertype_mail_bank();
88
- $engine = $transport->initiate_mail_engine_mail_bank();
89
-
90
- if ($message->check_email_body_parts_mail_bank()) {
91
- $message->createBodyParts();
92
- }
93
- $obj_mail_bank_manage_email = new mail_bank_manage_email();
94
-
95
- try {
96
- $message->validate_email_contents_mail_bank($transport);
97
-
98
- if ($this->configuration_settings["auth_type"] == "oauth2") {
99
- $this->check_authtoken_mail_bank($transport, $authorization_token);
100
- }
101
- $engine->send_email_mail_bank($message);
102
-
103
- // writes the log on success.
104
- if ($engine->get_output_mail_bank() != "" && $settings_data["debug_mode"] == "enable") {
105
- update_option("mail_bank_mail_status", $engine->get_output_mail_bank());
106
- } else {
107
- update_option("mail_bank_mail_status", true);
108
- }
109
- $obj_mb_log_writter = new mail_bank_email_log_writter();
110
- update_option("mail_bank_is_mail_sent", "Sent");
111
- if ($settings_data["monitor_email_logs"] == "enable") {
112
- $obj_mb_log_writter->mb_success_log($log, $message, $settings_data["debug_mode"], $email_configuration_settings, $obj_mail_bank_manage_email);
113
- }
114
- return true;
115
- } catch (Exception $e) {
116
- $this->exception = $e;
117
- // Writes the log on failure
118
- if ($e->getCode() == 334 && $settings_data["debug_mode"] == "enable") {
119
- update_option("mail_bank_mail_status", $e->getMessage());
120
- } elseif ($engine->get_output_mail_bank() != "" && $settings_data["debug_mode"] == "enable") {
121
- update_option("mail_bank_mail_status", $engine->get_output_mail_bank());
122
- } elseif ($engine->get_output_mail_bank() == "" && $settings_data["debug_mode"] == "enable") {
123
- update_option("mail_bank_mail_status", $e->getMessage());
124
- } else {
125
- update_option("mail_bank_mail_status", false);
126
- }
127
- $obj_mb_log_writter = new mail_bank_email_log_writter();
128
- update_option("mail_bank_is_mail_sent", "Not Sent");
129
- if ($settings_data["monitor_email_logs"] == "enable") {
130
- $obj_mb_log_writter->mb_failure_log($log, $message, $settings_data["debug_mode"], $email_configuration_settings, $obj_mail_bank_manage_email);
131
- }
132
- return false;
133
- }
134
  }
135
-
136
  // This function is used to ensure the token is updated.
137
  public function check_authtoken_mail_bank($transport, $authorization_token) {
138
- $authentication_manager = new authentication_manager_mail_bank();
139
- $obj_authentication_manager_mail_bank = $authentication_manager->create_authentication_manager();
140
- if ($obj_authentication_manager_mail_bank->check_access_token()) {
141
- $obj_authentication_manager_mail_bank->get_refresh_token();
142
- $authorization_token->save_token_mail_bank();
143
- }
144
  }
145
-
146
  // This function is used to set all the content into a message.
147
  public function get_entire_message_content_mail_bank($message, $to, $subject, $body, $headers, $attachments) {
148
- $message->mb_add_headers($headers);
149
- $message->mb_set_body($body);
150
- $message->mb_set_subject($subject);
151
- $message->mb_addto($to);
152
- $message->mb_set_attachments($attachments);
153
- return $message;
154
  }
155
-
156
  }
157
-
158
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
18
  if (!class_exists("mail_bank_send_mail")) {
19
 
20
  class mail_bank_send_mail {
 
21
  public
22
+ $exception,
23
+ $configuration_settings,
24
+ $obj_mail_bank_register_transport;
 
25
  public function __construct() {
26
+ $obj_mb_config_provider = new mail_bank_configuration_provider();
27
+ $this->obj_mail_bank_register_transport = new mail_bank_register_transport();
28
+ $this->configuration_settings = $obj_mb_config_provider->get_configuration_settings();
29
  }
 
30
  // This function is used to send the message and return the result.
31
  public function send_email_message_mail_bank($to, $subject, $message, $headers = "", $attachments = array(), $email_configuration_settings) {
32
+ $mail_bank_manage_email = $this->build_message_mail_bank($to, $subject, $message, $headers, $attachments);
33
 
34
+ $log = new mail_bank_email_log();
35
+ $log->email_to = $to;
36
+ $log->email_subject = $subject;
37
+ $log->email_message = $message;
38
+ $log->email_headers = $headers;
39
 
40
+ return $this->get_message_content_mail_bank($mail_bank_manage_email, $log, $email_configuration_settings);
41
  }
 
42
  // This function is used to build a message based on the wordPress wp_mail parameters.
43
  public function build_message_mail_bank($to, $subject, $message, $headers, $attachments) {
44
+ if (!is_array($attachments)) {
45
+ $attachments = explode("\n", str_replace("\r\n", "\n", $attachments));
46
+ }
47
 
48
+ // Creates the message
49
+ $mail_bank_manage_email = $this->create_message_mail_bank();
50
+ $this->get_entire_message_content_mail_bank($mail_bank_manage_email, $to, $subject, $message, $headers, $attachments);
51
 
52
+ // Return the message
53
+ return $mail_bank_manage_email;
54
  }
 
55
  // This function is used to create the instance of mail_bank_manage_email.
56
  public function create_message_mail_bank() {
57
+ $message = new mail_bank_manage_email();
58
+ $transport = $this->obj_mail_bank_register_transport->retrieve_mailertype_mail_bank();
59
+ $message->mb_set_from($this->configuration_settings["email_address"], html_entity_decode($this->configuration_settings["sender_name"], ENT_QUOTES));
60
+ $message->mb_set_charset(get_bloginfo("charset"));
61
+ return $message;
62
  }
 
63
  // This function is used to get the options and token generated to send the message
64
  public function get_message_content_mail_bank(mail_bank_manage_email $message, mail_bank_email_log $log, $email_configuration_settings) {
65
+ global $wpdb;
66
+ $mail_bank_settings_data = $wpdb->get_row
67
+ (
68
+ $wpdb->prepare
69
+ (
70
+ "SELECT meta_value FROM " . mail_bank_meta() .
71
+ " WHERE meta_key = %s", "settings"
72
+ )
73
+ );
74
+
75
+ $settings_data = maybe_unserialize($mail_bank_settings_data->meta_value);
76
+ $ob_mb_config_provider = new mail_bank_configuration_provider();
77
+ $this->configuration_settings = $ob_mb_config_provider->get_configuration_settings();
78
+ $authorization_token = mail_bank_manage_token::get_instance();
79
+
80
+ $transport = $this->obj_mail_bank_register_transport->retrieve_mailertype_mail_bank();
81
+ $engine = $transport->initiate_mail_engine_mail_bank();
82
+
83
+ if ($message->check_email_body_parts_mail_bank()) {
84
+ $message->createBodyParts();
85
+ }
86
+ $obj_mail_bank_manage_email = new mail_bank_manage_email();
87
+
88
+ try {
89
+ $message->validate_email_contents_mail_bank($transport);
90
+
91
+ if ($this->configuration_settings["auth_type"] == "oauth2") {
92
+ $this->check_authtoken_mail_bank($transport, $authorization_token);
93
+ }
94
+ $engine->send_email_mail_bank($message);
95
+
96
+ // writes the log on success.
97
+ if ($engine->get_output_mail_bank() != "" && $settings_data["debug_mode"] == "enable") {
98
+ update_option("mail_bank_mail_status", $engine->get_output_mail_bank());
99
+ } else {
100
+ update_option("mail_bank_mail_status", true);
101
+ }
102
+ $obj_mb_log_writter = new mail_bank_email_log_writter();
103
+ update_option("mail_bank_is_mail_sent", "Sent");
104
+ if ($settings_data["monitor_email_logs"] == "enable") {
105
+ $obj_mb_log_writter->mb_success_log($log, $message, $settings_data["debug_mode"], $email_configuration_settings, $obj_mail_bank_manage_email);
106
+ }
107
+ return true;
108
+ } catch (Exception $e) {
109
+ $this->exception = $e;
110
+ // Writes the log on failure
111
+ if ($e->getCode() == 334 && $settings_data["debug_mode"] == "enable") {
112
+ update_option("mail_bank_mail_status", $e->getMessage());
113
+ } elseif ($engine->get_output_mail_bank() != "" && $settings_data["debug_mode"] == "enable") {
114
+ update_option("mail_bank_mail_status", $engine->get_output_mail_bank());
115
+ } elseif ($engine->get_output_mail_bank() == "" && $settings_data["debug_mode"] == "enable") {
116
+ update_option("mail_bank_mail_status", $e->getMessage());
117
+ } else {
118
+ update_option("mail_bank_mail_status", false);
119
+ }
120
+ $obj_mb_log_writter = new mail_bank_email_log_writter();
121
+ update_option("mail_bank_is_mail_sent", "Not Sent");
122
+ if ($settings_data["monitor_email_logs"] == "enable") {
123
+ $obj_mb_log_writter->mb_failure_log($log, $message, $settings_data["debug_mode"], $email_configuration_settings, $obj_mail_bank_manage_email);
124
+ }
125
+ return false;
126
+ }
127
  }
 
128
  // This function is used to ensure the token is updated.
129
  public function check_authtoken_mail_bank($transport, $authorization_token) {
130
+ $authentication_manager = new authentication_manager_mail_bank();
131
+ $obj_authentication_manager_mail_bank = $authentication_manager->create_authentication_manager();
132
+ if ($obj_authentication_manager_mail_bank->check_access_token()) {
133
+ $obj_authentication_manager_mail_bank->get_refresh_token();
134
+ $authorization_token->save_token_mail_bank();
135
+ }
136
  }
 
137
  // This function is used to set all the content into a message.
138
  public function get_entire_message_content_mail_bank($message, $to, $subject, $body, $headers, $attachments) {
139
+ $message->mb_add_headers($headers);
140
+ $message->mb_set_body($body);
141
+ $message->mb_set_subject($subject);
142
+ $message->mb_addto($to);
143
+ $message->mb_set_attachments($attachments);
144
+ return $message;
145
  }
 
146
  }
 
147
  }
includes/mail-bank-smtp-transport.php CHANGED
@@ -1,33 +1,26 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
6
-
7
  class mail_bank_smtp_transport {
8
-
9
  public $configuration_settings;
10
-
11
  public function __construct() {
12
  $obj_mb_config_provider = new mail_bank_configuration_provider();
13
  $this->configuration_settings = $obj_mb_config_provider->get_configuration_settings();
14
  }
15
-
16
  // This function is used to create mail engine for sending emails.
17
  public function initiate_mail_engine_mail_bank() {
18
  require_once "mail-bank-zend-engine.php";
19
  return new mail_bank_zend_engine($this);
20
  }
21
-
22
  // This function is used to create zend mail transport.
23
  public function initiate_zendmail_transport_mail_bank($fake_hostname, $fake_config) {
24
  $obj_mb_configure_transport = new mail_bank_configure_transport();
25
  if ($this->configuration_settings["auth_type"] == "oauth2") {
26
- $config = $obj_mb_configure_transport->configure_oauth_transport();
27
  } else {
28
- $config = $obj_mb_configure_transport->configure_plain_transport();
29
  }
30
  return new mail_bank_Zend_Mail_Transport_Smtp($this->configuration_settings["hostname"], $config);
31
  }
32
-
33
- }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
 
5
  class mail_bank_smtp_transport {
 
6
  public $configuration_settings;
 
7
  public function __construct() {
8
  $obj_mb_config_provider = new mail_bank_configuration_provider();
9
  $this->configuration_settings = $obj_mb_config_provider->get_configuration_settings();
10
  }
 
11
  // This function is used to create mail engine for sending emails.
12
  public function initiate_mail_engine_mail_bank() {
13
  require_once "mail-bank-zend-engine.php";
14
  return new mail_bank_zend_engine($this);
15
  }
 
16
  // This function is used to create zend mail transport.
17
  public function initiate_zendmail_transport_mail_bank($fake_hostname, $fake_config) {
18
  $obj_mb_configure_transport = new mail_bank_configure_transport();
19
  if ($this->configuration_settings["auth_type"] == "oauth2") {
20
+ $config = $obj_mb_configure_transport->configure_oauth_transport();
21
  } else {
22
+ $config = $obj_mb_configure_transport->configure_plain_transport();
23
  }
24
  return new mail_bank_Zend_Mail_Transport_Smtp($this->configuration_settings["hostname"], $config);
25
  }
26
+ }
 
includes/mail-bank-zend-engine.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
@@ -82,167 +81,160 @@ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-configuration-provider.
82
  if (!class_exists("mail_bank_zend_engine")) {
83
 
84
  class mail_bank_zend_engine {
85
-
86
  public
87
- $transcript,
88
- $mail_bank_options,
89
- $transport;
90
-
91
  function __construct($transport) {
92
- $this->transport = $transport;
93
- $mb_config_provider_obj = new mail_bank_configuration_provider();
94
- $this->mail_bank_options = $mb_config_provider_obj->get_configuration_settings();
95
  }
96
-
97
  // This Function is used to send Email.
98
  public function send_email_mail_bank(mail_bank_manage_email $message) {
99
- $envelope_from = new mail_bank_manage_email_address($this->mail_bank_options["email_address"]);
100
- $envelope_from->validate_email_contents_mail_bank("Envelope From");
101
- $charset = $message->mb_get_charset();
102
- $mail = new mail_bank_Zend_Mail($charset);
103
-
104
- // Add headers
105
- foreach ((array) $message->mb_get_headers() as $header) {
106
- $mail->addHeader($header["name"], $header["content"], true);
107
- }
108
-
109
- $content_type = $message->mb_get_content_type();
110
- if (!empty($content_type)) {
111
- $mail->addHeader("Content-Type", $content_type, false);
112
- }
113
-
114
- // Add the from header
115
- $fromHeader = $this->get_sender_from_email_mail_bank($message, $mail);
116
- $mail->addHeader("Sender", $this->mail_bank_options["email_address"], false);
117
-
118
- // Add to recipients
119
- foreach ((array) $message->mb_get_to_recipients() as $recipient) {
120
- $mail->addTo($recipient->mb_get_email(), $recipient->mb_get_name());
121
- }
122
-
123
- // Add cc recipients
124
- if ($this->mail_bank_options["cc"] == "") {
125
- foreach ((array) $message->mb_get_cc_recipients() as $recipient) {
126
- $mail->addCc($recipient->mb_get_email(), $recipient->mb_get_name());
127
- }
128
- } else {
129
- $cc_address_array = explode(",", $this->mail_bank_options["cc"]);
130
- foreach ($cc_address_array as $cc_address) {
131
- $mail->addCc($cc_address);
132
- }
133
- }
134
-
135
-
136
- // Add bcc recepients
137
- if ($this->mail_bank_options["bcc"] == "") {
138
- foreach ((array) $message->mb_get_bcc_recipients() as $recipient) {
139
- $mail->addBcc($recipient->mb_get_email(), $recipient->mb_get_name());
140
- }
141
- } else {
142
- $bcc_address_array = explode(",", $this->mail_bank_options["bcc"]);
143
- foreach ($bcc_address_array as $bcc_address) {
144
- $mail->addBcc($bcc_address);
145
- }
146
- }
147
-
148
- // Add reply to
149
- $reply_to = $message->mb_get_reply_to();
150
- if ($this->mail_bank_options["reply_to"] != "") {
151
- $mail->setReplyTo($this->mail_bank_options["reply_to"]);
152
- } elseif (isset($reply_to)) {
153
- $mail->setReplyTo($reply_to->mb_get_email());
154
- }
155
-
156
- // Add date
157
- $date = $message->mb_get_date();
158
- if (!empty($date)) {
159
- $mail->setDate($date);
160
- }
161
-
162
- // Add message id
163
- $message_id = $message->mb_get_message_id();
164
- if (!empty($message_id)) {
165
- $mail->setMessageId($message_id);
166
- }
167
-
168
- // Add subject of the email
169
- if (null !== $message->mb_get_subject()) {
170
- $mail->setSubject($message->mb_get_subject());
171
- }
172
-
173
- // Add message content of the email
174
- //{
175
- $text_part = $message->mb_get_body_textPart();
176
- if (!empty($text_part)) {
177
- $mail->setBodyText($text_part);
178
- }
179
- $html_part = $message->mb_get_body_html_part();
180
- if (!empty($html_part)) {
181
- $mail->setBodyHtml($html_part);
182
- }
183
- //}
184
- // Add attachments to the email
185
- $message->mb_add_attachments_to_mail($mail);
186
-
187
- // Create the SMTP transport
188
- $zend_transport = $this->transport->initiate_zendmail_transport_mail_bank($this->mail_bank_options["hostname"], array());
189
- try {
190
- // Send the message
191
- $mail->send($zend_transport);
192
- if ($zend_transport->getConnection() && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->getConnection()->getLog())) {
193
- $this->transcript = $zend_transport->getConnection()->getLog();
194
- } else if (method_exists($zend_transport, "get_output_mail_bank") && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->get_output_mail_bank())) {
195
- // use the API response
196
- $this->transcript = $zend_transport->get_output_mail_bank();
197
- } else if (method_exists($zend_transport, "getMessage") && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->getMessage())) {
198
- //use the raw message as the transcript
199
- $this->transcript = $zend_transport->getMessage();
200
- }
201
- } catch (Exception $e) {
202
- // In case of Error
203
- if ($zend_transport->getConnection() && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->getConnection()->getLog())) {
204
- $this->transcript = $zend_transport->getConnection()->getLog();
205
- } else if (method_exists($zend_transport, "get_output_mail_bank") && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->get_output_mail_bank())) {
206
- // Use API response
207
- $this->transcript = $zend_transport->get_output_mail_bank();
208
- } else if (method_exists($zend_transport, "getMessage") && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->getMessage())) {
209
- // Use message as the transcript
210
- $this->transcript = $zend_transport->getMessage();
211
- }
212
-
213
- // Get the current exception message
214
- $message = $e->getMessage();
215
- if ($e->getCode() == 334) {
216
- $message = "From Email should be of same account used to create the Client Id.";
217
- }
218
- $exception = new Exception($message, $e->getCode());
219
- // Throws the new exception
220
- throw $exception;
221
- }
222
  }
223
-
224
  // This function is used to get the sender from mail_bank_manage_email and add it to the mail_bank_Zend_Mail object
225
  public function get_sender_from_email_mail_bank($message, $mail) {
226
- $sender = $message->get_email_address_mail_bank();
227
- $sender_email = $sender->mb_get_email();
228
- $sender_name = $sender->mb_get_name();
229
- if (($this->mail_bank_options["sender_name_configuration"] == "override") && ($this->mail_bank_options["from_email_configuration"] == "override")) {
230
- $mail->setFrom($this->mail_bank_options["sender_email"], html_entity_decode($this->mail_bank_options["sender_name"], ENT_QUOTES));
231
- } elseif (($this->mail_bank_options["sender_name_configuration"] == "dont_override") && ($this->mail_bank_options["from_email_configuration"] == "dont_override")) {
232
- $mail->setFrom($sender_email, $sender_name);
233
- } elseif (($this->mail_bank_options["sender_name_configuration"] == "override") && ($this->mail_bank_options["from_email_configuration"] == "dont_override")) {
234
- $mail->setFrom($sender_email, html_entity_decode($this->mail_bank_options["sender_name"], ENT_QUOTES));
235
- } else {
236
- $mail->setFrom($this->mail_bank_options["sender_email"], $sender_name);
237
- }
238
- return $sender;
239
  }
240
-
241
  // This funtion is used to return SMTP session Transcript.
242
  public function get_output_mail_bank() {
243
- return $this->transcript;
244
  }
245
-
246
  }
247
-
248
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
81
  if (!class_exists("mail_bank_zend_engine")) {
82
 
83
  class mail_bank_zend_engine {
 
84
  public
85
+ $transcript,
86
+ $mail_bank_options,
87
+ $transport;
 
88
  function __construct($transport) {
89
+ $this->transport = $transport;
90
+ $mb_config_provider_obj = new mail_bank_configuration_provider();
91
+ $this->mail_bank_options = $mb_config_provider_obj->get_configuration_settings();
92
  }
 
93
  // This Function is used to send Email.
94
  public function send_email_mail_bank(mail_bank_manage_email $message) {
95
+ $envelope_from = new mail_bank_manage_email_address($this->mail_bank_options["email_address"]);
96
+ $envelope_from->validate_email_contents_mail_bank("Envelope From");
97
+ $charset = $message->mb_get_charset();
98
+ $mail = new mail_bank_Zend_Mail($charset);
99
+
100
+ // Add headers
101
+ foreach ((array) $message->mb_get_headers() as $header) {
102
+ $mail->addHeader($header["name"], $header["content"], true);
103
+ }
104
+
105
+ $content_type = $message->mb_get_content_type();
106
+ if (!empty($content_type)) {
107
+ $mail->addHeader("Content-Type", $content_type, false);
108
+ }
109
+
110
+ // Add the from header
111
+ $fromHeader = $this->get_sender_from_email_mail_bank($message, $mail);
112
+ $mail->addHeader("Sender", $this->mail_bank_options["email_address"], false);
113
+
114
+ // Add to recipients
115
+ foreach ((array) $message->mb_get_to_recipients() as $recipient) {
116
+ $mail->addTo($recipient->mb_get_email(), $recipient->mb_get_name());
117
+ }
118
+
119
+ // Add cc recipients
120
+ if ($this->mail_bank_options["cc"] == "") {
121
+ foreach ((array) $message->mb_get_cc_recipients() as $recipient) {
122
+ $mail->addCc($recipient->mb_get_email(), $recipient->mb_get_name());
123
+ }
124
+ } else {
125
+ $cc_address_array = explode(",", $this->mail_bank_options["cc"]);
126
+ foreach ($cc_address_array as $cc_address) {
127
+ $mail->addCc($cc_address);
128
+ }
129
+ }
130
+
131
+
132
+ // Add bcc recepients
133
+ if ($this->mail_bank_options["bcc"] == "") {
134
+ foreach ((array) $message->mb_get_bcc_recipients() as $recipient) {
135
+ $mail->addBcc($recipient->mb_get_email(), $recipient->mb_get_name());
136
+ }
137
+ } else {
138
+ $bcc_address_array = explode(",", $this->mail_bank_options["bcc"]);
139
+ foreach ($bcc_address_array as $bcc_address) {
140
+ $mail->addBcc($bcc_address);
141
+ }
142
+ }
143
+
144
+ // Add reply to
145
+ $reply_to = $message->mb_get_reply_to();
146
+ if ($this->mail_bank_options["reply_to"] != "") {
147
+ $mail->setReplyTo($this->mail_bank_options["reply_to"]);
148
+ } elseif (isset($reply_to)) {
149
+ $mail->setReplyTo($reply_to->mb_get_email());
150
+ }
151
+
152
+ // Add date
153
+ $date = $message->mb_get_date();
154
+ if (!empty($date)) {
155
+ $mail->setDate($date);
156
+ }
157
+
158
+ // Add message id
159
+ $message_id = $message->mb_get_message_id();
160
+ if (!empty($message_id)) {
161
+ $mail->setMessageId($message_id);
162
+ }
163
+
164
+ // Add subject of the email
165
+ if (null !== $message->mb_get_subject()) {
166
+ $mail->setSubject($message->mb_get_subject());
167
+ }
168
+
169
+ // Add message content of the email
170
+ //{
171
+ $text_part = $message->mb_get_body_textPart();
172
+ if (!empty($text_part)) {
173
+ $mail->setBodyText($text_part);
174
+ }
175
+ $html_part = $message->mb_get_body_html_part();
176
+ if (!empty($html_part)) {
177
+ $mail->setBodyHtml($html_part);
178
+ }
179
+ //}
180
+ // Add attachments to the email
181
+ $message->mb_add_attachments_to_mail($mail);
182
+
183
+ // Create the SMTP transport
184
+ $zend_transport = $this->transport->initiate_zendmail_transport_mail_bank($this->mail_bank_options["hostname"], array());
185
+ try {
186
+ // Send the message
187
+ $mail->send($zend_transport);
188
+ if ($zend_transport->getConnection() && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->getConnection()->getLog())) {
189
+ $this->transcript = $zend_transport->getConnection()->getLog();
190
+ } else if (method_exists($zend_transport, "get_output_mail_bank") && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->get_output_mail_bank())) {
191
+ // use the API response
192
+ $this->transcript = $zend_transport->get_output_mail_bank();
193
+ } else if (method_exists($zend_transport, "getMessage") && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->getMessage())) {
194
+ //use the raw message as the transcript
195
+ $this->transcript = $zend_transport->getMessage();
196
+ }
197
+ } catch (Exception $e) {
198
+ // In case of Error
199
+ if ($zend_transport->getConnection() && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->getConnection()->getLog())) {
200
+ $this->transcript = $zend_transport->getConnection()->getLog();
201
+ } else if (method_exists($zend_transport, "get_output_mail_bank") && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->get_output_mail_bank())) {
202
+ // Use API response
203
+ $this->transcript = $zend_transport->get_output_mail_bank();
204
+ } else if (method_exists($zend_transport, "getMessage") && !mail_bank_zend_mail_helper::check_field_mail_bank($zend_transport->getMessage())) {
205
+ // Use message as the transcript
206
+ $this->transcript = $zend_transport->getMessage();
207
+ }
208
+
209
+ // Get the current exception message
210
+ $message = $e->getMessage();
211
+ if ($e->getCode() == 334) {
212
+ $message = "From Email should be of same account used to create the Client Id.";
213
+ }
214
+ $exception = new Exception($message, $e->getCode());
215
+ // Throws the new exception
216
+ throw $exception;
217
+ }
218
  }
 
219
  // This function is used to get the sender from mail_bank_manage_email and add it to the mail_bank_Zend_Mail object
220
  public function get_sender_from_email_mail_bank($message, $mail) {
221
+ $sender = $message->get_email_address_mail_bank();
222
+ $sender_email = $sender->mb_get_email();
223
+ $sender_name = $sender->mb_get_name();
224
+ if (($this->mail_bank_options["sender_name_configuration"] == "override") && ($this->mail_bank_options["from_email_configuration"] == "override")) {
225
+ $mail->setFrom($this->mail_bank_options["sender_email"], html_entity_decode($this->mail_bank_options["sender_name"], ENT_QUOTES));
226
+ } elseif (($this->mail_bank_options["sender_name_configuration"] == "dont_override") && ($this->mail_bank_options["from_email_configuration"] == "dont_override")) {
227
+ $mail->setFrom($sender_email, $sender_name);
228
+ } elseif (($this->mail_bank_options["sender_name_configuration"] == "override") && ($this->mail_bank_options["from_email_configuration"] == "dont_override")) {
229
+ $mail->setFrom($sender_email, html_entity_decode($this->mail_bank_options["sender_name"], ENT_QUOTES));
230
+ } else {
231
+ $mail->setFrom($this->mail_bank_options["sender_email"], $sender_name);
232
+ }
233
+ return $sender;
234
  }
 
235
  // This funtion is used to return SMTP session Transcript.
236
  public function get_output_mail_bank() {
237
+ return $this->transcript;
238
  }
 
239
  }
 
240
  }
includes/mail-bank-zend-mail-helper.php CHANGED
@@ -1,66 +1,57 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
6
  if (!class_exists("mail_bank_zend_mail_helper")) {
7
 
8
  class mail_bank_zend_mail_helper {
9
-
10
  public static $validate_email;
11
-
12
  public static function email_domains_mail_bank($hostname, $needle) {
13
- $length = strlen($needle);
14
- return(substr($hostname, - $length) === $needle);
15
  }
16
-
17
  // This function is used to make the outgoing Http requests.
18
  public static function retrieve_body_from_response_mail_bank($url, $parameters, array $headers = array()) {
19
- $response = mail_bank_zend_mail_helper::post_request_mail_bank($url, $parameters, $headers);
20
- if (isset($response["error"])) {
21
- return json_encode($response);
22
- }
23
- $body = wp_remote_retrieve_body($response);
24
- return $body;
25
  }
26
-
27
  // This function is used to make outgoing Http requests.
28
  public static function post_request_mail_bank($url, $parameters = array(), array $headers = array()) {
29
- $args = array(
30
- "timeout" => "10000",
31
- "headers" => $headers,
32
- "body" => $parameters
33
- );
34
- $response = wp_remote_post($url, $args);
35
-
36
- if (is_wp_error($response)) {
37
- return array("error" => "An error occured", "error_description" => $response->get_error_message());
38
- } else {
39
- return $response;
40
- }
41
  }
42
-
43
  // This function is used for basic field validation.
44
  public static function check_field_mail_bank($text) {
45
- return(!isset($text) || trim($text) === "");
46
  }
47
-
48
  // This function is used to validate an email-address.
49
  public static function email_validation_mail_bank($email) {
50
- require_once MAIL_BANK_DIR_PATH . "lib/zend/exception.php";
51
- require_once MAIL_BANK_DIR_PATH . "lib/zend/registry.php";
52
- require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/exception.php";
53
- require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/interface.php";
54
- require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/abstract.php";
55
- require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/ip.php";
56
- require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/hostname.php";
57
- require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/emailaddress.php";
58
- if (!isset(mail_bank_zend_mail_helper::$validate_email)) {
59
- mail_bank_zend_mail_helper::$validate_email = new mail_bank_Zend_Validate_EmailAddress();
60
- }
61
- return mail_bank_zend_mail_helper::$validate_email->isValid($email);
62
  }
63
-
64
  }
65
-
66
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
5
  if (!class_exists("mail_bank_zend_mail_helper")) {
6
 
7
  class mail_bank_zend_mail_helper {
 
8
  public static $validate_email;
 
9
  public static function email_domains_mail_bank($hostname, $needle) {
10
+ $length = strlen($needle);
11
+ return(substr($hostname, - $length) === $needle);
12
  }
 
13
  // This function is used to make the outgoing Http requests.
14
  public static function retrieve_body_from_response_mail_bank($url, $parameters, array $headers = array()) {
15
+ $response = mail_bank_zend_mail_helper::post_request_mail_bank($url, $parameters, $headers);
16
+ if (isset($response["error"])) {
17
+ return json_encode($response);
18
+ }
19
+ $body = wp_remote_retrieve_body($response);
20
+ return $body;
21
  }
 
22
  // This function is used to make outgoing Http requests.
23
  public static function post_request_mail_bank($url, $parameters = array(), array $headers = array()) {
24
+ $args = array(
25
+ "timeout" => "10000",
26
+ "headers" => $headers,
27
+ "body" => $parameters
28
+ );
29
+ $response = wp_remote_post($url, $args);
30
+
31
+ if (is_wp_error($response)) {
32
+ return array("error" => "An error occured", "error_description" => $response->get_error_message());
33
+ } else {
34
+ return $response;
35
+ }
36
  }
 
37
  // This function is used for basic field validation.
38
  public static function check_field_mail_bank($text) {
39
+ return(!isset($text) || trim($text) === "");
40
  }
 
41
  // This function is used to validate an email-address.
42
  public static function email_validation_mail_bank($email) {
43
+ require_once MAIL_BANK_DIR_PATH . "lib/zend/exception.php";
44
+ require_once MAIL_BANK_DIR_PATH . "lib/zend/registry.php";
45
+ require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/exception.php";
46
+ require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/interface.php";
47
+ require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/abstract.php";
48
+ require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/ip.php";
49
+ require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/hostname.php";
50
+ require_once MAIL_BANK_DIR_PATH . "lib/zend/validate/emailaddress.php";
51
+ if (!isset(mail_bank_zend_mail_helper::$validate_email)) {
52
+ mail_bank_zend_mail_helper::$validate_email = new mail_bank_Zend_Validate_EmailAddress();
53
+ }
54
+ return mail_bank_zend_mail_helper::$validate_email->isValid($email);
55
  }
 
56
  }
 
57
  }
includes/mailer.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * This file is used for authenticating and sending Emails.
5
  *
@@ -13,7 +12,6 @@ if (!defined("ABSPATH")) {
13
  if (!class_exists("mail_bank_auth_host")) {
14
 
15
  class mail_bank_auth_host {
16
-
17
  public $from_name;
18
  public $smtp_host;
19
  public $smtp_port;
@@ -23,77 +21,75 @@ if (!class_exists("mail_bank_auth_host")) {
23
  public $api_key;
24
  public $authorization_token;
25
  public $oauth_domains = array(
26
- "hotmail.com" => "smtp.live.com",
27
- "outlook.com" => "smtp.live.com",
28
- "yahoo.ca" => "smtp.mail.yahoo.ca",
29
- "yahoo.co.id" => "smtp.mail.yahoo.co.id",
30
- "yahoo.co.in" => "smtp.mail.yahoo.co.in",
31
- "yahoo.co.kr" => "smtp.mail.yahoo.com",
32
- "yahoo.com" => "smtp.mail.yahoo.com",
33
- "ymail.com" => "smtp.mail.yahoo.com",
34
- "yahoo.com.ar" => "smtp.mail.yahoo.com.ar",
35
- "yahoo.com.au" => "smtp.mail.yahoo.com.au",
36
- "yahoo.com.br" => "smtp.mail.yahoo.com.br",
37
- "yahoo.com.cn" => "smtp.mail.yahoo.com.cn",
38
- "yahoo.com.hk" => "smtp.mail.yahoo.com.hk",
39
- "yahoo.com.mx" => "smtp.mail.yahoo.com",
40
- "yahoo.com.my" => "smtp.mail.yahoo.com.my",
41
- "yahoo.com.ph" => "smtp.mail.yahoo.com.ph",
42
- "yahoo.com.sg" => "smtp.mail.yahoo.com.sg",
43
- "yahoo.com.tw" => "smtp.mail.yahoo.com.tw",
44
- "yahoo.com.vn" => "smtp.mail.yahoo.com.vn",
45
- "yahoo.co.nz" => "smtp.mail.yahoo.com.au",
46
- "yahoo.co.th" => "smtp.mail.yahoo.co.th",
47
- "yahoo.co.uk" => "smtp.mail.yahoo.co.uk",
48
- "yahoo.de" => "smtp.mail.yahoo.de",
49
- "yahoo.es" => "smtp.correo.yahoo.es",
50
- "yahoo.fr" => "smtp.mail.yahoo.fr",
51
- "yahoo.ie" => "smtp.mail.yahoo.co.uk",
52
- "yahoo.it" => "smtp.mail.yahoo.it",
53
- "gmail.com" => "smtp.gmail.com",
54
  );
55
  public $yahoo_domains = array(
56
- "smtp.mail.yahoo.ca",
57
- "smtp.mail.yahoo.co.id",
58
- "smtp.mail.yahoo.co.in",
59
- "smtp.mail.yahoo.com",
60
- "smtp.mail.yahoo.com",
61
- "smtp.mail.yahoo.com.ar",
62
- "smtp.mail.yahoo.com.au",
63
- "smtp.mail.yahoo.com.br",
64
- "smtp.mail.yahoo.com.cn",
65
- "smtp.mail.yahoo.com.hk",
66
- "smtp.mail.yahoo.com",
67
- "smtp.mail.yahoo.com.my",
68
- "smtp.mail.yahoo.com.ph",
69
- "smtp.mail.yahoo.com.sg",
70
- "smtp.mail.yahoo.com.tw",
71
- "smtp.mail.yahoo.com.vn",
72
- "smtp.mail.yahoo.com.au",
73
- "smtp.mail.yahoo.co.th",
74
- "smtp.mail.yahoo.co.uk",
75
- "smtp.mail.yahoo.de",
76
- "smtp.correo.yahoo.es",
77
- "smtp.mail.yahoo.fr",
78
- "smtp.mail.yahoo.co.uk",
79
- "smtp.mail.yahoo.it"
80
  );
81
-
82
  public function __construct($settings_array) {
83
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-token.php")) {
84
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-token.php";
85
- }
86
- $this->authorization_token = mail_bank_manage_token::get_instance();
87
- $this->from_name = $settings_array["sender_name"];
88
- $this->from_email = $settings_array["sender_email"];
89
- $this->smtp_host = $settings_array["hostname"];
90
- $this->smtp_port = $settings_array["port"];
91
- $this->client_id = $settings_array["client_id"];
92
- $this->client_secret = $settings_array["client_secret"];
93
- $this->redirect_uri = $settings_array["redirect_uri"];
94
- $this->sender_email = $settings_array["email_address"];
95
  }
96
-
97
  /*
98
  Function Name: send_test_mail_bank
99
  Parameters: Yes($to,$subject,$message,$headers,$attachments,$email_configuration_settings)
@@ -101,29 +97,27 @@ if (!class_exists("mail_bank_auth_host")) {
101
  Created On: 15-06-2016 10:43
102
  Created By: Tech Banker Team
103
  */
104
-
105
  public function send_test_mail_bank($to, $subject, $message, $headers = "", $attachments = "", $email_configuration_settings) {
106
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-send-mail.php")) {
107
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-send-mail.php";
108
- }
109
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-token.php")) {
110
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-token.php";
111
- }
112
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
113
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
114
- }
115
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-smtp-transport.php")) {
116
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-smtp-transport.php";
117
- }
118
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-register-transport.php")) {
119
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-register-transport.php";
120
- }
121
- $obj_transport_registry = new mail_bank_register_transport();
122
- $obj_transport_registry->listing_transport_mail_bank(new mail_bank_smtp_transport($email_configuration_settings));
123
- $obj_wp_mail = new mail_bank_send_mail();
124
- return $obj_wp_mail->send_email_message_mail_bank($to, $subject, $message, $headers, $attachments, $email_configuration_settings);
125
  }
126
-
127
  /*
128
  Function Name: microsoft_authentication
129
  Parameters: No
@@ -131,19 +125,17 @@ if (!class_exists("mail_bank_auth_host")) {
131
  Created On: 15-06-2016 10:43
132
  Created By: Tech Banker Team
133
  */
134
-
135
  public function microsoft_authentication() {
136
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/microsoft-authentication-mail-bank.php")) {
137
- include_once MAIL_BANK_DIR_PATH . "includes/microsoft-authentication-mail-bank.php";
138
- }
139
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
140
- include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
141
- }
142
- $obj_microsoft_authentication_mail_bank = new microsoft_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri);
143
 
144
- $obj_microsoft_authentication_mail_bank->get_token_code(md5(rand()));
145
  }
146
-
147
  /*
148
  Function Name: google_authentication
149
  Parameters: No
@@ -151,19 +143,17 @@ if (!class_exists("mail_bank_auth_host")) {
151
  Created On: 15-06-2016 10:43
152
  Created By: Tech Banker Team
153
  */
154
-
155
  public function google_authentication() {
156
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/google-authentication-mail-bank.php")) {
157
- include_once MAIL_BANK_DIR_PATH . "includes/google-authentication-mail-bank.php";
158
- }
159
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
160
- include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
161
- }
162
- $obj_google_authentication_mail_bank = new google_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri, $this->sender_email);
163
 
164
- $obj_google_authentication_mail_bank->get_token_code(md5(rand()));
165
  }
166
-
167
  /*
168
  Function Name: microsoft_authentication_token
169
  Parameters: Yes($code)
@@ -171,26 +161,24 @@ if (!class_exists("mail_bank_auth_host")) {
171
  Created On: 15-06-2016 10:43
172
  Created By: Tech Banker Team
173
  */
174
-
175
  public function microsoft_authentication_token($code) {
176
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
177
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
178
- }
179
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/microsoft-authentication-mail-bank.php")) {
180
- include_once MAIL_BANK_DIR_PATH . "includes/microsoft-authentication-mail-bank.php";
181
- }
182
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
183
- include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
184
- }
185
- $obj_microsoft_authentication_mail_bank = new microsoft_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri);
186
 
187
- $test_error = $obj_microsoft_authentication_mail_bank->process_token_Code(md5(rand()));
188
- if (isset($test_error->error)) {
189
- return $test_error;
190
- }
191
- $this->authorization_token->save_token_mail_bank();
192
  }
193
-
194
  /*
195
  Function Name: google_authentication_token
196
  Parameters: Yes($code)
@@ -198,27 +186,25 @@ if (!class_exists("mail_bank_auth_host")) {
198
  Created On: 15-06-2016 10:43
199
  Created By: Tech Banker Team
200
  */
201
-
202
  public function google_authentication_token($code) {
203
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
204
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
205
- }
206
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/google-authentication-mail-bank.php")) {
207
- include_once MAIL_BANK_DIR_PATH . "includes/google-authentication-mail-bank.php";
208
- }
209
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
210
- include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
211
- }
212
- $obj_google_authentication_mail_bank = new google_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri, $this->sender_email);
213
 
214
- $test_error1 = $obj_google_authentication_mail_bank->process_token_Code(md5(rand()));
215
- if (isset($test_error1->error)) {
216
- return $test_error1;
217
- }
218
 
219
- $this->authorization_token->save_token_mail_bank();
220
  }
221
-
222
  /*
223
  Function Name: yahoo_authentication
224
  Parameters: No
@@ -226,22 +212,20 @@ if (!class_exists("mail_bank_auth_host")) {
226
  Created On: 15-06-2016 10:43
227
  Created By: Tech Banker Team
228
  */
229
-
230
  public function yahoo_authentication() {
231
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
232
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
233
- }
234
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/yahoo-authentication-mail-bank.php")) {
235
- include_once MAIL_BANK_DIR_PATH . "includes/yahoo-authentication-mail-bank.php";
236
- }
237
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
238
- include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
239
- }
240
 
241
- $obj_yahoo_authentication_mail_bank = new yahoo_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri);
242
- $obj_yahoo_authentication_mail_bank->get_token_code(md5(rand()));
243
  }
244
-
245
  /*
246
  Function Name: yahoo_authentication_token
247
  Parameters: Yes($code)
@@ -249,26 +233,24 @@ if (!class_exists("mail_bank_auth_host")) {
249
  Created On: 15-06-2016 10:43
250
  Created By: Tech Banker Team
251
  */
252
-
253
  public function yahoo_authentication_token($code) {
254
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
255
- include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
256
- }
257
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/yahoo-authentication-mail-bank.php")) {
258
- include_once MAIL_BANK_DIR_PATH . "includes/yahoo-authentication-mail-bank.php";
259
- }
260
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
261
- include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
262
- }
263
- $obj_yahoo_authentication_mail_bank = new yahoo_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri, $this->sender_email);
264
 
265
- $test_error1 = $obj_yahoo_authentication_mail_bank->process_token_Code(md5(rand()));
266
- if (isset($test_error1->error)) {
267
- return $test_error1;
268
- }
269
- $this->authorization_token->save_token_mail_bank();
270
  }
271
-
272
  /*
273
  Function Name: override_wp_mail_function
274
  Parameters: No
@@ -276,44 +258,40 @@ if (!class_exists("mail_bank_auth_host")) {
276
  Created On: 15-06-2016 10:43
277
  Created By: Tech Banker Team
278
  */
279
-
280
  public static function override_wp_mail_function() {
281
- global $wpdb;
282
- $mail_bank_version_number = get_option("mail-bank-version-number");
283
- if ($mail_bank_version_number != "") {
284
- $email_configuration_data = $wpdb->get_var
285
- (
286
- $wpdb->prepare
287
- (
288
- "SELECT meta_value FROM " . mail_bank_meta() . "
289
  WHERE meta_key = %s", "email_configuration"
290
- )
291
- );
292
- $email_configuration_data_array = maybe_unserialize($email_configuration_data);
293
- if ($email_configuration_data_array["mailer_type"] == "smtp") {
294
- if (!function_exists("wp_mail")) {
295
-
296
- function wp_mail($to, $subject, $message, $headers = "", $attachments = "") {
297
- global $wpdb;
298
- $email_configuration_data_array = $wpdb->get_var
299
- (
300
- $wpdb->prepare
301
- (
302
- "SELECT meta_value FROM " . mail_bank_meta() .
303
- " WHERE meta_key=%s", "email_configuration"
304
- )
305
- );
306
- $email_configuration_settings = maybe_unserialize($email_configuration_data_array);
307
- $obj_send_test_mail = new mail_bank_auth_host($email_configuration_settings);
308
- $result = $obj_send_test_mail->send_test_mail_bank($to, $subject, $message, $headers, $attachments, $email_configuration_settings);
309
- return $result;
310
- }
311
 
312
- }
313
- }
314
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
315
  }
316
-
317
  }
318
-
319
  }
1
  <?php
 
2
  /**
3
  * This file is used for authenticating and sending Emails.
4
  *
12
  if (!class_exists("mail_bank_auth_host")) {
13
 
14
  class mail_bank_auth_host {
 
15
  public $from_name;
16
  public $smtp_host;
17
  public $smtp_port;
21
  public $api_key;
22
  public $authorization_token;
23
  public $oauth_domains = array(
24
+ "hotmail.com" => "smtp.live.com",
25
+ "outlook.com" => "smtp.live.com",
26
+ "yahoo.ca" => "smtp.mail.yahoo.ca",
27
+ "yahoo.co.id" => "smtp.mail.yahoo.co.id",
28
+ "yahoo.co.in" => "smtp.mail.yahoo.co.in",
29
+ "yahoo.co.kr" => "smtp.mail.yahoo.com",
30
+ "yahoo.com" => "smtp.mail.yahoo.com",
31
+ "ymail.com" => "smtp.mail.yahoo.com",
32
+ "yahoo.com.ar" => "smtp.mail.yahoo.com.ar",
33
+ "yahoo.com.au" => "smtp.mail.yahoo.com.au",
34
+ "yahoo.com.br" => "smtp.mail.yahoo.com.br",
35
+ "yahoo.com.cn" => "smtp.mail.yahoo.com.cn",
36
+ "yahoo.com.hk" => "smtp.mail.yahoo.com.hk",
37
+ "yahoo.com.mx" => "smtp.mail.yahoo.com",
38
+ "yahoo.com.my" => "smtp.mail.yahoo.com.my",
39
+ "yahoo.com.ph" => "smtp.mail.yahoo.com.ph",
40
+ "yahoo.com.sg" => "smtp.mail.yahoo.com.sg",
41
+ "yahoo.com.tw" => "smtp.mail.yahoo.com.tw",
42
+ "yahoo.com.vn" => "smtp.mail.yahoo.com.vn",
43
+ "yahoo.co.nz" => "smtp.mail.yahoo.com.au",
44
+ "yahoo.co.th" => "smtp.mail.yahoo.co.th",
45
+ "yahoo.co.uk" => "smtp.mail.yahoo.co.uk",
46
+ "yahoo.de" => "smtp.mail.yahoo.de",
47
+ "yahoo.es" => "smtp.correo.yahoo.es",
48
+ "yahoo.fr" => "smtp.mail.yahoo.fr",
49
+ "yahoo.ie" => "smtp.mail.yahoo.co.uk",
50
+ "yahoo.it" => "smtp.mail.yahoo.it",
51
+ "gmail.com" => "smtp.gmail.com",
52
  );
53
  public $yahoo_domains = array(
54
+ "smtp.mail.yahoo.ca",
55
+ "smtp.mail.yahoo.co.id",
56
+ "smtp.mail.yahoo.co.in",
57
+ "smtp.mail.yahoo.com",
58
+ "smtp.mail.yahoo.com",
59
+ "smtp.mail.yahoo.com.ar",
60
+ "smtp.mail.yahoo.com.au",
61
+ "smtp.mail.yahoo.com.br",
62
+ "smtp.mail.yahoo.com.cn",
63
+ "smtp.mail.yahoo.com.hk",
64
+ "smtp.mail.yahoo.com",
65
+ "smtp.mail.yahoo.com.my",
66
+ "smtp.mail.yahoo.com.ph",
67
+ "smtp.mail.yahoo.com.sg",
68
+ "smtp.mail.yahoo.com.tw",
69
+ "smtp.mail.yahoo.com.vn",
70
+ "smtp.mail.yahoo.com.au",
71
+ "smtp.mail.yahoo.co.th",
72
+ "smtp.mail.yahoo.co.uk",
73
+ "smtp.mail.yahoo.de",
74
+ "smtp.correo.yahoo.es",
75
+ "smtp.mail.yahoo.fr",
76
+ "smtp.mail.yahoo.co.uk",
77
+ "smtp.mail.yahoo.it"
78
  );
 
79
  public function __construct($settings_array) {
80
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-token.php")) {
81
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-token.php";
82
+ }
83
+ $this->authorization_token = mail_bank_manage_token::get_instance();
84
+ $this->from_name = $settings_array["sender_name"];
85
+ $this->from_email = $settings_array["sender_email"];
86
+ $this->smtp_host = $settings_array["hostname"];
87
+ $this->smtp_port = $settings_array["port"];
88
+ $this->client_id = $settings_array["client_id"];
89
+ $this->client_secret = $settings_array["client_secret"];
90
+ $this->redirect_uri = $settings_array["redirect_uri"];
91
+ $this->sender_email = $settings_array["email_address"];
92
  }
 
93
  /*
94
  Function Name: send_test_mail_bank
95
  Parameters: Yes($to,$subject,$message,$headers,$attachments,$email_configuration_settings)
97
  Created On: 15-06-2016 10:43
98
  Created By: Tech Banker Team
99
  */
 
100
  public function send_test_mail_bank($to, $subject, $message, $headers = "", $attachments = "", $email_configuration_settings) {
101
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-send-mail.php")) {
102
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-send-mail.php";
103
+ }
104
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-token.php")) {
105
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-manage-token.php";
106
+ }
107
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
108
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
109
+ }
110
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-smtp-transport.php")) {
111
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-smtp-transport.php";
112
+ }
113
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-register-transport.php")) {
114
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-register-transport.php";
115
+ }
116
+ $obj_transport_registry = new mail_bank_register_transport();
117
+ $obj_transport_registry->listing_transport_mail_bank(new mail_bank_smtp_transport($email_configuration_settings));
118
+ $obj_wp_mail = new mail_bank_send_mail();
119
+ return $obj_wp_mail->send_email_message_mail_bank($to, $subject, $message, $headers, $attachments, $email_configuration_settings);
120
  }
 
121
  /*
122
  Function Name: microsoft_authentication
123
  Parameters: No
125
  Created On: 15-06-2016 10:43
126
  Created By: Tech Banker Team
127
  */
 
128
  public function microsoft_authentication() {
129
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/microsoft-authentication-mail-bank.php")) {
130
+ include_once MAIL_BANK_DIR_PATH . "includes/microsoft-authentication-mail-bank.php";
131
+ }
132
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
133
+ include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
134
+ }
135
+ $obj_microsoft_authentication_mail_bank = new microsoft_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri);
136
 
137
+ $obj_microsoft_authentication_mail_bank->get_token_code(md5(rand()));
138
  }
 
139
  /*
140
  Function Name: google_authentication
141
  Parameters: No
143
  Created On: 15-06-2016 10:43
144
  Created By: Tech Banker Team
145
  */
 
146
  public function google_authentication() {
147
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/google-authentication-mail-bank.php")) {
148
+ include_once MAIL_BANK_DIR_PATH . "includes/google-authentication-mail-bank.php";
149
+ }
150
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
151
+ include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
152
+ }
153
+ $obj_google_authentication_mail_bank = new google_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri, $this->sender_email);
154
 
155
+ $obj_google_authentication_mail_bank->get_token_code(md5(rand()));
156
  }
 
157
  /*
158
  Function Name: microsoft_authentication_token
159
  Parameters: Yes($code)
161
  Created On: 15-06-2016 10:43
162
  Created By: Tech Banker Team
163
  */
 
164
  public function microsoft_authentication_token($code) {
165
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
166
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
167
+ }
168
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/microsoft-authentication-mail-bank.php")) {
169
+ include_once MAIL_BANK_DIR_PATH . "includes/microsoft-authentication-mail-bank.php";
170
+ }
171
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
172
+ include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
173
+ }
174
+ $obj_microsoft_authentication_mail_bank = new microsoft_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri);
175
 
176
+ $test_error = $obj_microsoft_authentication_mail_bank->process_token_Code(md5(rand()));
177
+ if (isset($test_error->error)) {
178
+ return $test_error;
179
+ }
180
+ $this->authorization_token->save_token_mail_bank();
181
  }
 
182
  /*
183
  Function Name: google_authentication_token
184
  Parameters: Yes($code)
186
  Created On: 15-06-2016 10:43
187
  Created By: Tech Banker Team
188
  */
 
189
  public function google_authentication_token($code) {
190
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
191
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
192
+ }
193
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/google-authentication-mail-bank.php")) {
194
+ include_once MAIL_BANK_DIR_PATH . "includes/google-authentication-mail-bank.php";
195
+ }
196
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
197
+ include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
198
+ }
199
+ $obj_google_authentication_mail_bank = new google_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri, $this->sender_email);
200
 
201
+ $test_error1 = $obj_google_authentication_mail_bank->process_token_Code(md5(rand()));
202
+ if (isset($test_error1->error)) {
203
+ return $test_error1;
204
+ }
205
 
206
+ $this->authorization_token->save_token_mail_bank();
207
  }
 
208
  /*
209
  Function Name: yahoo_authentication
210
  Parameters: No
212
  Created On: 15-06-2016 10:43
213
  Created By: Tech Banker Team
214
  */
 
215
  public function yahoo_authentication() {
216
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
217
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
218
+ }
219
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/yahoo-authentication-mail-bank.php")) {
220
+ include_once MAIL_BANK_DIR_PATH . "includes/yahoo-authentication-mail-bank.php";
221
+ }
222
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
223
+ include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
224
+ }
225
 
226
+ $obj_yahoo_authentication_mail_bank = new yahoo_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri);
227
+ $obj_yahoo_authentication_mail_bank->get_token_code(md5(rand()));
228
  }
 
229
  /*
230
  Function Name: yahoo_authentication_token
231
  Parameters: Yes($code)
233
  Created On: 15-06-2016 10:43
234
  Created By: Tech Banker Team
235
  */
 
236
  public function yahoo_authentication_token($code) {
237
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php")) {
238
+ include_once MAIL_BANK_DIR_PATH . "includes/mail-bank-zend-mail-helper.php";
239
+ }
240
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/yahoo-authentication-mail-bank.php")) {
241
+ include_once MAIL_BANK_DIR_PATH . "includes/yahoo-authentication-mail-bank.php";
242
+ }
243
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php")) {
244
+ include_once MAIL_BANK_DIR_PATH . "includes/authentication-manager-mail-bank.php";
245
+ }
246
+ $obj_yahoo_authentication_mail_bank = new yahoo_authentication_mail_bank($this->client_id, $this->client_secret, $this->authorization_token, $this->redirect_uri, $this->sender_email);
247
 
248
+ $test_error1 = $obj_yahoo_authentication_mail_bank->process_token_Code(md5(rand()));
249
+ if (isset($test_error1->error)) {
250
+ return $test_error1;
251
+ }
252
+ $this->authorization_token->save_token_mail_bank();
253
  }
 
254
  /*
255
  Function Name: override_wp_mail_function
256
  Parameters: No
258
  Created On: 15-06-2016 10:43
259
  Created By: Tech Banker Team
260
  */
 
261
  public static function override_wp_mail_function() {
262
+ global $wpdb;
263
+ $mail_bank_version_number = get_option("mail-bank-version-number");
264
+ if ($mail_bank_version_number != "") {
265
+ $email_configuration_data = $wpdb->get_var
266
+ (
267
+ $wpdb->prepare
268
+ (
269
+ "SELECT meta_value FROM " . mail_bank_meta() . "
270
  WHERE meta_key = %s", "email_configuration"
271
+ )
272
+ );
273
+ $email_configuration_data_array = maybe_unserialize($email_configuration_data);
274
+ if ($email_configuration_data_array["mailer_type"] == "smtp") {
275
+ if (!function_exists("wp_mail")) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
 
277
+ function wp_mail($to, $subject, $message, $headers = "", $attachments = "") {
278
+ global $wpdb;
279
+ $email_configuration_data_array = $wpdb->get_var
280
+ (
281
+ $wpdb->prepare
282
+ (
283
+ "SELECT meta_value FROM " . mail_bank_meta() .
284
+ " WHERE meta_key=%s", "email_configuration"
285
+ )
286
+ );
287
+ $email_configuration_settings = maybe_unserialize($email_configuration_data_array);
288
+ $obj_send_test_mail = new mail_bank_auth_host($email_configuration_settings);
289
+ $result = $obj_send_test_mail->send_test_mail_bank($to, $subject, $message, $headers, $attachments, $email_configuration_settings);
290
+ return $result;
291
+ }
292
+ }
293
+ }
294
+ }
295
  }
 
296
  }
 
297
  }
includes/microsoft-authentication-mail-bank.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
@@ -10,61 +9,55 @@ if (file_exists(MAIL_BANK_DIR_PATH . "includes/token-manager-mail-bank.php")) {
10
  if (!class_exists("microsoft_authentication_mail_bank")) {
11
 
12
  class microsoft_authentication_mail_bank extends token_manager_mail_bank {
13
-
14
  public
15
- $client_id,
16
- $client_secret,
17
- $callback_uri,
18
- $token_url;
19
-
20
  //Constructor
21
  public function __construct($client_id, $client_secret, mail_bank_manage_token $authorization_token, $callback_uri) {
22
- $this->client_id = $client_id;
23
- $this->client_secret = $client_secret;
24
- $this->callback_uri = $callback_uri;
25
- $this->token_url = "https://login.live.com/oauth20_token.srf";
26
- parent::__construct($client_id, $client_secret, $authorization_token, $callback_uri);
27
  }
28
-
29
  // This function return the verification code after successfull authentication
30
  public function get_token_code($transactionId) {
31
- $configurations = array(
32
- "response_type" => "code",
33
- "redirect_uri" => urlencode($this->callback_uri),
34
- "client_id" => $this->client_id,
35
- "client_secret" => $this->client_secret,
36
- "scope" => urlencode("wl.imap,wl.offline_access"),
37
- "access_type" => "offline",
38
- "approval_prompt" => "force"
39
- );
40
- $oauth_url = "https://login.live.com/oauth20_authorize.srf?" . build_query($configurations);
41
- echo $oauth_url;
42
  }
43
-
44
  // This function proccess the grant code
45
  public function process_token_Code($transactionId) {
46
- if (isset($_REQUEST["access_token"])) {
47
- $code = esc_attr($_REQUEST["access_token"]);
48
- $configurations = array(
49
- "client_id" => $this->client_id,
50
- "client_secret" => $this->client_secret,
51
- "grant_type" => "authorization_code",
52
- "redirect_uri" => $this->callback_uri,
53
- "code" => $code
54
- );
55
- $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($this->token_url, $configurations);
56
- $microsoft_secret_key = $this->process_response($response);
57
- if (isset($microsoft_secret_key->error)) {
58
- return $microsoft_secret_key;
59
- } else {
60
- $this->get_authorization_token()->set_vendorname_mail_bank("microsoft");
61
- return "1";
62
- }
63
- } else {
64
- return false;
65
- }
66
  }
67
-
68
  }
69
-
70
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
9
  if (!class_exists("microsoft_authentication_mail_bank")) {
10
 
11
  class microsoft_authentication_mail_bank extends token_manager_mail_bank {
 
12
  public
13
+ $client_id,
14
+ $client_secret,
15
+ $callback_uri,
16
+ $token_url;
 
17
  //Constructor
18
  public function __construct($client_id, $client_secret, mail_bank_manage_token $authorization_token, $callback_uri) {
19
+ $this->client_id = $client_id;
20
+ $this->client_secret = $client_secret;
21
+ $this->callback_uri = $callback_uri;
22
+ $this->token_url = "https://login.live.com/oauth20_token.srf";
23
+ parent::__construct($client_id, $client_secret, $authorization_token, $callback_uri);
24
  }
 
25
  // This function return the verification code after successfull authentication
26
  public function get_token_code($transactionId) {
27
+ $configurations = array(
28
+ "response_type" => "code",
29
+ "redirect_uri" => urlencode($this->callback_uri),
30
+ "client_id" => $this->client_id,
31
+ "client_secret" => $this->client_secret,
32
+ "scope" => urlencode("wl.imap,wl.offline_access"),
33
+ "access_type" => "offline",
34
+ "approval_prompt" => "force"
35
+ );
36
+ $oauth_url = "https://login.live.com/oauth20_authorize.srf?" . build_query($configurations);
37
+ echo $oauth_url;
38
  }
 
39
  // This function proccess the grant code
40
  public function process_token_Code($transactionId) {
41
+ if (isset($_REQUEST["access_token"])) {
42
+ $code = esc_attr($_REQUEST["access_token"]);
43
+ $configurations = array(
44
+ "client_id" => $this->client_id,
45
+ "client_secret" => $this->client_secret,
46
+ "grant_type" => "authorization_code",
47
+ "redirect_uri" => $this->callback_uri,
48
+ "code" => $code
49
+ );
50
+ $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($this->token_url, $configurations);
51
+ $microsoft_secret_key = $this->process_response($response);
52
+ if (isset($microsoft_secret_key->error)) {
53
+ return $microsoft_secret_key;
54
+ } else {
55
+ $this->get_authorization_token()->set_vendorname_mail_bank("microsoft");
56
+ return "1";
57
+ }
58
+ } else {
59
+ return false;
60
+ }
61
  }
 
62
  }
 
63
  }
includes/queries.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * This file is used for fetching data from database.
5
  *
@@ -16,116 +15,113 @@ if (!is_user_logged_in()) {
16
  $access_granted = false;
17
  foreach ($user_role_permission as $permission) {
18
  if (current_user_can($permission)) {
19
- $access_granted = true;
20
- break;
21
  }
22
  }
23
  if (!$access_granted) {
24
  return;
25
  } else {
26
-
27
  function get_mail_bank_log_data_maybe_unserialize($data, $start_date, $end_date) {
28
- $array_details = array();
29
- foreach ($data as $raw_row) {
30
- $unserialize_data = maybe_unserialize($raw_row->meta_value);
31
- $unserialize_data["id"] = $raw_row->id;
32
- $unserialize_data["meta_id"] = $raw_row->meta_id;
33
- if ($unserialize_data["timestamp"] >= $start_date && $unserialize_data["timestamp"] <= $end_date)
34
- array_push($array_details, $unserialize_data);
35
- }
36
- return $array_details;
37
  }
38
-
39
  function get_mail_bank_meta_value($meta_key) {
40
- global $wpdb;
41
- $meta_value = $wpdb->get_var
42
- (
43
- $wpdb->prepare
44
- (
45
- "SELECT meta_value FROM " . mail_bank_meta() .
46
- " WHERE meta_key=%s", $meta_key
47
- )
48
- );
49
- return maybe_unserialize($meta_value);
50
  }
51
-
52
  if (isset($_GET["page"])) {
53
- switch (esc_attr($_GET["page"])) {
54
- case "mb_roles_and_capabilities":
55
- $details_roles_capabilities = get_mail_bank_meta_value("roles_and_capabilities");
56
- $other_roles_access_array = array(
57
- "manage_options",
58
- "edit_plugins",
59
- "edit_posts",
60
- "publish_posts",
61
- "publish_pages",
62
- "edit_pages",
63
- "read"
64
- );
65
- $other_roles_array = isset($details_roles_capabilities["capabilities"]) && $details_roles_capabilities["capabilities"] != "" ? $details_roles_capabilities["capabilities"] : $other_roles_access_array;
66
- break;
67
 
68
- case "mb_settings":
69
- $settings_data_array = get_mail_bank_meta_value("settings");
70
- break;
71
 
72
- case "mb_email_logs":
73
- $end_date = MAIL_BANK_LOCAL_TIME + 86400;
74
- $start_date = $end_date - 2678400;
75
- $email_logs_data = $wpdb->get_results
76
- (
77
- $wpdb->prepare
78
- (
79
- "SELECT * FROM " . mail_bank_meta() . "
80
  WHERE meta_key = %s ORDER BY id DESC", "email_logs"
81
- )
82
- );
83
- $unserialized_email_logs_data = get_mail_bank_log_data_maybe_unserialize($email_logs_data, $start_date, $end_date);
84
 
85
- break;
86
 
87
 
88
- case "mb_email_configuration":
89
 
90
- $email_configuration_array = get_mail_bank_meta_value("email_configuration");
91
- if (!empty($_REQUEST["access_token"])) {
92
- $code = esc_attr($_REQUEST["access_token"]);
93
- $update_email_configuration_data = get_option("update_email_configuration");
94
- $mail_bank_auth_host = new mail_bank_auth_host($update_email_configuration_data);
95
- if ($update_email_configuration_data["hostname"] == "smtp.gmail.com") {
96
- $test_secret_key_error = $mail_bank_auth_host->google_authentication_token($code);
97
- if (isset($test_secret_key_error->error)) {
98
- $test_secret_key_error = $test_secret_key_error->error_description;
99
- break;
100
- }
101
- } elseif (in_array($update_email_configuration_data["hostname"], $mail_bank_auth_host->yahoo_domains)) {
102
- $test_secret_key_error = $mail_bank_auth_host->yahoo_authentication_token($code);
103
- if (isset($test_secret_key_error->error)) {
104
- $test_secret_key_error = $test_secret_key_error->error_description;
105
- break;
106
- }
107
- } else {
108
- $test_secret_key_error = $mail_bank_auth_host->microsoft_authentication_token($code);
109
- if (isset($test_secret_key_error->error)) {
110
- $test_secret_key_error = $test_secret_key_error->error_description;
111
- break;
112
- }
113
- }
114
- $obj_dbHelper_mail_bank = new dbHelper_mail_bank();
115
 
116
- $update_email_configuration_array = array();
117
- $where = array();
118
- $where["meta_key"] = "email_configuration";
119
- $update_email_configuration_array["meta_value"] = serialize($update_email_configuration_data);
120
- $obj_dbHelper_mail_bank->updateCommand(mail_bank_meta(), $update_email_configuration_array, $where);
121
- if ($update_email_configuration_data["automatic_mail"] == 1) {
122
- $automatically_send_mail = "true";
123
- } else {
124
- $automatically_not_send_mail = "true";
125
- }
126
- }
127
- break;
128
- }
129
  }
130
  }
131
  }
1
  <?php
 
2
  /**
3
  * This file is used for fetching data from database.
4
  *
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
  }
21
  }
22
  if (!$access_granted) {
23
  return;
24
  } else {
 
25
  function get_mail_bank_log_data_maybe_unserialize($data, $start_date, $end_date) {
26
+ $array_details = array();
27
+ foreach ($data as $raw_row) {
28
+ $unserialize_data = maybe_unserialize($raw_row->meta_value);
29
+ $unserialize_data["id"] = $raw_row->id;
30
+ $unserialize_data["meta_id"] = $raw_row->meta_id;
31
+ if ($unserialize_data["timestamp"] >= $start_date && $unserialize_data["timestamp"] <= $end_date)
32
+ array_push($array_details, $unserialize_data);
33
+ }
34
+ return $array_details;
35
  }
 
36
  function get_mail_bank_meta_value($meta_key) {
37
+ global $wpdb;
38
+ $meta_value = $wpdb->get_var
39
+ (
40
+ $wpdb->prepare
41
+ (
42
+ "SELECT meta_value FROM " . mail_bank_meta() .
43
+ " WHERE meta_key=%s", $meta_key
44
+ )
45
+ );
46
+ return maybe_unserialize($meta_value);
47
  }
 
48
  if (isset($_GET["page"])) {
49
+ switch (esc_attr($_GET["page"])) {
50
+ case "mb_roles_and_capabilities":
51
+ $details_roles_capabilities = get_mail_bank_meta_value("roles_and_capabilities");
52
+ $other_roles_access_array = array(
53
+ "manage_options",
54
+ "edit_plugins",
55
+ "edit_posts",
56
+ "publish_posts",
57
+ "publish_pages",
58
+ "edit_pages",
59
+ "read"
60
+ );
61
+ $other_roles_array = isset($details_roles_capabilities["capabilities"]) && $details_roles_capabilities["capabilities"] != "" ? $details_roles_capabilities["capabilities"] : $other_roles_access_array;
62
+ break;
63
 
64
+ case "mb_settings":
65
+ $settings_data_array = get_mail_bank_meta_value("settings");
66
+ break;
67
 
68
+ case "mb_email_logs":
69
+ $end_date = MAIL_BANK_LOCAL_TIME + 86400;
70
+ $start_date = $end_date - 2678400;
71
+ $email_logs_data = $wpdb->get_results
72
+ (
73
+ $wpdb->prepare
74
+ (
75
+ "SELECT * FROM " . mail_bank_meta() . "
76
  WHERE meta_key = %s ORDER BY id DESC", "email_logs"
77
+ )
78
+ );
79
+ $unserialized_email_logs_data = get_mail_bank_log_data_maybe_unserialize($email_logs_data, $start_date, $end_date);
80
 
81
+ break;
82
 
83
 
84
+ case "mb_email_configuration":
85
 
86
+ $email_configuration_array = get_mail_bank_meta_value("email_configuration");
87
+ if (!empty($_REQUEST["access_token"])) {
88
+ $code = esc_attr($_REQUEST["access_token"]);
89
+ $update_email_configuration_data = get_option("update_email_configuration");
90
+ $mail_bank_auth_host = new mail_bank_auth_host($update_email_configuration_data);
91
+ if ($update_email_configuration_data["hostname"] == "smtp.gmail.com") {
92
+ $test_secret_key_error = $mail_bank_auth_host->google_authentication_token($code);
93
+ if (isset($test_secret_key_error->error)) {
94
+ $test_secret_key_error = $test_secret_key_error->error_description;
95
+ break;
96
+ }
97
+ } elseif (in_array($update_email_configuration_data["hostname"], $mail_bank_auth_host->yahoo_domains)) {
98
+ $test_secret_key_error = $mail_bank_auth_host->yahoo_authentication_token($code);
99
+ if (isset($test_secret_key_error->error)) {
100
+ $test_secret_key_error = $test_secret_key_error->error_description;
101
+ break;
102
+ }
103
+ } else {
104
+ $test_secret_key_error = $mail_bank_auth_host->microsoft_authentication_token($code);
105
+ if (isset($test_secret_key_error->error)) {
106
+ $test_secret_key_error = $test_secret_key_error->error_description;
107
+ break;
108
+ }
109
+ }
110
+ $obj_dbHelper_mail_bank = new dbHelper_mail_bank();
111
 
112
+ $update_email_configuration_array = array();
113
+ $where = array();
114
+ $where["meta_key"] = "email_configuration";
115
+ $update_email_configuration_array["meta_value"] = serialize($update_email_configuration_data);
116
+ $obj_dbHelper_mail_bank->updateCommand(mail_bank_meta(), $update_email_configuration_array, $where);
117
+ if ($update_email_configuration_data["automatic_mail"] == 1) {
118
+ $automatically_send_mail = "true";
119
+ } else {
120
+ $automatically_not_send_mail = "true";
121
+ }
122
+ }
123
+ break;
124
+ }
125
  }
126
  }
127
  }
includes/sidebar.php CHANGED
@@ -15,8 +15,8 @@ if (!is_user_logged_in()) {
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
- $access_granted = true;
19
- break;
20
  }
21
  }
22
  if (!$access_granted) {
@@ -26,133 +26,132 @@ if (!is_user_logged_in()) {
26
  <div class="page-sidebar-wrapper-tech-banker">
27
  <div class="page-sidebar-tech-banker navbar-collapse collapse">
28
  <div class="sidebar-menu-tech-banker">
29
- <ul class="page-sidebar-menu-tech-banker" data-slide-speed="200">
30
- <div class="sidebar-search-wrapper" style="padding:20px;text-align:center">
31
- <a class="plugin-logo" href="<?php echo tech_banker_beta_url; ?>" target="_blank">
32
- <img src="<?php echo plugins_url("assets/global/img/mail-bank-logo.png", dirname(__FILE__)); ?>" alt="Mail Bank">
33
- </a>
34
- </div>
35
- <li id="ux_mb_li_email_configuration">
36
- <a href="admin.php?page=mb_email_configuration">
37
- <i class="icon-custom-envelope-open"></i>
38
- <span class="title">
39
- <?php echo $mb_email_configuration; ?>
40
- </span>
41
- </a>
42
- </li>
43
- <li id="ux_mb_li_test_email">
44
- <a href="admin.php?page=mb_test_email">
45
- <i class="icon-custom-envelope "></i>
46
- <span class="title">
47
- <?php echo $mb_test_email; ?>
48
- </span>
49
- </a>
50
- </li>
51
- <li id="ux_mb_li_connectivity_test">
52
- <a href="admin.php?page=mb_connectivity_test">
53
- <i class="icon-custom-globe"></i>
54
- <span class="title">
55
- <?php echo $mb_connectivity_test; ?>
56
- </span>
57
- </a>
58
- </li>
59
- <li id="ux_mb_li_email_logs">
60
- <a href="admin.php?page=mb_email_logs">
61
- <i class="icon-custom-note"></i>
62
- <span class="title">
63
- <?php echo $mb_email_logs; ?>
64
- </span>
65
- <span class="badge">
66
- Pro
67
- </span>
68
- </a>
69
- </li>
70
- <li id="ux_mb_li_settings">
71
- <a href="admin.php?page=mb_settings">
72
- <i class="icon-custom-paper-clip"></i>
73
- <span class="title">
74
- <?php echo $mb_settings; ?>
75
- </span>
76
- </a>
77
- </li>
78
- <li id="ux_mb_li_roles_and_capabilities">
79
- <a href="admin.php?page=mb_roles_and_capabilities">
80
- <i class="icon-custom-user"></i>
81
- <span class="title">
82
- <?php echo $mb_roles_and_capabilities; ?>
83
- </span>
84
- <span class="badge">Pro</span>
85
- </a>
86
- </li>
87
- <li id="ux_mb_li_feedbacks">
88
- <a href="admin.php?page=mb_feedbacks">
89
- <i class="icon-custom-star"></i>
90
- <span class="title">
91
- <?php echo $mb_feedbacks; ?>
92
- </span>
93
- </a>
94
- </li>
95
- <li id="ux_mb_li_system_information">
96
- <a href="admin.php?page=mb_system_information">
97
- <i class="icon-custom-screen-desktop"></i>
98
- <span class="title">
99
- <?php echo $mb_system_information; ?>
100
- </span>
101
- </a>
102
- </li>
103
- <li class="" id="ux_li_upgrade">
104
- <a href="admin.php?page=mb_upgrade">
105
- <i class="icon-custom-briefcase"></i>
106
- <span class="title">
107
- <?php echo $mb_upgrade; ?>
108
- </span>
109
- </a>
110
- </li>
111
- </ul>
112
  </div>
113
  </div>
114
  </div>
115
  <div class="page-content-wrapper">
116
  <div class="page-content">
117
  <div style="margin-bottom:10px">
118
- <a href="http://beta.tech-banker.com/products/mail-bank/" target="_blank">
119
- <img src="<?php echo plugins_url("assets/global/img/mail-bank-banner.png", dirname(__FILE__)); ?>" title="Mail Bank" style="width: 100%;">
120
- </a>
121
  </div>
122
  <div class="container-fluid page-header-container">
123
- <div class="row">
124
- <div class="col-md-3 page-header-column">
125
- <h4>Get Started</h4>
126
- <a class="btn" href="#" target="_blank">Watch Video!</a>
127
- <p>or <a href="http://beta.tech-banker.com/products/mail-bank/user-guide/" target="_blank">read documentation here</a></p>
128
- </div>
129
- <div class="col-md-3 page-header-column">
130
- <h4>Go Premium</h4>
131
- <ul>
132
- <li><a href="http://beta.tech-banker.com/products/mail-bank/" target="_blank">Features</a></li>
133
- <li><a href="http://beta.tech-banker.com/products/mail-bank/demos/" target="_blank">Online Demos</a></li>
134
- <li><a href="http://beta.tech-banker.com/products/mail-bank/pricing/" target="_blank">Pricing Plans</a></li>
135
- </ul>
136
- </div>
137
- <div class="col-md-3 page-header-column">
138
- <h4>User Guide</h4>
139
- <ul>
140
- <li><a href="http://beta.tech-banker.com/products/mail-bank/user-guide/" target="_blank">Documentation</a></li>
141
- <li><a href="https://wordpress.org/support/plugin/wp-mail-bank" target="_blank">Support Question!</a></li>
142
- <li><a href="http://beta.tech-banker.com/contact-us/" target="_blank">Contact Us</a></li>
143
- </ul>
144
- </div>
145
- <div class="col-md-3 page-header-column">
146
- <h4>More Actions</h4>
147
- <ul>
148
- <li><a href="https://wordpress.org/support/plugin/wp-mail-bank/reviews/?filter=5" target="_blank">Rate Us!</a></li>
149
- <li><a href="http://beta.tech-banker.com/products/" target="_blank">Our Other Products</a></li>
150
- <li><a href="http://beta.tech-banker.com/services/" target="_blank">Our Other Services</a></li>
151
- </ul>
152
- </div>
153
- </div>
154
  </div>
155
- <?php
156
- }
157
- }
158
-
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
  }
21
  }
22
  if (!$access_granted) {
26
  <div class="page-sidebar-wrapper-tech-banker">
27
  <div class="page-sidebar-tech-banker navbar-collapse collapse">
28
  <div class="sidebar-menu-tech-banker">
29
+ <ul class="page-sidebar-menu-tech-banker" data-slide-speed="200">
30
+ <div class="sidebar-search-wrapper" style="padding:20px;text-align:center">
31
+ <a class="plugin-logo" href="<?php echo tech_banker_beta_url; ?>" target="_blank">
32
+ <img src="<?php echo plugins_url("assets/global/img/mail-bank-logo.png", dirname(__FILE__)); ?>" alt="Mail Bank">
33
+ </a>
34
+ </div>
35
+ <li id="ux_mb_li_email_configuration">
36
+ <a href="admin.php?page=mb_email_configuration">
37
+ <i class="icon-custom-envelope-open"></i>
38
+ <span class="title">
39
+ <?php echo $mb_email_configuration; ?>
40
+ </span>
41
+ </a>
42
+ </li>
43
+ <li id="ux_mb_li_test_email">
44
+ <a href="admin.php?page=mb_test_email">
45
+ <i class="icon-custom-envelope "></i>
46
+ <span class="title">
47
+ <?php echo $mb_test_email; ?>
48
+ </span>
49
+ </a>
50
+ </li>
51
+ <li id="ux_mb_li_connectivity_test">
52
+ <a href="admin.php?page=mb_connectivity_test">
53
+ <i class="icon-custom-globe"></i>
54
+ <span class="title">
55
+ <?php echo $mb_connectivity_test; ?>
56
+ </span>
57
+ </a>
58
+ </li>
59
+ <li id="ux_mb_li_email_logs">
60
+ <a href="admin.php?page=mb_email_logs">
61
+ <i class="icon-custom-note"></i>
62
+ <span class="title">
63
+ <?php echo $mb_email_logs; ?>
64
+ </span>
65
+ <span class="badge">
66
+ Pro
67
+ </span>
68
+ </a>
69
+ </li>
70
+ <li id="ux_mb_li_settings">
71
+ <a href="admin.php?page=mb_settings">
72
+ <i class="icon-custom-paper-clip"></i>
73
+ <span class="title">
74
+ <?php echo $mb_settings; ?>
75
+ </span>
76
+ </a>
77
+ </li>
78
+ <li id="ux_mb_li_roles_and_capabilities">
79
+ <a href="admin.php?page=mb_roles_and_capabilities">
80
+ <i class="icon-custom-user"></i>
81
+ <span class="title">
82
+ <?php echo $mb_roles_and_capabilities; ?>
83
+ </span>
84
+ <span class="badge">Pro</span>
85
+ </a>
86
+ </li>
87
+ <li id="ux_mb_li_feedbacks">
88
+ <a href="admin.php?page=mb_feedbacks">
89
+ <i class="icon-custom-star"></i>
90
+ <span class="title">
91
+ <?php echo $mb_feedbacks; ?>
92
+ </span>
93
+ </a>
94
+ </li>
95
+ <li id="ux_mb_li_system_information">
96
+ <a href="admin.php?page=mb_system_information">
97
+ <i class="icon-custom-screen-desktop"></i>
98
+ <span class="title">
99
+ <?php echo $mb_system_information; ?>
100
+ </span>
101
+ </a>
102
+ </li>
103
+ <li class="" id="ux_li_upgrade">
104
+ <a href="admin.php?page=mb_upgrade">
105
+ <i class="icon-custom-briefcase"></i>
106
+ <span class="title">
107
+ <?php echo $mb_upgrade; ?>
108
+ </span>
109
+ </a>
110
+ </li>
111
+ </ul>
112
  </div>
113
  </div>
114
  </div>
115
  <div class="page-content-wrapper">
116
  <div class="page-content">
117
  <div style="margin-bottom:10px">
118
+ <a href="http://beta.tech-banker.com/products/mail-bank/" target="_blank">
119
+ <img src="<?php echo plugins_url("assets/global/img/mail-bank-banner.png", dirname(__FILE__)); ?>" title="Mail Bank" style="width: 100%;">
120
+ </a>
121
  </div>
122
  <div class="container-fluid page-header-container">
123
+ <div class="row">
124
+ <div class="col-md-3 page-header-column">
125
+ <h4>Get Started</h4>
126
+ <a class="btn" href="#" target="_blank">Watch Video!</a>
127
+ <p>or <a href="http://beta.tech-banker.com/products/mail-bank/user-guide/" target="_blank">read documentation here</a></p>
128
+ </div>
129
+ <div class="col-md-3 page-header-column">
130
+ <h4>Go Premium</h4>
131
+ <ul>
132
+ <li><a href="http://beta.tech-banker.com/products/mail-bank/" target="_blank">Features</a></li>
133
+ <li><a href="http://beta.tech-banker.com/products/mail-bank/demos/" target="_blank">Online Demos</a></li>
134
+ <li><a href="http://beta.tech-banker.com/products/mail-bank/pricing/" target="_blank">Pricing Plans</a></li>
135
+ </ul>
136
+ </div>
137
+ <div class="col-md-3 page-header-column">
138
+ <h4>User Guide</h4>
139
+ <ul>
140
+ <li><a href="http://beta.tech-banker.com/products/mail-bank/user-guide/" target="_blank">Documentation</a></li>
141
+ <li><a href="https://wordpress.org/support/plugin/wp-mail-bank" target="_blank">Support Question!</a></li>
142
+ <li><a href="http://beta.tech-banker.com/contact-us/" target="_blank">Contact Us</a></li>
143
+ </ul>
144
+ </div>
145
+ <div class="col-md-3 page-header-column">
146
+ <h4>More Actions</h4>
147
+ <ul>
148
+ <li><a href="https://wordpress.org/support/plugin/wp-mail-bank/reviews/?filter=5" target="_blank">Rate Us!</a></li>
149
+ <li><a href="http://beta.tech-banker.com/products/" target="_blank">Our Other Products</a></li>
150
+ <li><a href="http://beta.tech-banker.com/services/" target="_blank">Our Other Services</a></li>
151
+ </ul>
152
+ </div>
153
+ </div>
154
  </div>
155
+ <?php
156
+ }
157
+ }
 
includes/token-manager-mail-bank.php CHANGED
@@ -1,90 +1,80 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
6
  if (!class_exists("token_manager_mail_bank")) {
7
 
8
  class token_manager_mail_bank {
9
-
10
  public
11
- $client_id,
12
- $client_secret,
13
- $authorization_token,
14
- $callback_uri;
15
-
16
  // Constructor
17
  public function __construct($client_id, $client_secret, mail_bank_manage_token $authorization_token, $callback_uri) {
18
- $this->client_id = $client_id;
19
- $this->client_secret = $client_secret;
20
- $this->authorization_token = $authorization_token;
21
- $this->callback_uri = $callback_uri;
22
  }
23
-
24
  public function get_authorization_token() {
25
- return $this->authorization_token;
26
  }
27
-
28
  public function check_access_token() {
29
- $expiry_time = ($this->authorization_token->retrieve_token_expiry_time_mail_bank() - 60);
30
- $token_expired = time() > $expiry_time;
31
- return $token_expired;
32
  }
33
-
34
  // Decoded the received token
35
  public function process_response($response) {
36
- $oauth_token = json_decode(stripslashes($response));
37
- if ($oauth_token === NULL) {
38
- throw new Exception($response);
39
- } elseif (isset($oauth_token->{"error"})) {
40
- if (isset($oauth_token->{"error_description"})) {
41
- return $oauth_token;
42
- } else {
43
- throw new Exception($oauth_token->{"error"});
44
- }
45
- } else {
46
- $this->receive_decode_authorization_token($oauth_token);
47
- }
48
  }
49
-
50
  //This function is used to extracts values(expiry time, accesstoken, refresh token)
51
  public function receive_decode_authorization_token($new_token) {
52
- // Update expiry time
53
- if (empty($new_token->{"expires_in"})) {
54
- throw new Exception("[expires_in] value is missing from token");
55
- }
56
- $changed_expiry_time = time() + $new_token->{"expires_in"};
57
- $this->get_authorization_token()->set_token_expirytime_mail_bank($changed_expiry_time);
58
 
59
- // Update access token
60
- if (empty($new_token->{"access_token"})) {
61
- throw new Exception("[access_token] value is missing from token");
62
- }
63
- $new_access_token = $new_token->{"access_token"};
64
- $this->get_authorization_token()->set_access_token_mail_bank($new_access_token);
65
 
66
- // Update refresh token
67
- if (isset($new_token->{"refresh_token"})) {
68
- $new_refresh_token = $new_token->{"refresh_token"};
69
- $this->get_authorization_token()->set_refresh_token_mail_bank($new_refresh_token);
70
- }
71
  }
72
-
73
  // get_refresh_token function is used to give specific URL and redirectUri to refresh the access token.
74
  public function get_refresh_token() {
75
- $refresh_uri = $this->token_url;
76
- $callback_uri = $this->callback_uri;
77
- $configurations = array(
78
- "client_id" => $this->client_id,
79
- "client_secret" => $this->client_secret,
80
- "redirect_uri" => $callback_uri,
81
- "grant_type" => "refresh_token",
82
- "refresh_token" => $this->get_authorization_token()->retrieve_refresh_token_mail_bank()
83
- );
84
- $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($refresh_uri, $configurations);
85
- $this->process_response($response);
86
  }
87
-
88
  }
89
-
90
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
5
  if (!class_exists("token_manager_mail_bank")) {
6
 
7
  class token_manager_mail_bank {
 
8
  public
9
+ $client_id,
10
+ $client_secret,
11
+ $authorization_token,
12
+ $callback_uri;
 
13
  // Constructor
14
  public function __construct($client_id, $client_secret, mail_bank_manage_token $authorization_token, $callback_uri) {
15
+ $this->client_id = $client_id;
16
+ $this->client_secret = $client_secret;
17
+ $this->authorization_token = $authorization_token;
18
+ $this->callback_uri = $callback_uri;
19
  }
 
20
  public function get_authorization_token() {
21
+ return $this->authorization_token;
22
  }
 
23
  public function check_access_token() {
24
+ $expiry_time = ($this->authorization_token->retrieve_token_expiry_time_mail_bank() - 60);
25
+ $token_expired = time() > $expiry_time;
26
+ return $token_expired;
27
  }
 
28
  // Decoded the received token
29
  public function process_response($response) {
30
+ $oauth_token = json_decode(stripslashes($response));
31
+ if ($oauth_token === NULL) {
32
+ throw new Exception($response);
33
+ } elseif (isset($oauth_token->{"error"})) {
34
+ if (isset($oauth_token->{"error_description"})) {
35
+ return $oauth_token;
36
+ } else {
37
+ throw new Exception($oauth_token->{"error"});
38
+ }
39
+ } else {
40
+ $this->receive_decode_authorization_token($oauth_token);
41
+ }
42
  }
 
43
  //This function is used to extracts values(expiry time, accesstoken, refresh token)
44
  public function receive_decode_authorization_token($new_token) {
45
+ // Update expiry time
46
+ if (empty($new_token->{"expires_in"})) {
47
+ throw new Exception("[expires_in] value is missing from token");
48
+ }
49
+ $changed_expiry_time = time() + $new_token->{"expires_in"};
50
+ $this->get_authorization_token()->set_token_expirytime_mail_bank($changed_expiry_time);
51
 
52
+ // Update access token
53
+ if (empty($new_token->{"access_token"})) {
54
+ throw new Exception("[access_token] value is missing from token");
55
+ }
56
+ $new_access_token = $new_token->{"access_token"};
57
+ $this->get_authorization_token()->set_access_token_mail_bank($new_access_token);
58
 
59
+ // Update refresh token
60
+ if (isset($new_token->{"refresh_token"})) {
61
+ $new_refresh_token = $new_token->{"refresh_token"};
62
+ $this->get_authorization_token()->set_refresh_token_mail_bank($new_refresh_token);
63
+ }
64
  }
 
65
  // get_refresh_token function is used to give specific URL and redirectUri to refresh the access token.
66
  public function get_refresh_token() {
67
+ $refresh_uri = $this->token_url;
68
+ $callback_uri = $this->callback_uri;
69
+ $configurations = array(
70
+ "client_id" => $this->client_id,
71
+ "client_secret" => $this->client_secret,
72
+ "redirect_uri" => $callback_uri,
73
+ "grant_type" => "refresh_token",
74
+ "refresh_token" => $this->get_authorization_token()->retrieve_refresh_token_mail_bank()
75
+ );
76
+ $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($refresh_uri, $configurations);
77
+ $this->process_response($response);
78
  }
 
79
  }
 
80
  }
includes/translations.php CHANGED
@@ -1,411 +1,411 @@
1
- <?php
2
- /**
3
- * This file is used for translation strings.
4
- *
5
- * @author Tech Banker
6
- * @package wp-mail-bank/includes
7
- * @version 2.0.0
8
- */
9
- if (!defined("ABSPATH")) {
10
- exit;
11
- }// Exit if accessed directly
12
- if (!is_user_logged_in()) {
13
- return;
14
- } else {
15
- $access_granted = false;
16
- foreach ($user_role_permission as $permission) {
17
- if (current_user_can($permission)) {
18
- $access_granted = true;
19
- break;
20
- }
21
- }
22
- if (!$access_granted) {
23
- return;
24
- } else {
25
- $wp_langs = array();
26
- $wp_langs["af"] = "Afrikaans";
27
- $wp_langs["ak"] = "Akan";
28
- $wp_langs["sq"] = "Shqip";
29
- $wp_langs["arq"] = "الدارجة الجزايرية";
30
- $wp_langs["am"] = "አማርኛ";
31
- $wp_langs["hy"] = "Հայերեն";
32
- $wp_langs["rup_mk"] = "Armãneashce";
33
- $wp_langs["frp"] = "Arpitan";
34
- $wp_langs["as"] = "অসমীয়া";
35
- $wp_langs["ast"] = "Asturianu";
36
- $wp_langs["az"] = "Azərbaycan dili";
37
- $wp_langs["az_tr"] = "Azərbaycan Türkcəsi";
38
- $wp_langs["bcc"] = "بلوچی مکرانی";
39
- $wp_langs["ba"] = "башҡорт теле";
40
- $wp_langs["eu"] = "Euskara";
41
- $wp_langs["bel"] = "Беларуская мова";
42
- $wp_langs["bn_bd"] = "বাংলা";
43
- $wp_langs["bs_ba"] = "Bosanski";
44
- $wp_langs["bre"] = "Brezhoneg";
45
- $wp_langs["bg_bg"] = "Български";
46
- $wp_langs["ca"] = "Català";
47
- $wp_langs["bal"] = "Català (Balear)";
48
- $wp_langs["ceb"] = "Cebuano";
49
- $wp_langs["zh_hk"] = "香港中文版 ";
50
- $wp_langs["zh_tw"] = "繁體中文";
51
- $wp_langs["co"] = "Corsu";
52
- $wp_langs["hr"] = "Hrvatski";
53
- $wp_langs["dv"] = "ދިވެހި";
54
- $wp_langs["nl_be"] = "Nederlands (België)";
55
- $wp_langs["dzo"] = "རྫོང་ཁ";
56
- $wp_langs["eo"] = "Esperanto";
57
- $wp_langs["et"] = "Eesti";
58
- $wp_langs["fo"] = "Føroyskt";
59
- $wp_langs["fi"] = "Suomi";
60
- $wp_langs["fr_be"] = "Français de Belgique";
61
- $wp_langs["fr_ca"] = "Français du Canada";
62
- $wp_langs["fy"] = "Frysk";
63
- $wp_langs["fur"] = "Friulian";
64
- $wp_langs["fuc"] = "Pulaar";
65
- $wp_langs["gl_es"] = "Galego";
66
- $wp_langs["ka_ge"] = "ქართული";
67
- $wp_langs["de_ch"] = "Deutsch (Schweiz)";
68
- $wp_langs["kal"] = "Kalaallisut";
69
- $wp_langs["gn"] = "Avañe'ẽ";
70
- $wp_langs["gu"] = "ગુજરાતી";
71
- $wp_langs["hat"] = "Kreyol ayisyen";
72
- $wp_langs["haw_us"] = "Ōlelo Hawaiʻi";
73
- $wp_langs["haz"] = "هزاره گی";
74
- $wp_langs["hi_in"] = "हिन्दी";
75
- $wp_langs["is_is"] = "Íslenska";
76
- $wp_langs["ido"] = "Ido";
77
- $wp_langs["id_id"] = "Bahasa Indonesia";
78
- $wp_langs["ga"] = "Gaelige";
79
- $wp_langs["it_it"] = "Italiano";
80
- $wp_langs["ja"] = "日本語";
81
- $wp_langs["jv_id"] = "Basa Jawa";
82
- $wp_langs["kab"] = "Taqbaylit";
83
- $wp_langs["kn"] = "ಕನ್ನಡ";
84
- $wp_langs["kk"] = "Қазақ тілі";
85
- $wp_langs["km"] = "ភាសាខ្មែរ";
86
- $wp_langs["kin"] = "Ikinyarwanda";
87
- $wp_langs["ky_ky"] = "кыргыз тили";
88
- $wp_langs["ko_kr"] = "한국어";
89
- $wp_langs["ckb"] = "كوردی‎";
90
- $wp_langs["lo"] = "ພາສາລາວ";
91
- $wp_langs["lv"] = "Latviešu valoda";
92
- $wp_langs["li"] = "Limburgs";
93
- $wp_langs["lin"] = "Ngala";
94
- $wp_langs["lt_lt"] = "Lietuvių kalba";
95
- $wp_langs["lb_lu"] = "Lëtzebuergesch";
96
- $wp_langs["mk_mk"] = "Македонски јазик";
97
- $wp_langs["mg_mg"] = "Malagasy";
98
- $wp_langs["ms_my"] = "Bahasa Melayu";
99
- $wp_langs["ml_in"] = "മലയാളം";
100
- $wp_langs["mri"] = "Te Reo Māori";
101
- $wp_langs["mr"] = "मराठी";
102
- $wp_langs["xmf"] = "მარგალური ნინა";
103
- $wp_langs["mn"] = "Монгол";
104
- $wp_langs["me_me"] = "Crnogorski jezik";
105
- $wp_langs["ary"] = "العربية المغربية";
106
- $wp_langs["my_mm"] = "ဗမာစာ";
107
- $wp_langs["ne_np"] = "नेपाली";
108
- $wp_langs["nn_no"] = "Norsk nynorsk";
109
- $wp_langs["oci"] = "Occitan";
110
- $wp_langs["ory"] = "ଓଡ଼ିଆ";
111
- $wp_langs["os"] = "Ирон";
112
- $wp_langs["ps"] = "پښتو";
113
- $wp_langs["fa_ir"] = "فارسی";
114
- $wp_langs["fa_af"] = "(فارسی (افغانستان";
115
- $wp_langs["pl_pl"] = "Polski";
116
- $wp_langs["pa_in"] = "ਪੰਜਾਬੀ";
117
- $wp_langs["rhg"] = "Ruáinga";
118
- $wp_langs["roh"] = "Rumantsch Vallader";
119
- $wp_langs["rue"] = "Русиньскый";
120
- $wp_langs["sah"] = "Сахалыы";
121
- $wp_langs["sa_in"] = "भारतम्";
122
- $wp_langs["srd"] = "Sardu";
123
- $wp_langs["gd"] = "Gàidhlig";
124
- $wp_langs["sr_rs"] = "Српски језик";
125
- $wp_langs["szl"] = "Ślōnskŏ gŏdka";
126
- $wp_langs["snd"] = "سنڌي";
127
- $wp_langs["si_lk"] = "සිංහල";
128
- $wp_langs["sk_sk"] = "Slovenčina";
129
- $wp_langs["sl_si"] = "Slovenščina";
130
- $wp_langs["so_so"] = "Afsoomaali";
131
- $wp_langs["azb"] = "گؤنئی آذربایجان";
132
- $wp_langs["es_ar"] = "Español de Argentina";
133
- $wp_langs["es_cl"] = "Español de Chile";
134
- $wp_langs["es_co"] = "Español de Colombia";
135
- $wp_langs["es_gt"] = "Español de Guatemala";
136
- $wp_langs["es_pe"] = "Español de Perú";
137
- $wp_langs["es_pr"] = "Español de Puerto Rico";
138
- $wp_langs["es_es"] = "Español";
139
- $wp_langs["es_ve"] = "Español de Venezuela";
140
- $wp_langs["su_id"] = "Basa Sunda";
141
- $wp_langs["sw"] = "Kiswahili";
142
- $wp_langs["gsw"] = "Schwyzerdütsch";
143
- $wp_langs["tl"] = "Tagalog";
144
- $wp_langs["tah"] = "Reo Tahiti";
145
- $wp_langs["tg"] = "Тоҷикӣ";
146
- $wp_langs["tzm"] = "ⵜⴰⵎⴰⵣⵉⵖⵜ";
147
- $wp_langs["ta_in"] = "தமிழ்";
148
- $wp_langs["ta_lk"] = "தமிழ்";
149
- $wp_langs["tt_ru"] = "Татар теле";
150
- $wp_langs["te"] = "తెలుగు";
151
- $wp_langs["bo"] = "བོད་སྐད";
152
- $wp_langs["tir"] = "ትግርኛ";
153
- $wp_langs["tuk"] = "Türkmençe";
154
- $wp_langs["twd"] = "Twents";
155
- $wp_langs["ug_cn"] = "Uyƣurqə";
156
- $wp_langs["ur"] = "اردو";
157
- $wp_langs["uz_uz"] = "O‘zbekcha";
158
- $wp_langs["wa"] = "Walon";
159
- $wp_langs["cy"] = "Cymraeg";
160
- $wp_langs["yor"] = "Yorùbá";
161
- $locale = strtolower(get_locale());
162
- if (array_key_exists("$locale", $wp_langs)) {
163
- $language = $wp_langs["$locale"];
164
- $mb_message_translate_help = __("If you would like to translate in $language & help the wordpress community, please fill in the form ", "wp-mail-bank");
165
- $mb_message_translate_here = __("here.", "wp-mail-bank");
166
- } else {
167
- $mb_message_translate_help = "";
168
- $mb_kindly_click = "";
169
- $mb_message_translate_here = "";
170
- }
171
-
172
- //Disclaimer
173
- $mb_upgrade = __("Upgrade", "wp-mail-bank");
174
- $mb_premium_edition_label = __("Premium Edition", "wp-mail-bank");
175
- $mb_message_premium_edition = __("This feature is available only in Premium Editions! <br> Kindly Purchase to unlock it!", "wp-mail-bank");
176
-
177
-
178
- //wizard
179
- $mb_wizard_basic_info = __("Basic Info", "wp-mail-bank");
180
- $mb_wizard_account_setup = __("Account Setup", "wp-mail-bank");
181
- $mb_wizard_confirm = __("Confirm", "wp-mail-bank");
182
-
183
- // Menus
184
- $wp_mail_bank = __("Mail Bank", "wp-mail-bank");
185
- $mb_email_configuration = __("Email Setup", "wp-mail-bank");
186
- $mb_email_logs = __("Email Logs", "wp-mail-bank");
187
- $mb_test_email = __("Test Email", "wp-mail-bank");
188
- $mb_settings = __("Plugin Settings", "wp-mail-bank");
189
- $mb_feedbacks = __("Feedbacks", "wp-mail-bank");
190
- $mb_roles_and_capabilities = __("Roles & Capabilities", "wp-mail-bank");
191
- $mb_system_information = __("System Information", "wp-mail-bank");
192
-
193
- // Footer
194
- $mb_success = __("Success!", "wp-mail-bank");
195
- $mb_update_email_configuration = __("Email Setup has been updated Successfully", "wp-mail-bank");
196
- $mb_update_feedbacks = __("Your Feedback has been sent Successfully", "wp-mail-bank");
197
- $mb_test_email_sent = __("Test Email was sent Successfully!", "wp-mail-bank");
198
- $mb_test_email_not_send = __("Test Email was not sent!", "wp-mail-bank");
199
- $mb_update_settings = __("Plugin Settings have been updated Successfully", "wp-mail-bank");
200
- $oauth_not_supported = __("The OAuth is not supported by providing SMTP Host, kindly provide username and password", "wp-mail-bank");
201
- $mb_popup_query = __("Query", "wp-mail-bank");
202
- $mb_language_interested_to_translate = __("Language Interested to Translate", "wp-mail-bank");
203
- $mb_language_interested_to_translate_tooltip = __("Please enter the language you want to translate.", "wp-mail-bank");
204
- $mb_language_interested_to_translate_placeholder = __("Please enter the language", "wp-mail-bank");
205
- $mb_popup_your_name_tooltip = __("In this field, You would need to provide your name which will be sent along with your request", "wp-mail-bank");
206
- $mb_important_disclaimer = __("Important Disclaimer!", "wp-mail-bank");
207
- $mb_popup_your_email_tooltip = __("In this field, You would need to provide your valid email which wiil be sent along with your request", "wp-mail-bank");
208
- $mb_popup_query_tooltip = __("Please enter your query.", "wp-mail-bank");
209
- $mb_popup_query_placeholder = __("Please enter the query.", "wp-mail-bank");
210
- $mb_manage_backups_close = __("Close", "wp-mail-bank");
211
- $mb_feature_requests_send_request = __("Send Request", "wp-mail-bank");
212
- $mb_translation_request = __("Translation Request", "wp-mail-bank");
213
- $mb_confirm_close = __("Are you sure you want to close without sending Translation Request?", "wp-mail-bank");
214
- $mb_feature_requests_your_email = __("Your Email", "wp-mail-bank");
215
- $mb_feature_requests_your_name = __("Your Name", "wp-mail-bank");
216
- $mb_feature_requests_your_name_placeholder = __("Please provide your Name", "wp-mail-bank");
217
-
218
-
219
- // Common Variables
220
- $mb_status_sent = __("Sent", "wp-mail-bank");
221
- $mb_status_not_sent = __("Not Sent", "wp-mail-bank");
222
- $mb_user_access_message = __("You don't have Sufficient Access to this Page. Kindly contact the Administrator for more Privileges", "wp-mail-bank");
223
- $mb_enable = __("Enable", "wp-mail-bank");
224
- $mb_disable = __("Disable", "wp-mail-bank");
225
- $mb_override = __("Override", "wp-mail-bank");
226
- $mb_dont_override = __("Don't Override", "wp-mail-bank");
227
- $mb_save_changes = __("Save Settings", "wp-mail-bank");
228
- $mb_subject = __("Subject", "wp-mail-bank");
229
- $mb_next_step = __("Next Step", "wp-mail-bank");
230
- $mb_previous_step = __("Previous Step", "wp-mail-bank");
231
- $mb_upgrade_to = __("Upgrade to Premium Editions", "wp-mail-bank");
232
-
233
- // Email Setup
234
- $mb_email_configuration_cc_label = __("Cc", "wp-mail-bank");
235
- $mb_email_configuration_bcc_label = __("Bcc", "wp-mail-bank");
236
- $mb_email_configuration_cc_email_address_tooltip = __("Please provide valid Cc Email Address", "wp-mail-bank");
237
- $mb_email_configuration_bcc_email_address_tooltip = __("Please provide valid Bcc Email Address", "wp-mail-bank");
238
- $mb_email_configuration_cc_email_placeholder = __("Please provide Cc Email", "wp-mail-bank");
239
- $mb_email_configuration_bcc_email_placeholder = __("Please provide Bcc Email", "wp-mail-bank");
240
- $mb_email_configuration_mailer_settings_tab = __("Mailer Settings", "wp-mail-bank");
241
- $mb_email_configuration_test_email_tab = __("Test Email", "wp-mail-bank");
242
- $mb_email_configuration_from_name = __("From Name", "wp-mail-bank");
243
- $mb_email_configuration_from_name_tooltip = __("From Name is the inbox field that tells your recipient who sent the messages. If you would like to override the pre-configured From Name, then you would need to insert the name in the inbox field", "wp-mail-bank");
244
- $mb_email_configuration_from_name_placeholder = __("Please provide From Name", "wp-mail-bank");
245
- $mb_email_configuration_from_email = __("From Email", "wp-mail-bank");
246
- $mb_email_address_tooltip = __("From Email is the inbox field that tells your recipient from which Email Address the messages are coming. If you would like to override the pre-configured From Email, then you would need to insert an Email Address in the inbox field", "wp-mail-bank");
247
- $mb_email_configuration_from_email_placeholder = __("Please provide From Email Address", "wp-mail-bank");
248
- $mb_email_configuration_mailer_type = __("Mailer Type", "wp-mail-bank");
249
- $mb_email_configuration_mailer_type_tooltip = __("This field provides you an ability to choose a specific option for Mailer Type. If you would like to send an Email via SMTP mailer, you would need to select Send Email via SMTP from the drop down or you could use PHP mail () Function", "wp-mail-bank");
250
- $mb_email_configuration_send_email_via_smtp = __("Send Email via SMTP", "wp-mail-bank");
251
- $mb_email_configuration_use_php_mail_function = __("Use The PHP mail() Function", "wp-mail-bank");
252
- $mb_email_configuration_smtp_host = __("SMTP Host", "wp-mail-bank");
253
- $mb_email_configuration_smtp_host_tooltip = __("If you would like to send an Email via different host, you would need to insert that specific host name like smtp.gmail.com in the inbox field", "wp-mail-bank");
254
- $mb_feature_requests_your_email_placeholder = __("Please provide your Email Address", "wp-mail-bank");
255
- $mb_email_configuration_smtp_host_placeholder = __("Please provide SMTP Host", "wp-mail-bank");
256
- $mb_email_configuration_smtp_port = __("SMTP Port", "wp-mail-bank");
257
- $mb_email_configuration_smtp_port_tooltip = __("This inbox field is specified to provide a valid SMTP Port for authentication", "wp-mail-bank");
258
- $mb_email_configuration_smtp_port_placeholder = __("Please provide SMTP Port", "wp-mail-bank");
259
- $mb_email_configuration_encryption = __("Encryption", "wp-mail-bank");
260
- $mb_email_configuration_encryption_tooltip = __("It provides you an ability to choose a specific option for Encryption. If you would like to send an Email with TLS encryption, you would need to select Use TLS Encryption from the drop down or you could use SSL Encryption. For that you would need to select Use SSL Encryption from the drop down. If you would like to send an Email without encryption, you would need to select No Encryption from the drop down", "wp-mail-bank");
261
- $mb_email_configuration_no_encryption = __("No Encryption", "wp-mail-bank");
262
- $mb_email_configuration_use_ssl_encryption = __("Use SSL Encryption", "wp-mail-bank");
263
- $mb_email_configuration_use_tls_encryption = __("Use TLS Encryption", "wp-mail-bank");
264
- $mb_email_configuration_authentication = __("Authentication", "wp-mail-bank");
265
- $mb_email_configuration_authentication_tooltip = __("This inbox field allows you to choose an appropriate option for authentication. It provides you the Two-way authentication factor; If you would like to authenticate yourself via Username and Password, you would need to select Use Username and Password from the drop down. You can also authenticate by an OAuth 2.0 protocol, which requires Client Id and Secret Key, for that you would need to select Use OAuth (Client ID and Secret Key) from the drop down. You can easily get Client Id and Secret Key from respective SMTP Server Developers section", "wp-mail-bank");
266
- $mb_email_configuration_use_smtp_authentication = __("Use SMTP Authentication", "wp-mail-bank");
267
- $mb_email_configuration_donot_use_authentication = __("Don't Use SMTP Authentication", "wp-mail-bank");
268
- $mb_email_configuration_test_email_address = __("Test Email Address", "wp-mail-bank");
269
- $mb_email_configuration_test_email_address_tooltip = __("In this field, you would need to provide a valid Email Address in the inbox field on which you would like to receive Test email", "wp-mail-bank");
270
- $mb_email_configuration_test_email_address_placeholder = __("Please provide Test Email Address", "wp-mail-bank");
271
- $mb_email_configuration_subject_test_tooltip = __("In this field, you would need to provide a subject for Test Email", "wp-mail-bank");
272
- $mb_email_configuration_subject_test_placeholder = __("Please provide Subject", "wp-mail-bank");
273
- $mb_email_configuration_content = __("Email Content", "wp-mail-bank");
274
- $mb_email_configuration_content_tooltip = __("In this field, you would need to provide the content for Test Email", "wp-mail-bank");
275
- $mb_email_configuration_send_test_email = __("Send Test Email", "wp-mail-bank");
276
- $mb_email_configuration_smtp_debugging_output = __("SMTP Debugging Output", "wp-mail-bank");
277
- $mb_email_configuration_send_test_email_textarea = __("Checking your settings", "wp-mail-bank");
278
- $mb_email_configuration_result = __("Result", "wp-mail-bank");
279
- $mb_email_configuration_send_another_test_email = __("Send Another Test Email", "wp-mail-bank");
280
- $mb_email_configuration_enable_from_name = __("From Name Configuration", "wp-mail-bank");
281
- $mb_email_configuration_enable_from_name_tooltip = __("If you would like to override the pre-configured name which will be used while sending Emails, then you would need to choose Override from the drop down and vice-versa", "wp-mail-bank");
282
- $mb_email_configuration_enable_from_email = __("From Email Configuration", "wp-mail-bank");
283
- $mb_email_configuration_enable_from_email_tooltip = __("If you would like to override your pre-configured Email Address which will be used while sending Emails, then you would need to choose Override from the drop down and vice-versa", "wp-mail-bank");
284
- $mb_email_configuration_username = __("Username", "wp-mail-bank");
285
- $mb_email_configuration_username_tooltip = __("In this field, you would need to provide a username to authenticate your SMTP details", "wp-mail-bank");
286
- $mb_email_configuration_username_placeholder = __("Please provide username", "wp-mail-bank");
287
- $mb_email_configuration_password = __("Password", "wp-mail-bank");
288
- $mb_email_configuration_password_tooltip = __("In this field, you would need to provide a password to authenticate your SMTP details", "wp-mail-bank");
289
- $mb_email_configuration_password_placeholder = __("Please provide password", "wp-mail-bank");
290
- $mb_email_configuration_redirect_uri = __("Redirect URI", "wp-mail-bank");
291
- $mb_email_configuration_redirect_uri_tooltip = __("Please copy this Redirect URI and Paste into Redirect URI field when creating your app", "wp-mail-bank");
292
- $mb_email_configuration_use_oauth = __("Use OAuth (Client Id and Secret Key required)", "wp-mail-bank");
293
- $mb_email_configuration_none = __("None", "wp-mail-bank");
294
- $mb_email_configuration_use_plain_authentication = __("Plain Authentication", "wp-mail-bank");
295
- $mb_email_configuration_cram_md5 = __("Cram-MD5", "wp-mail-bank");
296
- $mb_email_configuration_login = __("Login", "wp-mail-bank");
297
- $mb_email_configuration_client_id = __("Client Id", "wp-mail-bank");
298
- $mb_email_configuration_client_secret = __("Secret Key", "wp-mail-bank");
299
- $mb_email_configuration_client_id_tooltip = __("Please provide valid Client Id issued by your SMTP Host", "wp-mail-bank");
300
- $mb_email_configuration_client_secret_tooltip = __("Please provide valid Secret Key issued by your SMTP Host", "wp-mail-bank");
301
- $mb_email_configuration_client_id_placeholder = __("Please provide Client Id", "wp-mail-bank");
302
- $mb_email_configuration_client_secret_placeholder = __("Please provide Secret Key", "wp-mail-bank");
303
- $mb_email_configuration_tick_for_sent_mail = __("Yes, automatically send a Test Email upon clicking on the Next Step Button to verify settings", "wp-mail-bank");
304
- $mb_email_configuration_email_address = __("Email Address", "wp-mail-bank");
305
- $mb_email_configuration_email_address_tooltip = __("In this field, you would need to add a valid Email Address in the inbox field from which you would like to send Emails", "wp-mail-bank");
306
- $mb_email_configuration_email_address_placeholder = __("Please provide valid Email Address", "wp-mail-bank");
307
- $mb_email_configuration_reply_to = __("Reply To", "wp-mail-bank");
308
- $mb_email_configuration_reply_to_tooltip = __("In this field, you would need to add a valid Email Address that is automatically inserted into the Reply To field when a user replies to an email message", "wp-mail-bank");
309
- $mb_email_configuration_reply_to_placeholder = __("Please provide Reply To Email Address", "wp-mail-bank");
310
- $mb_email_configuration_get_google_credentials = __("Get Google Client Id and Secret Key", "wp-mail-bank");
311
- $mb_email_configuration_get_microsoft_credentials = __("Get Microsoft Client Id and Secret Key", "wp-mail-bank");
312
- $mb_email_configuration_get_yahoo_credentials = __("Get Yahoo Client Id and Secret Key", "wp-mail-bank");
313
-
314
- // Email Logs
315
- $mb_start_date_title = __("Start Date", "wp-mail-bank");
316
- $mb_resend = __("Resend", "wp-mail-bank");
317
- $mb_start_date_placeholder = __("Please provide Start Date", "wp-mail-bank");
318
- $mb_start_date_tooltip = __("This field shows starting date of Email Logs", "wp-mail-bank");
319
- $mb_end_date_title = __("End Date", "wp-mail-bank");
320
- $mb_end_date_placeholder = __("Please provide End Date", "wp-mail-bank");
321
- $mb_end_date_tooltip = __("This field shows ending date of Email Logs", "wp-mail-bank");
322
- $mb_submit = __("Submit", "wp-mail-bank");
323
- $mb_email_logs_bulk_action = __("Bulk Action", "wp-mail-bank");
324
- $mb_email_logs_delete = __("Delete", "wp-mail-bank");
325
- $mb_email_logs_apply = __("Apply", "wp-mail-bank");
326
- $mb_email_logs_email_to = __("Email To", "wp-mail-bank");
327
- $mb_email_logs_actions = __("Action", "wp-mail-bank");
328
- $mb_email_logs_show_details = __("Show Details", "wp-mail-bank");
329
- $mb_email_logs_close = __("Close", "wp-mail-bank");
330
- $mb_email_logs_debugging_output = __("Debugging Output", "wp-mail-bank");
331
- $mb_email_logs_show_outputs = __("Show Debugging Output", "wp-mail-bank");
332
- $mb_email_sent_to = __("Email Sent To", "wp-mail-bank");
333
- $mb_date_time = __("Date/Time", "wp-mail-bank");
334
- $mb_email_logs_status = __("Status", "wp-mail-bank");
335
- $mb_from = __("From", "wp-mail-bank");
336
- $mb_back_to_email_logs = __("Back to Email Logs", "wp-mail-bank");
337
-
338
- // Settings
339
- $mb_settings_debug_mode = __("Debug Mode", "wp-mail-bank");
340
- $mb_settings_debug_mode_tooltip = __("Please choose a specific option for Debug Mode", "wp-mail-bank");
341
- $mb_remove_tables_title = __("Remove Tables at Uninstall", "wp-mail-bank");
342
- $mb_remove_tables_tooltip = __("Please choose a specific option whether to allow Remove Tables at Uninstall", "wp-mail-bank");
343
- $mb_monitoring_email_log_title = __("Monitoring Email Logs", "wp-mail-bank");
344
- $mb_monitoring_email_log_tooltip = __("This field is used to allow Email Logs to monitor or not", "wp-mail-bank");
345
-
346
- // Roles and Capabilities
347
- $mb_roles_capabilities_show_menu = __("Show Mail Bank Menu", "wp-mail-bank");
348
- $mb_roles_capabilities_show_menu_tooltip = __("Please choose a specific role who can see Sidebar Menu", "wp-mail-bank");
349
- $mb_roles_capabilities_administrator = __("Administrator", "wp-mail-bank");
350
- $mb_roles_capabilities_author = __("Author", "wp-mail-bank");
351
- $mb_roles_capabilities_editor = __("Editor", "wp-mail-bank");
352
- $mb_roles_capabilities_contributor = __("Contributor", "wp-mail-bank");
353
- $mb_roles_capabilities_subscriber = __("Subscriber", "wp-mail-bank");
354
- $mb_roles_capabilities_others = __("Others", "wp-mail-bank");
355
- $mb_roles_capabilities_topbar_menu = __("Show Mail Bank Top Bar Menu", "wp-mail-bank");
356
- $mb_roles_capabilities_topbar_menu_tooltip = __("Please choose a specific option from Mail Bank Top Bar Menu", "wp-mail-bank");
357
- $mb_roles_capabilities_administrator_role = __("An Administrator Role can do the following ", "wp-mail-bank");
358
- $mb_roles_capabilities_administrator_role_tooltip = __("Please choose specific page available for the Administrator Access", "wp-mail-bank");
359
- $mb_roles_capabilities_full_control = __("Full Control", "wp-mail-bank");
360
- $mb_roles_capabilities_author_role = __("An Author Role can do the following ", "wp-mail-bank");
361
- $mb_roles_capabilities_author_role_tooltip = __("Please choose specific page available for Author Access", "wp-mail-bank");
362
- $mb_roles_capabilities_editor_role = __("An Editor Role can do the following ", "wp-mail-bank");
363
- $mb_roles_capabilities_editor_role_tooltip = __("Please choose specific page available for Editor Access", "wp-mail-bank");
364
- $mb_roles_capabilities_contributor_role = __("A Contributor Role can do the following ", "wp-mail-bank");
365
- $mb_roles_capabilities_contributor_role_tooltip = __("Please choose specific page available for Contributor Access", "wp-mail-bank");
366
- $mb_roles_capabilities_other_role = __("Other Roles can do the following ", "wp-mail-bank");
367
- $mb_roles_capabilities_other_role_tooltip = __("Please choose specific page available for Others Role Access", "wp-mail-bank");
368
- $mb_roles_capabilities_other_roles_capabilities = __("Please tick the appropriate capabilities for security purposes ", "wp-mail-bank");
369
- $mb_roles_capabilities_other_roles_capabilities_tooltip = __("Only users with these capabilities can access Mail Bank", "wp-mail-bank");
370
- $mb_roles_capabilities_subscriber_role = __("A Subscriber Role can do the following", "wp-mail-bank");
371
- $mb_roles_capabilities_subscriber_role_tooltip = __("Please choose specific page available for Subscriber Access", "wp-mail-bank");
372
-
373
- // Feedbacks
374
- $mb_feedbacks_thank_you = __("Thank You!", "wp-mail-bank");
375
- $mb_feedbacks_suggest_some_features = __("Kindly fill in the below form, if you would like to suggest some features which are not in the Plugin", "wp-mail-bank");
376
- $mb_feedbacks_suggestion_complaint = __("If you also have any suggestion/complaint, you can use the same form below", "wp-mail-bank");
377
- $mb_feedbacks_write_us_on = __("You can also write us on", "wp-mail-bank");
378
- $mb_feedbacks_your_name = __("Your Name", "wp-mail-bank");
379
- $mb_feedbacks_your_name_tooltip = __("Please provide your Name which will be sent along with your Feedback", "wp-mail-bank");
380
- $mb_feedbacks_your_name_placeholder = __("Please provide your Name", "wp-mail-bank");
381
- $mb_feedbacks_your_email = __("Your Email", "wp-mail-bank");
382
- $mb_feedbacks_your_email_tooltip = __("Please provide your Email Address which will be sent along with your Feedback", "wp-mail-bank");
383
- $mb_feedbacks_your_email_placeholder = __("Please provide your Email Address", "wp-mail-bank");
384
- $mb_feedbacks_tooltip = __("Please provide your Feedback which will be sent along", "wp-mail-bank");
385
- $mb_feedbacks_placeholder = __("Please provide your Feedback", "wp-mail-bank");
386
- $mb_feedbacks_send_feedback = __("Send Feedback", "wp-mail-bank");
387
- $mb_feature_request_message = __("Your request Email has been sent Successfully", "wp-mail-bank");
388
-
389
- // Test Email
390
- $mb_test_email_sending_test_email = __("Sending Test Email to", "wp-mail-bank");
391
- $mb_test_email_status = __("Email Status", "wp-mail-bank");
392
-
393
- // Connectivity Test
394
- $mb_connectivity_test = __("Connectivity Test", "wp-mail-bank");
395
- $mb_transport = __("Transport", "wp-mail-bank");
396
- $mb_socket = __("Socket", "wp-mail-bank");
397
- $mb_status = __("Status", "wp-mail-bank");
398
- $mb_service_available = __("Service Available", "wp-mail-bank");
399
- $mb_server_id = __("Server ID", "wp-mail-bank");
400
- $mb_authentication = __("Authentication", "wp-mail-bank");
401
- $mb_plain = __("Plain", "wp-mail-bank");
402
- $mb_cram_md5 = __("CRAM-MD5", "wp-mail-bank");
403
- $mb_0auth = __("OAuth 2.0", "wp-mail-bank");
404
- $mb_smtp = __("SMTP", "wp-mail-bank");
405
- $mb_gmail_api = __("Gmail API", "wp-mail-bank");
406
- $mb_mail_server_host = __("Outgoing Mail Server Hostname", "wp-mail-bank");
407
- $mb_begin_test = __("Begin Test", "wp-mail-bank");
408
- $mb_localhost = __("localhost", "wp-mail-bank");
409
- $mb_mail_server_tooltip = __("In this field, you would need to provide Outgoing Mail Server Hostname", "wp-mail-bank");
410
- }
411
  }
1
+ <?php
2
+ /**
3
+ * This file is used for translation strings.
4
+ *
5
+ * @author Tech Banker
6
+ * @package wp-mail-bank/includes
7
+ * @version 2.0.0
8
+ */
9
+ if (!defined("ABSPATH")) {
10
+ exit;
11
+ }// Exit if accessed directly
12
+ if (!is_user_logged_in()) {
13
+ return;
14
+ } else {
15
+ $access_granted = false;
16
+ foreach ($user_role_permission as $permission) {
17
+ if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
+ }
21
+ }
22
+ if (!$access_granted) {
23
+ return;
24
+ } else {
25
+ $wp_langs = array();
26
+ $wp_langs["af"] = "Afrikaans";
27
+ $wp_langs["ak"] = "Akan";
28
+ $wp_langs["sq"] = "Shqip";
29
+ $wp_langs["arq"] = "الدارجة الجزايرية";
30
+ $wp_langs["am"] = "አማርኛ";
31
+ $wp_langs["hy"] = "Հայերեն";
32
+ $wp_langs["rup_mk"] = "Armãneashce";
33
+ $wp_langs["frp"] = "Arpitan";
34
+ $wp_langs["as"] = "অসমীয়া";
35
+ $wp_langs["ast"] = "Asturianu";
36
+ $wp_langs["az"] = "Azərbaycan dili";
37
+ $wp_langs["az_tr"] = "Azərbaycan Türkcəsi";
38
+ $wp_langs["bcc"] = "بلوچی مکرانی";
39
+ $wp_langs["ba"] = "башҡорт теле";
40
+ $wp_langs["eu"] = "Euskara";
41
+ $wp_langs["bel"] = "Беларуская мова";
42
+ $wp_langs["bn_bd"] = "বাংলা";
43
+ $wp_langs["bs_ba"] = "Bosanski";
44
+ $wp_langs["bre"] = "Brezhoneg";
45
+ $wp_langs["bg_bg"] = "Български";
46
+ $wp_langs["ca"] = "Català";
47
+ $wp_langs["bal"] = "Català (Balear)";
48
+ $wp_langs["ceb"] = "Cebuano";
49
+ $wp_langs["zh_hk"] = "香港中文版 ";
50
+ $wp_langs["zh_tw"] = "繁體中文";
51
+ $wp_langs["co"] = "Corsu";
52
+ $wp_langs["hr"] = "Hrvatski";
53
+ $wp_langs["dv"] = "ދިވެހި";
54
+ $wp_langs["nl_be"] = "Nederlands (België)";
55
+ $wp_langs["dzo"] = "རྫོང་ཁ";
56
+ $wp_langs["eo"] = "Esperanto";
57
+ $wp_langs["et"] = "Eesti";
58
+ $wp_langs["fo"] = "Føroyskt";
59
+ $wp_langs["fi"] = "Suomi";
60
+ $wp_langs["fr_be"] = "Français de Belgique";
61
+ $wp_langs["fr_ca"] = "Français du Canada";
62
+ $wp_langs["fy"] = "Frysk";
63
+ $wp_langs["fur"] = "Friulian";
64
+ $wp_langs["fuc"] = "Pulaar";
65
+ $wp_langs["gl_es"] = "Galego";
66
+ $wp_langs["ka_ge"] = "ქართული";
67
+ $wp_langs["de_ch"] = "Deutsch (Schweiz)";
68
+ $wp_langs["kal"] = "Kalaallisut";
69
+ $wp_langs["gn"] = "Avañe'ẽ";
70
+ $wp_langs["gu"] = "ગુજરાતી";
71
+ $wp_langs["hat"] = "Kreyol ayisyen";
72
+ $wp_langs["haw_us"] = "Ōlelo Hawaiʻi";
73
+ $wp_langs["haz"] = "هزاره گی";
74
+ $wp_langs["hi_in"] = "हिन्दी";
75
+ $wp_langs["is_is"] = "Íslenska";
76
+ $wp_langs["ido"] = "Ido";
77
+ $wp_langs["id_id"] = "Bahasa Indonesia";
78
+ $wp_langs["ga"] = "Gaelige";
79
+ $wp_langs["it_it"] = "Italiano";
80
+ $wp_langs["ja"] = "日本語";
81
+ $wp_langs["jv_id"] = "Basa Jawa";
82
+ $wp_langs["kab"] = "Taqbaylit";
83
+ $wp_langs["kn"] = "ಕನ್ನಡ";
84
+ $wp_langs["kk"] = "Қазақ тілі";
85
+ $wp_langs["km"] = "ភាសាខ្មែរ";
86
+ $wp_langs["kin"] = "Ikinyarwanda";
87
+ $wp_langs["ky_ky"] = "кыргыз тили";
88
+ $wp_langs["ko_kr"] = "한국어";
89
+ $wp_langs["ckb"] = "كوردی‎";
90
+ $wp_langs["lo"] = "ພາສາລາວ";
91
+ $wp_langs["lv"] = "Latviešu valoda";
92
+ $wp_langs["li"] = "Limburgs";
93
+ $wp_langs["lin"] = "Ngala";
94
+ $wp_langs["lt_lt"] = "Lietuvių kalba";
95
+ $wp_langs["lb_lu"] = "Lëtzebuergesch";
96
+ $wp_langs["mk_mk"] = "Македонски јазик";
97
+ $wp_langs["mg_mg"] = "Malagasy";
98
+ $wp_langs["ms_my"] = "Bahasa Melayu";
99
+ $wp_langs["ml_in"] = "മലയാളം";
100
+ $wp_langs["mri"] = "Te Reo Māori";
101
+ $wp_langs["mr"] = "मराठी";
102
+ $wp_langs["xmf"] = "მარგალური ნინა";
103
+ $wp_langs["mn"] = "Монгол";
104
+ $wp_langs["me_me"] = "Crnogorski jezik";
105
+ $wp_langs["ary"] = "العربية المغربية";
106
+ $wp_langs["my_mm"] = "ဗမာစာ";
107
+ $wp_langs["ne_np"] = "नेपाली";
108
+ $wp_langs["nn_no"] = "Norsk nynorsk";
109
+ $wp_langs["oci"] = "Occitan";
110
+ $wp_langs["ory"] = "ଓଡ଼ିଆ";
111
+ $wp_langs["os"] = "Ирон";
112
+ $wp_langs["ps"] = "پښتو";
113
+ $wp_langs["fa_ir"] = "فارسی";
114
+ $wp_langs["fa_af"] = "(فارسی (افغانستان";
115
+ $wp_langs["pl_pl"] = "Polski";
116
+ $wp_langs["pa_in"] = "ਪੰਜਾਬੀ";
117
+ $wp_langs["rhg"] = "Ruáinga";
118
+ $wp_langs["roh"] = "Rumantsch Vallader";
119
+ $wp_langs["rue"] = "Русиньскый";
120
+ $wp_langs["sah"] = "Сахалыы";
121
+ $wp_langs["sa_in"] = "भारतम्";
122
+ $wp_langs["srd"] = "Sardu";
123
+ $wp_langs["gd"] = "Gàidhlig";
124
+ $wp_langs["sr_rs"] = "Српски језик";
125
+ $wp_langs["szl"] = "Ślōnskŏ gŏdka";
126
+ $wp_langs["snd"] = "سنڌي";
127
+ $wp_langs["si_lk"] = "සිංහල";
128
+ $wp_langs["sk_sk"] = "Slovenčina";
129
+ $wp_langs["sl_si"] = "Slovenščina";
130
+ $wp_langs["so_so"] = "Afsoomaali";
131
+ $wp_langs["azb"] = "گؤنئی آذربایجان";
132
+ $wp_langs["es_ar"] = "Español de Argentina";
133
+ $wp_langs["es_cl"] = "Español de Chile";
134
+ $wp_langs["es_co"] = "Español de Colombia";
135
+ $wp_langs["es_gt"] = "Español de Guatemala";
136
+ $wp_langs["es_pe"] = "Español de Perú";
137
+ $wp_langs["es_pr"] = "Español de Puerto Rico";
138
+ $wp_langs["es_es"] = "Español";
139
+ $wp_langs["es_ve"] = "Español de Venezuela";
140
+ $wp_langs["su_id"] = "Basa Sunda";
141
+ $wp_langs["sw"] = "Kiswahili";
142
+ $wp_langs["gsw"] = "Schwyzerdütsch";
143
+ $wp_langs["tl"] = "Tagalog";
144
+ $wp_langs["tah"] = "Reo Tahiti";
145
+ $wp_langs["tg"] = "Тоҷикӣ";
146
+ $wp_langs["tzm"] = "ⵜⴰⵎⴰⵣⵉⵖⵜ";
147
+ $wp_langs["ta_in"] = "தமிழ்";
148
+ $wp_langs["ta_lk"] = "தமிழ்";
149
+ $wp_langs["tt_ru"] = "Татар теле";
150
+ $wp_langs["te"] = "తెలుగు";
151
+ $wp_langs["bo"] = "བོད་སྐད";
152
+ $wp_langs["tir"] = "ትግርኛ";
153
+ $wp_langs["tuk"] = "Türkmençe";
154
+ $wp_langs["twd"] = "Twents";
155
+ $wp_langs["ug_cn"] = "Uyƣurqə";
156
+ $wp_langs["ur"] = "اردو";
157
+ $wp_langs["uz_uz"] = "O‘zbekcha";
158
+ $wp_langs["wa"] = "Walon";
159
+ $wp_langs["cy"] = "Cymraeg";
160
+ $wp_langs["yor"] = "Yorùbá";
161
+ $locale = strtolower(get_locale());
162
+ if (array_key_exists("$locale", $wp_langs)) {
163
+ $language = $wp_langs["$locale"];
164
+ $mb_message_translate_help = __("If you would like to translate in $language & help the wordpress community, please fill in the form ", "wp-mail-bank");
165
+ $mb_message_translate_here = __("here.", "wp-mail-bank");
166
+ } else {
167
+ $mb_message_translate_help = "";
168
+ $mb_kindly_click = "";
169
+ $mb_message_translate_here = "";
170
+ }
171
+
172
+ //Disclaimer
173
+ $mb_upgrade = __("Upgrade", "wp-mail-bank");
174
+ $mb_premium_edition_label = __("Premium Edition", "wp-mail-bank");
175
+ $mb_message_premium_edition = __("This feature is available only in Premium Editions! <br> Kindly Purchase to unlock it!", "wp-mail-bank");
176
+
177
+
178
+ //wizard
179
+ $mb_wizard_basic_info = __("Basic Info", "wp-mail-bank");
180
+ $mb_wizard_account_setup = __("Account Setup", "wp-mail-bank");
181
+ $mb_wizard_confirm = __("Confirm", "wp-mail-bank");
182
+
183
+ // Menus
184
+ $wp_mail_bank = __("Mail Bank", "wp-mail-bank");
185
+ $mb_email_configuration = __("Email Setup", "wp-mail-bank");
186
+ $mb_email_logs = __("Email Logs", "wp-mail-bank");
187
+ $mb_test_email = __("Test Email", "wp-mail-bank");
188
+ $mb_settings = __("Plugin Settings", "wp-mail-bank");
189
+ $mb_feedbacks = __("Feedbacks", "wp-mail-bank");
190
+ $mb_roles_and_capabilities = __("Roles & Capabilities", "wp-mail-bank");
191
+ $mb_system_information = __("System Information", "wp-mail-bank");
192
+
193
+ // Footer
194
+ $mb_success = __("Success!", "wp-mail-bank");
195
+ $mb_update_email_configuration = __("Email Setup has been updated Successfully", "wp-mail-bank");
196
+ $mb_update_feedbacks = __("Your Feedback has been sent Successfully", "wp-mail-bank");
197
+ $mb_test_email_sent = __("Test Email was sent Successfully!", "wp-mail-bank");
198
+ $mb_test_email_not_send = __("Test Email was not sent!", "wp-mail-bank");
199
+ $mb_update_settings = __("Plugin Settings have been updated Successfully", "wp-mail-bank");
200
+ $oauth_not_supported = __("The OAuth is not supported by providing SMTP Host, kindly provide username and password", "wp-mail-bank");
201
+ $mb_popup_query = __("Query", "wp-mail-bank");
202
+ $mb_language_interested_to_translate = __("Language Interested to Translate", "wp-mail-bank");
203
+ $mb_language_interested_to_translate_tooltip = __("Please enter the language you want to translate.", "wp-mail-bank");
204
+ $mb_language_interested_to_translate_placeholder = __("Please enter the language", "wp-mail-bank");
205
+ $mb_popup_your_name_tooltip = __("In this field, You would need to provide your name which will be sent along with your request", "wp-mail-bank");
206
+ $mb_important_disclaimer = __("Important Disclaimer!", "wp-mail-bank");
207
+ $mb_popup_your_email_tooltip = __("In this field, You would need to provide your valid email which wiil be sent along with your request", "wp-mail-bank");
208
+ $mb_popup_query_tooltip = __("Please enter your query.", "wp-mail-bank");
209
+ $mb_popup_query_placeholder = __("Please enter the query.", "wp-mail-bank");
210
+ $mb_manage_backups_close = __("Close", "wp-mail-bank");
211
+ $mb_feature_requests_send_request = __("Send Request", "wp-mail-bank");
212
+ $mb_translation_request = __("Translation Request", "wp-mail-bank");
213
+ $mb_confirm_close = __("Are you sure you want to close without sending Translation Request?", "wp-mail-bank");
214
+ $mb_feature_requests_your_email = __("Your Email", "wp-mail-bank");
215
+ $mb_feature_requests_your_name = __("Your Name", "wp-mail-bank");
216
+ $mb_feature_requests_your_name_placeholder = __("Please provide your Name", "wp-mail-bank");
217
+
218
+
219
+ // Common Variables
220
+ $mb_status_sent = __("Sent", "wp-mail-bank");
221
+ $mb_status_not_sent = __("Not Sent", "wp-mail-bank");
222
+ $mb_user_access_message = __("You don't have Sufficient Access to this Page. Kindly contact the Administrator for more Privileges", "wp-mail-bank");
223
+ $mb_enable = __("Enable", "wp-mail-bank");
224
+ $mb_disable = __("Disable", "wp-mail-bank");
225
+ $mb_override = __("Override", "wp-mail-bank");
226
+ $mb_dont_override = __("Don't Override", "wp-mail-bank");
227
+ $mb_save_changes = __("Save Settings", "wp-mail-bank");
228
+ $mb_subject = __("Subject", "wp-mail-bank");
229
+ $mb_next_step = __("Next Step", "wp-mail-bank");
230
+ $mb_previous_step = __("Previous Step", "wp-mail-bank");
231
+ $mb_upgrade_to = __("Upgrade to Premium Editions", "wp-mail-bank");
232
+
233
+ // Email Setup
234
+ $mb_email_configuration_cc_label = __("Cc", "wp-mail-bank");
235
+ $mb_email_configuration_bcc_label = __("Bcc", "wp-mail-bank");
236
+ $mb_email_configuration_cc_email_address_tooltip = __("Please provide valid Cc Email Address", "wp-mail-bank");
237
+ $mb_email_configuration_bcc_email_address_tooltip = __("Please provide valid Bcc Email Address", "wp-mail-bank");
238
+ $mb_email_configuration_cc_email_placeholder = __("Please provide Cc Email", "wp-mail-bank");
239
+ $mb_email_configuration_bcc_email_placeholder = __("Please provide Bcc Email", "wp-mail-bank");
240
+ $mb_email_configuration_mailer_settings_tab = __("Mailer Settings", "wp-mail-bank");
241
+ $mb_email_configuration_test_email_tab = __("Test Email", "wp-mail-bank");
242
+ $mb_email_configuration_from_name = __("From Name", "wp-mail-bank");
243
+ $mb_email_configuration_from_name_tooltip = __("From Name is the inbox field that tells your recipient who sent the messages. If you would like to override the pre-configured From Name, then you would need to insert the name in the inbox field", "wp-mail-bank");
244
+ $mb_email_configuration_from_name_placeholder = __("Please provide From Name", "wp-mail-bank");
245
+ $mb_email_configuration_from_email = __("From Email", "wp-mail-bank");
246
+ $mb_email_address_tooltip = __("From Email is the inbox field that tells your recipient from which Email Address the messages are coming. If you would like to override the pre-configured From Email, then you would need to insert an Email Address in the inbox field", "wp-mail-bank");
247
+ $mb_email_configuration_from_email_placeholder = __("Please provide From Email Address", "wp-mail-bank");
248
+ $mb_email_configuration_mailer_type = __("Mailer Type", "wp-mail-bank");
249
+ $mb_email_configuration_mailer_type_tooltip = __("This field provides you an ability to choose a specific option for Mailer Type. If you would like to send an Email via SMTP mailer, you would need to select Send Email via SMTP from the drop down or you could use PHP mail () Function", "wp-mail-bank");
250
+ $mb_email_configuration_send_email_via_smtp = __("Send Email via SMTP", "wp-mail-bank");
251
+ $mb_email_configuration_use_php_mail_function = __("Use The PHP mail() Function", "wp-mail-bank");
252
+ $mb_email_configuration_smtp_host = __("SMTP Host", "wp-mail-bank");
253
+ $mb_email_configuration_smtp_host_tooltip = __("If you would like to send an Email via different host, you would need to insert that specific host name like smtp.gmail.com in the inbox field", "wp-mail-bank");
254
+ $mb_feature_requests_your_email_placeholder = __("Please provide your Email Address", "wp-mail-bank");
255
+ $mb_email_configuration_smtp_host_placeholder = __("Please provide SMTP Host", "wp-mail-bank");
256
+ $mb_email_configuration_smtp_port = __("SMTP Port", "wp-mail-bank");
257
+ $mb_email_configuration_smtp_port_tooltip = __("This inbox field is specified to provide a valid SMTP Port for authentication", "wp-mail-bank");
258
+ $mb_email_configuration_smtp_port_placeholder = __("Please provide SMTP Port", "wp-mail-bank");
259
+ $mb_email_configuration_encryption = __("Encryption", "wp-mail-bank");
260
+ $mb_email_configuration_encryption_tooltip = __("It provides you an ability to choose a specific option for Encryption. If you would like to send an Email with TLS encryption, you would need to select Use TLS Encryption from the drop down or you could use SSL Encryption. For that you would need to select Use SSL Encryption from the drop down. If you would like to send an Email without encryption, you would need to select No Encryption from the drop down", "wp-mail-bank");
261
+ $mb_email_configuration_no_encryption = __("No Encryption", "wp-mail-bank");
262
+ $mb_email_configuration_use_ssl_encryption = __("Use SSL Encryption", "wp-mail-bank");
263
+ $mb_email_configuration_use_tls_encryption = __("Use TLS Encryption", "wp-mail-bank");
264
+ $mb_email_configuration_authentication = __("Authentication", "wp-mail-bank");
265
+ $mb_email_configuration_authentication_tooltip = __("This inbox field allows you to choose an appropriate option for authentication. It provides you the Two-way authentication factor; If you would like to authenticate yourself via Username and Password, you would need to select Use Username and Password from the drop down. You can also authenticate by an OAuth 2.0 protocol, which requires Client Id and Secret Key, for that you would need to select Use OAuth (Client ID and Secret Key) from the drop down. You can easily get Client Id and Secret Key from respective SMTP Server Developers section", "wp-mail-bank");
266
+ $mb_email_configuration_use_smtp_authentication = __("Use SMTP Authentication", "wp-mail-bank");
267
+ $mb_email_configuration_donot_use_authentication = __("Don't Use SMTP Authentication", "wp-mail-bank");
268
+ $mb_email_configuration_test_email_address = __("Test Email Address", "wp-mail-bank");
269
+ $mb_email_configuration_test_email_address_tooltip = __("In this field, you would need to provide a valid Email Address in the inbox field on which you would like to receive Test email", "wp-mail-bank");
270
+ $mb_email_configuration_test_email_address_placeholder = __("Please provide Test Email Address", "wp-mail-bank");
271
+ $mb_email_configuration_subject_test_tooltip = __("In this field, you would need to provide a subject for Test Email", "wp-mail-bank");
272
+ $mb_email_configuration_subject_test_placeholder = __("Please provide Subject", "wp-mail-bank");
273
+ $mb_email_configuration_content = __("Email Content", "wp-mail-bank");
274
+ $mb_email_configuration_content_tooltip = __("In this field, you would need to provide the content for Test Email", "wp-mail-bank");
275
+ $mb_email_configuration_send_test_email = __("Send Test Email", "wp-mail-bank");
276
+ $mb_email_configuration_smtp_debugging_output = __("SMTP Debugging Output", "wp-mail-bank");
277
+ $mb_email_configuration_send_test_email_textarea = __("Checking your settings", "wp-mail-bank");
278
+ $mb_email_configuration_result = __("Result", "wp-mail-bank");
279
+ $mb_email_configuration_send_another_test_email = __("Send Another Test Email", "wp-mail-bank");
280
+ $mb_email_configuration_enable_from_name = __("From Name Configuration", "wp-mail-bank");
281
+ $mb_email_configuration_enable_from_name_tooltip = __("If you would like to override the pre-configured name which will be used while sending Emails, then you would need to choose Override from the drop down and vice-versa", "wp-mail-bank");
282
+ $mb_email_configuration_enable_from_email = __("From Email Configuration", "wp-mail-bank");
283
+ $mb_email_configuration_enable_from_email_tooltip = __("If you would like to override your pre-configured Email Address which will be used while sending Emails, then you would need to choose Override from the drop down and vice-versa", "wp-mail-bank");
284
+ $mb_email_configuration_username = __("Username", "wp-mail-bank");
285
+ $mb_email_configuration_username_tooltip = __("In this field, you would need to provide a username to authenticate your SMTP details", "wp-mail-bank");
286
+ $mb_email_configuration_username_placeholder = __("Please provide username", "wp-mail-bank");
287
+ $mb_email_configuration_password = __("Password", "wp-mail-bank");
288
+ $mb_email_configuration_password_tooltip = __("In this field, you would need to provide a password to authenticate your SMTP details", "wp-mail-bank");
289
+ $mb_email_configuration_password_placeholder = __("Please provide password", "wp-mail-bank");
290
+ $mb_email_configuration_redirect_uri = __("Redirect URI", "wp-mail-bank");
291
+ $mb_email_configuration_redirect_uri_tooltip = __("Please copy this Redirect URI and Paste into Redirect URI field when creating your app", "wp-mail-bank");
292
+ $mb_email_configuration_use_oauth = __("Use OAuth (Client Id and Secret Key required)", "wp-mail-bank");
293
+ $mb_email_configuration_none = __("None", "wp-mail-bank");
294
+ $mb_email_configuration_use_plain_authentication = __("Plain Authentication", "wp-mail-bank");
295
+ $mb_email_configuration_cram_md5 = __("Cram-MD5", "wp-mail-bank");
296
+ $mb_email_configuration_login = __("Login", "wp-mail-bank");
297
+ $mb_email_configuration_client_id = __("Client Id", "wp-mail-bank");
298
+ $mb_email_configuration_client_secret = __("Secret Key", "wp-mail-bank");
299
+ $mb_email_configuration_client_id_tooltip = __("Please provide valid Client Id issued by your SMTP Host", "wp-mail-bank");
300
+ $mb_email_configuration_client_secret_tooltip = __("Please provide valid Secret Key issued by your SMTP Host", "wp-mail-bank");
301
+ $mb_email_configuration_client_id_placeholder = __("Please provide Client Id", "wp-mail-bank");
302
+ $mb_email_configuration_client_secret_placeholder = __("Please provide Secret Key", "wp-mail-bank");
303
+ $mb_email_configuration_tick_for_sent_mail = __("Yes, automatically send a Test Email upon clicking on the Next Step Button to verify settings", "wp-mail-bank");
304
+ $mb_email_configuration_email_address = __("Email Address", "wp-mail-bank");
305
+ $mb_email_configuration_email_address_tooltip = __("In this field, you would need to add a valid Email Address in the inbox field from which you would like to send Emails", "wp-mail-bank");
306
+ $mb_email_configuration_email_address_placeholder = __("Please provide valid Email Address", "wp-mail-bank");
307
+ $mb_email_configuration_reply_to = __("Reply To", "wp-mail-bank");
308
+ $mb_email_configuration_reply_to_tooltip = __("In this field, you would need to add a valid Email Address that is automatically inserted into the Reply To field when a user replies to an email message", "wp-mail-bank");
309
+ $mb_email_configuration_reply_to_placeholder = __("Please provide Reply To Email Address", "wp-mail-bank");
310
+ $mb_email_configuration_get_google_credentials = __("Get Google Client Id and Secret Key", "wp-mail-bank");
311
+ $mb_email_configuration_get_microsoft_credentials = __("Get Microsoft Client Id and Secret Key", "wp-mail-bank");
312
+ $mb_email_configuration_get_yahoo_credentials = __("Get Yahoo Client Id and Secret Key", "wp-mail-bank");
313
+
314
+ // Email Logs
315
+ $mb_start_date_title = __("Start Date", "wp-mail-bank");
316
+ $mb_resend = __("Resend", "wp-mail-bank");
317
+ $mb_start_date_placeholder = __("Please provide Start Date", "wp-mail-bank");
318
+ $mb_start_date_tooltip = __("This field shows starting date of Email Logs", "wp-mail-bank");
319
+ $mb_end_date_title = __("End Date", "wp-mail-bank");
320
+ $mb_end_date_placeholder = __("Please provide End Date", "wp-mail-bank");
321
+ $mb_end_date_tooltip = __("This field shows ending date of Email Logs", "wp-mail-bank");
322
+ $mb_submit = __("Submit", "wp-mail-bank");
323
+ $mb_email_logs_bulk_action = __("Bulk Action", "wp-mail-bank");
324
+ $mb_email_logs_delete = __("Delete", "wp-mail-bank");
325
+ $mb_email_logs_apply = __("Apply", "wp-mail-bank");
326
+ $mb_email_logs_email_to = __("Email To", "wp-mail-bank");
327
+ $mb_email_logs_actions = __("Action", "wp-mail-bank");
328
+ $mb_email_logs_show_details = __("Show Details", "wp-mail-bank");
329
+ $mb_email_logs_close = __("Close", "wp-mail-bank");
330
+ $mb_email_logs_debugging_output = __("Debugging Output", "wp-mail-bank");
331
+ $mb_email_logs_show_outputs = __("Show Debugging Output", "wp-mail-bank");
332
+ $mb_email_sent_to = __("Email Sent To", "wp-mail-bank");
333
+ $mb_date_time = __("Date/Time", "wp-mail-bank");
334
+ $mb_email_logs_status = __("Status", "wp-mail-bank");
335
+ $mb_from = __("From", "wp-mail-bank");
336
+ $mb_back_to_email_logs = __("Back to Email Logs", "wp-mail-bank");
337
+
338
+ // Settings
339
+ $mb_settings_debug_mode = __("Debug Mode", "wp-mail-bank");
340
+ $mb_settings_debug_mode_tooltip = __("Please choose a specific option for Debug Mode", "wp-mail-bank");
341
+ $mb_remove_tables_title = __("Remove Tables at Uninstall", "wp-mail-bank");
342
+ $mb_remove_tables_tooltip = __("Please choose a specific option whether to allow Remove Tables at Uninstall", "wp-mail-bank");
343
+ $mb_monitoring_email_log_title = __("Monitoring Email Logs", "wp-mail-bank");
344
+ $mb_monitoring_email_log_tooltip = __("This field is used to allow Email Logs to monitor or not", "wp-mail-bank");
345
+
346
+ // Roles and Capabilities
347
+ $mb_roles_capabilities_show_menu = __("Show Mail Bank Menu", "wp-mail-bank");
348
+ $mb_roles_capabilities_show_menu_tooltip = __("Please choose a specific role who can see Sidebar Menu", "wp-mail-bank");
349
+ $mb_roles_capabilities_administrator = __("Administrator", "wp-mail-bank");
350
+ $mb_roles_capabilities_author = __("Author", "wp-mail-bank");
351
+ $mb_roles_capabilities_editor = __("Editor", "wp-mail-bank");
352
+ $mb_roles_capabilities_contributor = __("Contributor", "wp-mail-bank");
353
+ $mb_roles_capabilities_subscriber = __("Subscriber", "wp-mail-bank");
354
+ $mb_roles_capabilities_others = __("Others", "wp-mail-bank");
355
+ $mb_roles_capabilities_topbar_menu = __("Show Mail Bank Top Bar Menu", "wp-mail-bank");
356
+ $mb_roles_capabilities_topbar_menu_tooltip = __("Please choose a specific option from Mail Bank Top Bar Menu", "wp-mail-bank");
357
+ $mb_roles_capabilities_administrator_role = __("An Administrator Role can do the following ", "wp-mail-bank");
358
+ $mb_roles_capabilities_administrator_role_tooltip = __("Please choose specific page available for the Administrator Access", "wp-mail-bank");
359
+ $mb_roles_capabilities_full_control = __("Full Control", "wp-mail-bank");
360
+ $mb_roles_capabilities_author_role = __("An Author Role can do the following ", "wp-mail-bank");
361
+ $mb_roles_capabilities_author_role_tooltip = __("Please choose specific page available for Author Access", "wp-mail-bank");
362
+ $mb_roles_capabilities_editor_role = __("An Editor Role can do the following ", "wp-mail-bank");
363
+ $mb_roles_capabilities_editor_role_tooltip = __("Please choose specific page available for Editor Access", "wp-mail-bank");
364
+ $mb_roles_capabilities_contributor_role = __("A Contributor Role can do the following ", "wp-mail-bank");
365
+ $mb_roles_capabilities_contributor_role_tooltip = __("Please choose specific page available for Contributor Access", "wp-mail-bank");
366
+ $mb_roles_capabilities_other_role = __("Other Roles can do the following ", "wp-mail-bank");
367
+ $mb_roles_capabilities_other_role_tooltip = __("Please choose specific page available for Others Role Access", "wp-mail-bank");
368
+ $mb_roles_capabilities_other_roles_capabilities = __("Please tick the appropriate capabilities for security purposes ", "wp-mail-bank");
369
+ $mb_roles_capabilities_other_roles_capabilities_tooltip = __("Only users with these capabilities can access Mail Bank", "wp-mail-bank");
370
+ $mb_roles_capabilities_subscriber_role = __("A Subscriber Role can do the following", "wp-mail-bank");
371
+ $mb_roles_capabilities_subscriber_role_tooltip = __("Please choose specific page available for Subscriber Access", "wp-mail-bank");
372
+
373
+ // Feedbacks
374
+ $mb_feedbacks_thank_you = __("Thank You!", "wp-mail-bank");
375
+ $mb_feedbacks_suggest_some_features = __("Kindly fill in the below form, if you would like to suggest some features which are not in the Plugin", "wp-mail-bank");
376
+ $mb_feedbacks_suggestion_complaint = __("If you also have any suggestion/complaint, you can use the same form below", "wp-mail-bank");
377
+ $mb_feedbacks_write_us_on = __("You can also write us on", "wp-mail-bank");
378
+ $mb_feedbacks_your_name = __("Your Name", "wp-mail-bank");
379
+ $mb_feedbacks_your_name_tooltip = __("Please provide your Name which will be sent along with your Feedback", "wp-mail-bank");
380
+ $mb_feedbacks_your_name_placeholder = __("Please provide your Name", "wp-mail-bank");
381
+ $mb_feedbacks_your_email = __("Your Email", "wp-mail-bank");
382
+ $mb_feedbacks_your_email_tooltip = __("Please provide your Email Address which will be sent along with your Feedback", "wp-mail-bank");
383
+ $mb_feedbacks_your_email_placeholder = __("Please provide your Email Address", "wp-mail-bank");
384
+ $mb_feedbacks_tooltip = __("Please provide your Feedback which will be sent along", "wp-mail-bank");
385
+ $mb_feedbacks_placeholder = __("Please provide your Feedback", "wp-mail-bank");
386
+ $mb_feedbacks_send_feedback = __("Send Feedback", "wp-mail-bank");
387
+ $mb_feature_request_message = __("Your request Email has been sent Successfully", "wp-mail-bank");
388
+
389
+ // Test Email
390
+ $mb_test_email_sending_test_email = __("Sending Test Email to", "wp-mail-bank");
391
+ $mb_test_email_status = __("Email Status", "wp-mail-bank");
392
+
393
+ // Connectivity Test
394
+ $mb_connectivity_test = __("Connectivity Test", "wp-mail-bank");
395
+ $mb_transport = __("Transport", "wp-mail-bank");
396
+ $mb_socket = __("Socket", "wp-mail-bank");
397
+ $mb_status = __("Status", "wp-mail-bank");
398
+ $mb_service_available = __("Service Available", "wp-mail-bank");
399
+ $mb_server_id = __("Server ID", "wp-mail-bank");
400
+ $mb_authentication = __("Authentication", "wp-mail-bank");
401
+ $mb_plain = __("Plain", "wp-mail-bank");
402
+ $mb_cram_md5 = __("CRAM-MD5", "wp-mail-bank");
403
+ $mb_0auth = __("OAuth 2.0", "wp-mail-bank");
404
+ $mb_smtp = __("SMTP", "wp-mail-bank");
405
+ $mb_gmail_api = __("Gmail API", "wp-mail-bank");
406
+ $mb_mail_server_host = __("Outgoing Mail Server Hostname", "wp-mail-bank");
407
+ $mb_begin_test = __("Begin Test", "wp-mail-bank");
408
+ $mb_localhost = __("localhost", "wp-mail-bank");
409
+ $mb_mail_server_tooltip = __("In this field, you would need to provide Outgoing Mail Server Hostname", "wp-mail-bank");
410
+ }
411
  }
includes/yahoo-authentication-mail-bank.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  if (!defined("ABSPATH")) {
4
  exit;
5
  } // Exit if accessed directly
@@ -10,77 +9,70 @@ if (file_exists(MAIL_BANK_DIR_PATH . "includes/token-manager-mail-bank.php")) {
10
  if (!class_exists("yahoo_authentication_mail_bank")) {
11
 
12
  class yahoo_authentication_mail_bank extends token_manager_mail_bank {
13
-
14
  public
15
- $client_id,
16
- $client_secret,
17
- $callback_uri,
18
- $token_url;
19
-
20
  // Constructor
21
  public function __construct($client_id, $client_secret, mail_bank_manage_token $authorization_token, $callback_uri) {
22
- $this->client_id = $client_id;
23
- $this->client_secret = $client_secret;
24
- $this->callback_uri = $callback_uri;
25
- $this->token_url = "https://api.login.yahoo.com/oauth2/get_token";
26
- parent::__construct($client_id, $client_secret, $authorization_token, $callback_uri);
27
  }
28
-
29
  // This function is used to get token code.
30
  public function get_token_code($transactionId) {
31
- $configurations = array(
32
- "response_type" => "code",
33
- "redirect_uri" => urlencode($this->callback_uri),
34
- "client_id" => $this->client_id,
35
- "state" => $transactionId,
36
- "language" => get_locale()
37
- );
38
- echo $authUrl = "https://api.login.yahoo.com/oauth2/request_auth?" . build_query($configurations);
39
  }
40
-
41
  // This function is used to process token code
42
  public function process_token_Code($transactionId) {
43
- if (isset($_REQUEST["access_token"])) {
44
- $code = esc_attr($_REQUEST["access_token"]);
45
 
46
- $headers = array(
47
- "Authorization" => sprintf("Basic %s", base64_encode($this->client_id . ':' . $this->client_secret))
48
- );
49
- $configurations = array(
50
- "code" => $code,
51
- "grant_type" => "authorization_code",
52
- "redirect_uri" => $this->callback_uri
53
- );
54
- $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($this->token_url, $configurations, $headers);
55
- $yahoo_secret_key = $this->process_response($response);
56
- if (isset($yahoo_secret_key->error)) {
57
- return $yahoo_secret_key;
58
- } else {
59
- $this->get_authorization_token()->set_vendorname_mail_bank("yahoo");
60
- return "1";
61
- }
62
- } else {
63
- return false;
64
- }
65
  }
66
-
67
  //This function is used to get refresh token for new access token
68
  public function get_refresh_token() {
69
- $refresh_url = $this->token_url;
70
- $callback_uri = $this->callback_uri;
71
- $headers = array(
72
- "Authorization" => sprintf("Basic %s", base64_encode($this->client_id . ':' . $this->client_secret))
73
- );
74
 
75
- $configurations = array(
76
- "redirect_uri" => $callback_uri,
77
- "grant_type" => "refresh_token",
78
- "refresh_token" => $this->get_authorization_token()->retrieve_refresh_token_mail_bank()
79
- );
80
- $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($this->token_url, $configurations, $headers);
81
- $this->process_response($response);
82
  }
83
-
84
  }
85
-
86
  }
1
  <?php
 
2
  if (!defined("ABSPATH")) {
3
  exit;
4
  } // Exit if accessed directly
9
  if (!class_exists("yahoo_authentication_mail_bank")) {
10
 
11
  class yahoo_authentication_mail_bank extends token_manager_mail_bank {
 
12
  public
13
+ $client_id,
14
+ $client_secret,
15
+ $callback_uri,
16
+ $token_url;
 
17
  // Constructor
18
  public function __construct($client_id, $client_secret, mail_bank_manage_token $authorization_token, $callback_uri) {
19
+ $this->client_id = $client_id;
20
+ $this->client_secret = $client_secret;
21
+ $this->callback_uri = $callback_uri;
22
+ $this->token_url = "https://api.login.yahoo.com/oauth2/get_token";
23
+ parent::__construct($client_id, $client_secret, $authorization_token, $callback_uri);
24
  }
 
25
  // This function is used to get token code.
26
  public function get_token_code($transactionId) {
27
+ $configurations = array(
28
+ "response_type" => "code",
29
+ "redirect_uri" => urlencode($this->callback_uri),
30
+ "client_id" => $this->client_id,
31
+ "state" => $transactionId,
32
+ "language" => get_locale()
33
+ );
34
+ echo $authUrl = "https://api.login.yahoo.com/oauth2/request_auth?" . build_query($configurations);
35
  }
 
36
  // This function is used to process token code
37
  public function process_token_Code($transactionId) {
38
+ if (isset($_REQUEST["access_token"])) {
39
+ $code = esc_attr($_REQUEST["access_token"]);
40
 
41
+ $headers = array(
42
+ "Authorization" => sprintf("Basic %s", base64_encode($this->client_id . ':' . $this->client_secret))
43
+ );
44
+ $configurations = array(
45
+ "code" => $code,
46
+ "grant_type" => "authorization_code",
47
+ "redirect_uri" => $this->callback_uri
48
+ );
49
+ $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($this->token_url, $configurations, $headers);
50
+ $yahoo_secret_key = $this->process_response($response);
51
+ if (isset($yahoo_secret_key->error)) {
52
+ return $yahoo_secret_key;
53
+ } else {
54
+ $this->get_authorization_token()->set_vendorname_mail_bank("yahoo");
55
+ return "1";
56
+ }
57
+ } else {
58
+ return false;
59
+ }
60
  }
 
61
  //This function is used to get refresh token for new access token
62
  public function get_refresh_token() {
63
+ $refresh_url = $this->token_url;
64
+ $callback_uri = $this->callback_uri;
65
+ $headers = array(
66
+ "Authorization" => sprintf("Basic %s", base64_encode($this->client_id . ':' . $this->client_secret))
67
+ );
68
 
69
+ $configurations = array(
70
+ "redirect_uri" => $callback_uri,
71
+ "grant_type" => "refresh_token",
72
+ "refresh_token" => $this->get_authorization_token()->retrieve_refresh_token_mail_bank()
73
+ );
74
+ $response = mail_bank_zend_mail_helper::retrieve_body_from_response_mail_bank($this->token_url, $configurations, $headers);
75
+ $this->process_response($response);
76
  }
 
77
  }
 
78
  }
languages/{wp-mail-bank-vi.mo → wp-mail-bank-vi_VN.mo} RENAMED
Binary file
languages/{wp-mail-bank-vi.po → wp-mail-bank-vi_VN.po} RENAMED
@@ -3,7 +3,7 @@ msgstr ""
3
  "Project-Id-Version: Mail Bank\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2017-05-22 17:39+0530\n"
6
- "PO-Revision-Date: 2017-06-13 17:02+0530\n"
7
  "Last-Translator: Tech Banker\n"
8
  "Language-Team: Vietnamese (Vietnam)\n"
9
  "Language: vi_VN\n"
@@ -11,7 +11,7 @@ msgstr ""
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "Plural-Forms: nplurals=1; plural=0;\n"
14
- "X-Generator: Poedit 2.0\n"
15
  "X-Loco-Source-Locale: en-IN\n"
16
  "X-Loco-Project-Id: 22543\n"
17
  "X-Loco-Api-Version: 1.0.17 20170516-2\n"
3
  "Project-Id-Version: Mail Bank\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2017-05-22 17:39+0530\n"
6
+ "PO-Revision-Date: 2017-06-06 11:39+0530\n"
7
  "Last-Translator: Tech Banker\n"
8
  "Language-Team: Vietnamese (Vietnam)\n"
9
  "Language: vi_VN\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "Plural-Forms: nplurals=1; plural=0;\n"
14
+ "X-Generator: Poedit 1.8.12\n"
15
  "X-Loco-Source-Locale: en-IN\n"
16
  "X-Loco-Project-Id: 22543\n"
17
  "X-Loco-Api-Version: 1.0.17 20170516-2\n"
lib/action-library.php CHANGED
@@ -15,8 +15,8 @@ if (!is_user_logged_in()) {
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
- $access_granted = true;
19
- break;
20
  }
21
  }
22
  if (!$access_granted) {
@@ -24,293 +24,292 @@ if (!is_user_logged_in()) {
24
  } else {
25
 
26
  function get_mail_bank_details_maybe_unserialize($email_data_manage, $mb_date1, $mb_date2) {
27
- $email_details = array();
28
- foreach ($email_data_manage as $raw_row) {
29
- $unserialize_data = maybe_unserialize($raw_row->meta_value);
30
- $unserialize_data["id"] = $raw_row->id;
31
- $unserialize_data["meta_id"] = $raw_row->meta_id;
32
- if ($unserialize_data["timestamp"] >= $mb_date1 && $unserialize_data["timestamp"] <= $mb_date2)
33
- array_push($email_details, $unserialize_data);
34
- }
35
- return $email_details;
36
  }
37
-
38
  if (isset($_REQUEST["param"])) {
39
- $obj_dbHelper_mail_bank = new dbHelper_mail_bank();
40
- switch (esc_attr($_REQUEST["param"])) {
41
- case "wizard_wp_mail_bank":
42
- if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "wp_mail_bank_check_status")) {
43
- $type = isset($_REQUEST["type"]) ? esc_attr($_REQUEST["type"]) : "";
44
- update_option("wp-mail-bank-wizard-set-up", $type);
45
- if ($type == "opt_in") {
46
- $plugin_info_wp_mail_bank = new plugin_info_wp_mail_bank();
47
- global $wp_version;
48
- $url = tech_banker_stats_url . "/wp-admin/admin-ajax.php";
49
- $theme_details = array();
50
- if ($wp_version >= 3.4) {
51
- $active_theme = wp_get_theme();
52
- $theme_details["theme_name"] = strip_tags($active_theme->Name);
53
- $theme_details["theme_version"] = strip_tags($active_theme->Version);
54
- $theme_details["author_url"] = strip_tags($active_theme->{"Author URI"});
55
- }
56
 
57
- $plugin_stat_data = array();
58
- $plugin_stat_data["plugin_slug"] = "wp-mail-bank";
59
- $plugin_stat_data["type"] = "standard_edition";
60
- $plugin_stat_data["version_number"] = mail_bank_version_number;
61
- $plugin_stat_data["status"] = $type;
62
- $plugin_stat_data["event"] = "activate";
63
- $plugin_stat_data["domain_url"] = site_url();
64
- $plugin_stat_data["wp_language"] = defined("WPLANG") && WPLANG ? WPLANG : get_locale();
65
- $plugin_stat_data["email"] = get_option("admin_email");
66
- $plugin_stat_data["wp_version"] = $wp_version;
67
- $plugin_stat_data["php_version"] = esc_html(phpversion());
68
- $plugin_stat_data["mysql_version"] = $wpdb->db_version();
69
- $plugin_stat_data["max_input_vars"] = ini_get("max_input_vars");
70
- $plugin_stat_data["operating_system"] = PHP_OS . " (" . PHP_INT_SIZE * 8 . ") BIT";
71
- $plugin_stat_data["php_memory_limit"] = ini_get("memory_limit") ? ini_get("memory_limit") : "N/A";
72
- $plugin_stat_data["extensions"] = get_loaded_extensions();
73
- $plugin_stat_data["plugins"] = $plugin_info_wp_mail_bank->get_plugin_info_wp_mail_bank();
74
- $plugin_stat_data["themes"] = $theme_details;
75
 
76
- $response = wp_safe_remote_post($url, array
77
- (
78
- "method" => "POST",
79
- "timeout" => 45,
80
- "redirection" => 5,
81
- "httpversion" => "1.0",
82
- "blocking" => true,
83
- "headers" => array(),
84
- "body" => array("data" => serialize($plugin_stat_data), "site_id" => get_option("mb_tech_banker_site_id") != "" ? get_option("mb_tech_banker_site_id") : "", "action" => "plugin_analysis_data")
85
- ));
86
- if (!is_wp_error($response)) {
87
- $response["body"] != "" ? update_option("mb_tech_banker_site_id", $response["body"]) : "";
88
- }
89
- }
90
- }
91
- break;
92
 
93
- case "mail_bank_set_hostname_port_module":
94
- if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "mail_bank_set_hostname_port")) {
95
- $smtp_user = isset($_REQUEST["smtp_user"]) ? esc_attr($_REQUEST["smtp_user"]) : "";
96
- $hostname = substr(strrchr($smtp_user, "@"), 1);
97
- $obj_mail_bank_discover_host = new mail_bank_discover_host();
98
- $hostname_to_set = $obj_mail_bank_discover_host->get_smtp_from_email($hostname);
99
- echo $hostname_to_set;
100
- }
101
- break;
102
 
103
- case "mail_bank_test_email_configuration_module":
104
- if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "mail_bank_test_email_configuration")) {
105
- parse_str(isset($_REQUEST["data"]) ? base64_decode($_REQUEST["data"]) : "", $form_data);
106
- global $phpmailer;
107
- $logs = array();
108
- if (!is_object($phpmailer) || !is_a($phpmailer, "PHPMailer")) {
109
- if (file_exists(ABSPATH . WPINC . "/class-phpmailer.php"))
110
- require_once ABSPATH . WPINC . "/class-phpmailer.php";
111
 
112
- if (file_exists(ABSPATH . WPINC . "/class-smtp.php"))
113
- require_once ABSPATH . WPINC . "/class-smtp.php";
114
 
115
- $phpmailer = new PHPMailer(true);
116
- }
117
- $phpmailer->SMTPDebug = true;
118
 
119
- $to = isset($form_data["ux_txt_email"]) ? esc_attr($form_data["ux_txt_email"]) : "";
120
- $subject = stripcslashes(htmlspecialchars_decode($form_data["ux_txt_subject"], ENT_QUOTES));
121
- $message = htmlspecialchars_decode(!empty($form_data["ux_email_configuration_text_area"]) ? esc_attr($form_data["ux_email_configuration_text_area"]) : "This is a demo Test Email for Email Setup - Mail Bank");
122
- $headers = "Content-Type: text/html; charset= utf-8" . "\r\n";
123
- $result = wp_mail($to, $subject, $message, $headers);
124
- $mb_email_configuration_data = $wpdb->get_row
125
- (
126
- $wpdb->prepare
127
- (
128
- "SELECT meta_value FROM " . mail_bank_meta() .
129
- " WHERE meta_key = %s", "email_configuration"
130
- )
131
- );
132
- $unserialized_email_configuration_data = maybe_unserialize($mb_email_configuration_data->meta_value);
133
 
134
- $settings_data = $wpdb->get_var
135
- (
136
- $wpdb->prepare
137
- (
138
- "SELECT meta_value FROM " . mail_bank_meta() .
139
- " WHERE meta_key=%s", "settings"
140
- )
141
- );
142
- $settings_data_array = maybe_unserialize($settings_data);
143
- $debugging_output = "";
144
- $mailer_type_mail_bank = isset($unserialized_email_configuration_data["mailer_type"]) ? esc_attr($unserialized_email_configuration_data["mailer_type"]) : "";
145
 
146
- if ($mailer_type_mail_bank == "smtp") {
147
- $mail_bank_mail_status = get_option("mail_bank_mail_status");
148
- $debug_mode_mail_bank = isset($settings_data_array["debug_mode"]) ? esc_attr($settings_data_array["debug_mode"]) : "";
149
- if ($debug_mode_mail_bank == "enable") {
150
- $debugging_output .= $mb_email_configuration_send_test_email_textarea . "\n";
151
- $debugging_output .= $mb_test_email_sending_test_email . " " . $to . "\n";
152
- $debugging_output .= $mb_test_email_status . " : ";
153
- $debugging_output .= get_option("mail_bank_is_mail_sent") == "Sent" ? $mb_status_sent : $mb_status_not_sent;
154
- $debugging_output .= "\n----------------------------------------------------------------------------------------\n";
155
- $debugging_output .= $mb_email_logs_debugging_output . " :\n";
156
- $debugging_output .= "----------------------------------------------------------------------------------------\n";
157
- }
158
- $debugging_output .= $mail_bank_mail_status;
159
- echo $debugging_output;
160
- } else {
161
- $to_address = $phpmailer->getToAddresses();
162
 
163
- $email_logs_data_array = array();
164
- $email_logs_data_array["email_to"] = $to_address[0][0];
165
- $monitor_email_logs = isset($settings_data_array["monitor_email_logs"]) ? esc_attr($settings_data_array["monitor_email_logs"]) : "";
166
- if ($monitor_email_logs == "enable") {
167
- $email_logs_data_array["sender_name"] = isset($unserialized_email_configuration_data["sender_name"]) ? esc_attr($unserialized_email_configuration_data["sender_name"]) : "";
168
- $email_logs_data_array["sender_email"] = isset($unserialized_email_configuration_data["sender_email"]) ? esc_attr($unserialized_email_configuration_data["sender_email"]) : "";
169
- $email_logs_data_array["cc"] = "";
170
- $email_logs_data_array["bcc"] = "";
171
- $email_logs_data_array["subject"] = $phpmailer->Subject;
172
- $email_logs_data_array["content"] = $phpmailer->Body;
173
- $email_logs_data_array["timestamp"] = MAIL_BANK_LOCAL_TIME;
174
 
175
- if ($result == "true" || $result == "1") {
176
- $email_logs_data_array["status"] = "Sent";
177
- } else {
178
- $email_logs_data_array["status"] = "Not Sent";
179
- }
180
- $email_logs_id = $wpdb->get_var
181
- (
182
- $wpdb->prepare
183
- (
184
- "SELECT id FROM " . mail_bank() .
185
- " WHERE type = %s", "email_logs"
186
- )
187
- );
188
 
189
- $email_logs_data = array();
190
- $email_logs_data["meta_id"] = $email_logs_id;
191
- $email_logs_data["meta_key"] = "email_logs";
192
- $email_logs_data["meta_value"] = serialize($email_logs_data_array);
193
- $obj_dbHelper_mail_bank->insertCommand(mail_bank_meta(), $email_logs_data);
194
- }
195
- echo $result;
196
- }
197
- }
198
- break;
199
 
200
- case "mail_bank_settings_module":
201
- if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "mail_bank_settings")) {
202
- parse_str(isset($_REQUEST["data"]) ? base64_decode($_REQUEST["data"]) : "", $settings_array);
203
 
204
- $settings_data = array();
205
- $settings_data["debug_mode"] = esc_attr($settings_array["ux_ddl_debug_mode"]);
206
- $settings_data["remove_tables_at_uninstall"] = esc_attr($settings_array["ux_ddl_remove_tables"]);
207
- $settings_data["monitor_email_logs"] = esc_attr($settings_array["ux_ddl_monitor_email_logs"]);
208
- $where = array();
209
- $settings_data_array = array();
210
- $where["meta_key"] = "settings";
211
- $settings_data_array["meta_value"] = serialize($settings_data);
212
- $obj_dbHelper_mail_bank->updateCommand(mail_bank_meta(), $settings_data_array, $where);
213
- }
214
- break;
215
 
216
- case "mail_bank_email_configuration_settings_module":
217
- if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "mail_bank_email_configuration_settings")) {
218
- parse_str(isset($_REQUEST["data"]) ? base64_decode($_REQUEST["data"]) : "", $form_data);
219
- $update_email_configuration_array = array();
220
- $update_email_configuration_array["email_address"] = esc_attr($form_data["ux_txt_email_address"]);
221
- $update_email_configuration_array["reply_to"] = "";
222
- $update_email_configuration_array["cc"] = "";
223
- $update_email_configuration_array["bcc"] = "";
224
- $update_email_configuration_array["mailer_type"] = esc_attr($form_data["ux_ddl_type"]);
225
- $update_email_configuration_array["sender_name_configuration"] = esc_attr($form_data["ux_ddl_from_name"]);
226
- $update_email_configuration_array["sender_name"] = isset($form_data["ux_txt_mb_from_name"]) ? esc_html($form_data["ux_txt_mb_from_name"]) : "";
227
- $update_email_configuration_array["from_email_configuration"] = esc_attr($form_data["ux_ddl_from_email"]);
228
- $update_email_configuration_array["sender_email"] = isset($form_data["ux_txt_mb_from_email_configuration"]) ? esc_html($form_data["ux_txt_mb_from_email_configuration"]) : "";
229
- $update_email_configuration_array["hostname"] = esc_html($form_data["ux_txt_host"]);
230
- $update_email_configuration_array["port"] = intval($form_data["ux_txt_port"]);
231
- $update_email_configuration_array["enc_type"] = esc_attr($form_data["ux_ddl_encryption"]);
232
- $update_email_configuration_array["auth_type"] = esc_attr($form_data["ux_ddl_mb_authentication"]);
233
- $update_email_configuration_array["client_id"] = esc_html(trim($form_data["ux_txt_client_id"]));
234
- $update_email_configuration_array["client_secret"] = esc_html(trim($form_data["ux_txt_client_secret"]));
235
- $update_email_configuration_array["username"] = esc_html($form_data["ux_txt_username"]);
236
- $update_email_configuration_array["automatic_mail"] = isset($form_data["ux_chk_automatic_sent_mail"]) ? esc_html($form_data["ux_chk_automatic_sent_mail"]) : "";
237
 
238
- if (preg_match('/^\**$/', $form_data["ux_txt_password"])) {
239
- $email_configuration_data = $wpdb->get_var
240
- (
241
- $wpdb->prepare
242
- (
243
- "SELECT meta_value FROM " . mail_bank_meta() .
244
- " WHERE meta_key=%s", "email_configuration"
245
- )
246
- );
247
- $email_configuration_array = maybe_unserialize($email_configuration_data);
248
- $update_email_configuration_array["password"] = isset($email_configuration_array["password"]) ? esc_attr($email_configuration_array["password"]) : "";
249
- } else {
250
- $update_email_configuration_array["password"] = base64_encode(esc_html($form_data["ux_txt_password"]));
251
- }
252
 
253
- $update_email_configuration_array["redirect_uri"] = esc_html($form_data["ux_txt_redirect_uri"]);
254
 
255
- update_option("update_email_configuration", $update_email_configuration_array);
256
 
257
- $mail_bank_auth_host = new mail_bank_auth_host($update_email_configuration_array);
258
- if (!in_array($form_data["ux_txt_host"], $mail_bank_auth_host->oauth_domains) && $form_data["ux_ddl_mb_authentication"] == "oauth2") {
259
- echo "100";
260
- die();
261
- }
262
 
263
- if ($update_email_configuration_array["auth_type"] == "oauth2" && $update_email_configuration_array["mailer_type"] == "smtp") {
264
- if ($update_email_configuration_array["hostname"] == "smtp.gmail.com") {
265
- $mail_bank_auth_host->google_authentication();
266
- } elseif ($update_email_configuration_array["hostname"] == "smtp.live.com" && $update_email_configuration_array["mailer_type"] == "smtp") {
267
- $mail_bank_auth_host->microsoft_authentication();
268
- } elseif (in_array($update_email_configuration_array["hostname"], $mail_bank_auth_host->yahoo_domains)) {
269
- $mail_bank_auth_host->yahoo_authentication();
270
- }
271
- } else {
272
- $update_email_configuration_data_array = array();
273
- $where = array();
274
- $where["meta_key"] = "email_configuration";
275
- $update_email_configuration_data_array["meta_value"] = serialize($update_email_configuration_array);
276
- $obj_dbHelper_mail_bank->updateCommand(mail_bank_meta(), $update_email_configuration_data_array, $where);
277
- }
278
- }
279
- break;
280
 
281
- case "mail_bank_connectivity_test":
282
- if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "connectivity_test_nonce")) {
283
- $host = isset($_REQUEST["smtp_host"]) ? esc_attr($_REQUEST["smtp_host"]) : "";
284
- $ports = array(25, 587, 465, 2525, 4065, 25025);
285
- $ports_result = array();
286
- foreach ($ports as $port) {
287
- $connection = @fsockopen($host, $port);
288
- if (is_resource($connection)) {
289
- $ports_result[$port] = "Open";
290
- fclose($connection);
291
- } else {
292
- $ports_result[$port] = "Close";
293
- }
294
- }
295
- foreach ($ports_result as $results => $val) {
296
- ?>
297
- <tr>
298
- <td>
299
- <?php echo $mb_smtp; ?>
300
- </td>
301
- <td>
302
- <?php echo $host . ":" . intval($results); ?>
303
- </td>
304
- <td>
305
- <span style="<?php echo $val == 'Close' ? 'color:red' : ""; ?>"><?php echo $val; ?>
306
- </td>
307
- </tr>
308
- <?php
309
- }
310
- }
311
- break;
312
- }
313
- die();
314
  }
315
  }
316
  }
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
  }
21
  }
22
  if (!$access_granted) {
24
  } else {
25
 
26
  function get_mail_bank_details_maybe_unserialize($email_data_manage, $mb_date1, $mb_date2) {
27
+ $email_details = array();
28
+ foreach ($email_data_manage as $raw_row) {
29
+ $unserialize_data = maybe_unserialize($raw_row->meta_value);
30
+ $unserialize_data["id"] = $raw_row->id;
31
+ $unserialize_data["meta_id"] = $raw_row->meta_id;
32
+ if ($unserialize_data["timestamp"] >= $mb_date1 && $unserialize_data["timestamp"] <= $mb_date2)
33
+ array_push($email_details, $unserialize_data);
34
+ }
35
+ return $email_details;
36
  }
 
37
  if (isset($_REQUEST["param"])) {
38
+ $obj_dbHelper_mail_bank = new dbHelper_mail_bank();
39
+ switch (esc_attr($_REQUEST["param"])) {
40
+ case "wizard_wp_mail_bank":
41
+ if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "wp_mail_bank_check_status")) {
42
+ $type = isset($_REQUEST["type"]) ? esc_attr($_REQUEST["type"]) : "";
43
+ update_option("wp-mail-bank-wizard-set-up", $type);
44
+ if ($type == "opt_in") {
45
+ $plugin_info_wp_mail_bank = new plugin_info_wp_mail_bank();
46
+ global $wp_version;
47
+ $url = tech_banker_stats_url . "/wp-admin/admin-ajax.php";
48
+ $theme_details = array();
49
+ if ($wp_version >= 3.4) {
50
+ $active_theme = wp_get_theme();
51
+ $theme_details["theme_name"] = strip_tags($active_theme->Name);
52
+ $theme_details["theme_version"] = strip_tags($active_theme->Version);
53
+ $theme_details["author_url"] = strip_tags($active_theme->{"Author URI"});
54
+ }
55
 
56
+ $plugin_stat_data = array();
57
+ $plugin_stat_data["plugin_slug"] = "wp-mail-bank";
58
+ $plugin_stat_data["type"] = "standard_edition";
59
+ $plugin_stat_data["version_number"] = mail_bank_version_number;
60
+ $plugin_stat_data["status"] = $type;
61
+ $plugin_stat_data["event"] = "activate";
62
+ $plugin_stat_data["domain_url"] = site_url();
63
+ $plugin_stat_data["wp_language"] = defined("WPLANG") && WPLANG ? WPLANG : get_locale();
64
+ $plugin_stat_data["email"] = get_option("admin_email");
65
+ $plugin_stat_data["wp_version"] = $wp_version;
66
+ $plugin_stat_data["php_version"] = esc_html(phpversion());
67
+ $plugin_stat_data["mysql_version"] = $wpdb->db_version();
68
+ $plugin_stat_data["max_input_vars"] = ini_get("max_input_vars");
69
+ $plugin_stat_data["operating_system"] = PHP_OS . " (" . PHP_INT_SIZE * 8 . ") BIT";
70
+ $plugin_stat_data["php_memory_limit"] = ini_get("memory_limit") ? ini_get("memory_limit") : "N/A";
71
+ $plugin_stat_data["extensions"] = get_loaded_extensions();
72
+ $plugin_stat_data["plugins"] = $plugin_info_wp_mail_bank->get_plugin_info_wp_mail_bank();
73
+ $plugin_stat_data["themes"] = $theme_details;
74
 
75
+ $response = wp_safe_remote_post($url, array
76
+ (
77
+ "method" => "POST",
78
+ "timeout" => 45,
79
+ "redirection" => 5,
80
+ "httpversion" => "1.0",
81
+ "blocking" => true,
82
+ "headers" => array(),
83
+ "body" => array("data" => serialize($plugin_stat_data), "site_id" => get_option("mb_tech_banker_site_id") != "" ? get_option("mb_tech_banker_site_id") : "", "action" => "plugin_analysis_data")
84
+ ));
85
+ if (!is_wp_error($response)) {
86
+ $response["body"] != "" ? update_option("mb_tech_banker_site_id", $response["body"]) : "";
87
+ }
88
+ }
89
+ }
90
+ break;
91
 
92
+ case "mail_bank_set_hostname_port_module":
93
+ if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "mail_bank_set_hostname_port")) {
94
+ $smtp_user = isset($_REQUEST["smtp_user"]) ? esc_attr($_REQUEST["smtp_user"]) : "";
95
+ $hostname = substr(strrchr($smtp_user, "@"), 1);
96
+ $obj_mail_bank_discover_host = new mail_bank_discover_host();
97
+ $hostname_to_set = $obj_mail_bank_discover_host->get_smtp_from_email($hostname);
98
+ echo $hostname_to_set;
99
+ }
100
+ break;
101
 
102
+ case "mail_bank_test_email_configuration_module":
103
+ if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "mail_bank_test_email_configuration")) {
104
+ parse_str(isset($_REQUEST["data"]) ? base64_decode($_REQUEST["data"]) : "", $form_data);
105
+ global $phpmailer;
106
+ $logs = array();
107
+ if (!is_object($phpmailer) || !is_a($phpmailer, "PHPMailer")) {
108
+ if (file_exists(ABSPATH . WPINC . "/class-phpmailer.php"))
109
+ require_once ABSPATH . WPINC . "/class-phpmailer.php";
110
 
111
+ if (file_exists(ABSPATH . WPINC . "/class-smtp.php"))
112
+ require_once ABSPATH . WPINC . "/class-smtp.php";
113
 
114
+ $phpmailer = new PHPMailer(true);
115
+ }
116
+ $phpmailer->SMTPDebug = true;
117
 
118
+ $to = isset($form_data["ux_txt_email"]) ? esc_attr($form_data["ux_txt_email"]) : "";
119
+ $subject = stripcslashes(htmlspecialchars_decode($form_data["ux_txt_subject"], ENT_QUOTES));
120
+ $message = htmlspecialchars_decode(!empty($form_data["ux_email_configuration_text_area"]) ? esc_attr($form_data["ux_email_configuration_text_area"]) : "This is a demo Test Email for Email Setup - Mail Bank");
121
+ $headers = "Content-Type: text/html; charset= utf-8" . "\r\n";
122
+ $result = wp_mail($to, $subject, $message, $headers);
123
+ $mb_email_configuration_data = $wpdb->get_row
124
+ (
125
+ $wpdb->prepare
126
+ (
127
+ "SELECT meta_value FROM " . mail_bank_meta() .
128
+ " WHERE meta_key = %s", "email_configuration"
129
+ )
130
+ );
131
+ $unserialized_email_configuration_data = maybe_unserialize($mb_email_configuration_data->meta_value);
132
 
133
+ $settings_data = $wpdb->get_var
134
+ (
135
+ $wpdb->prepare
136
+ (
137
+ "SELECT meta_value FROM " . mail_bank_meta() .
138
+ " WHERE meta_key=%s", "settings"
139
+ )
140
+ );
141
+ $settings_data_array = maybe_unserialize($settings_data);
142
+ $debugging_output = "";
143
+ $mailer_type_mail_bank = isset($unserialized_email_configuration_data["mailer_type"]) ? esc_attr($unserialized_email_configuration_data["mailer_type"]) : "";
144
 
145
+ if ($mailer_type_mail_bank == "smtp") {
146
+ $mail_bank_mail_status = get_option("mail_bank_mail_status");
147
+ $debug_mode_mail_bank = isset($settings_data_array["debug_mode"]) ? esc_attr($settings_data_array["debug_mode"]) : "";
148
+ if ($debug_mode_mail_bank == "enable") {
149
+ $debugging_output .= $mb_email_configuration_send_test_email_textarea . "\n";
150
+ $debugging_output .= $mb_test_email_sending_test_email . " " . $to . "\n";
151
+ $debugging_output .= $mb_test_email_status . " : ";
152
+ $debugging_output .= get_option("mail_bank_is_mail_sent") == "Sent" ? $mb_status_sent : $mb_status_not_sent;
153
+ $debugging_output .= "\n----------------------------------------------------------------------------------------\n";
154
+ $debugging_output .= $mb_email_logs_debugging_output . " :\n";
155
+ $debugging_output .= "----------------------------------------------------------------------------------------\n";
156
+ }
157
+ $debugging_output .= $mail_bank_mail_status;
158
+ echo $debugging_output;
159
+ } else {
160
+ $to_address = $phpmailer->getToAddresses();
161
 
162
+ $email_logs_data_array = array();
163
+ $email_logs_data_array["email_to"] = $to_address[0][0];
164
+ $monitor_email_logs = isset($settings_data_array["monitor_email_logs"]) ? esc_attr($settings_data_array["monitor_email_logs"]) : "";
165
+ if ($monitor_email_logs == "enable") {
166
+ $email_logs_data_array["sender_name"] = isset($unserialized_email_configuration_data["sender_name"]) ? esc_attr($unserialized_email_configuration_data["sender_name"]) : "";
167
+ $email_logs_data_array["sender_email"] = isset($unserialized_email_configuration_data["sender_email"]) ? esc_attr($unserialized_email_configuration_data["sender_email"]) : "";
168
+ $email_logs_data_array["cc"] = "";
169
+ $email_logs_data_array["bcc"] = "";
170
+ $email_logs_data_array["subject"] = $phpmailer->Subject;
171
+ $email_logs_data_array["content"] = $phpmailer->Body;
172
+ $email_logs_data_array["timestamp"] = MAIL_BANK_LOCAL_TIME;
173
 
174
+ if ($result == "true" || $result == "1") {
175
+ $email_logs_data_array["status"] = "Sent";
176
+ } else {
177
+ $email_logs_data_array["status"] = "Not Sent";
178
+ }
179
+ $email_logs_id = $wpdb->get_var
180
+ (
181
+ $wpdb->prepare
182
+ (
183
+ "SELECT id FROM " . mail_bank() .
184
+ " WHERE type = %s", "email_logs"
185
+ )
186
+ );
187
 
188
+ $email_logs_data = array();
189
+ $email_logs_data["meta_id"] = $email_logs_id;
190
+ $email_logs_data["meta_key"] = "email_logs";
191
+ $email_logs_data["meta_value"] = serialize($email_logs_data_array);
192
+ $obj_dbHelper_mail_bank->insertCommand(mail_bank_meta(), $email_logs_data);
193
+ }
194
+ echo $result;
195
+ }
196
+ }
197
+ break;
198
 
199
+ case "mail_bank_settings_module":
200
+ if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "mail_bank_settings")) {
201
+ parse_str(isset($_REQUEST["data"]) ? base64_decode($_REQUEST["data"]) : "", $settings_array);
202
 
203
+ $settings_data = array();
204
+ $settings_data["debug_mode"] = esc_attr($settings_array["ux_ddl_debug_mode"]);
205
+ $settings_data["remove_tables_at_uninstall"] = esc_attr($settings_array["ux_ddl_remove_tables"]);
206
+ $settings_data["monitor_email_logs"] = esc_attr($settings_array["ux_ddl_monitor_email_logs"]);
207
+ $where = array();
208
+ $settings_data_array = array();
209
+ $where["meta_key"] = "settings";
210
+ $settings_data_array["meta_value"] = serialize($settings_data);
211
+ $obj_dbHelper_mail_bank->updateCommand(mail_bank_meta(), $settings_data_array, $where);
212
+ }
213
+ break;
214
 
215
+ case "mail_bank_email_configuration_settings_module":
216
+ if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "mail_bank_email_configuration_settings")) {
217
+ parse_str(isset($_REQUEST["data"]) ? base64_decode($_REQUEST["data"]) : "", $form_data);
218
+ $update_email_configuration_array = array();
219
+ $update_email_configuration_array["email_address"] = esc_attr($form_data["ux_txt_email_address"]);
220
+ $update_email_configuration_array["reply_to"] = "";
221
+ $update_email_configuration_array["cc"] = "";
222
+ $update_email_configuration_array["bcc"] = "";
223
+ $update_email_configuration_array["mailer_type"] = esc_attr($form_data["ux_ddl_type"]);
224
+ $update_email_configuration_array["sender_name_configuration"] = esc_attr($form_data["ux_ddl_from_name"]);
225
+ $update_email_configuration_array["sender_name"] = isset($form_data["ux_txt_mb_from_name"]) ? esc_html($form_data["ux_txt_mb_from_name"]) : "";
226
+ $update_email_configuration_array["from_email_configuration"] = esc_attr($form_data["ux_ddl_from_email"]);
227
+ $update_email_configuration_array["sender_email"] = isset($form_data["ux_txt_mb_from_email_configuration"]) ? esc_html($form_data["ux_txt_mb_from_email_configuration"]) : "";
228
+ $update_email_configuration_array["hostname"] = esc_html($form_data["ux_txt_host"]);
229
+ $update_email_configuration_array["port"] = intval($form_data["ux_txt_port"]);
230
+ $update_email_configuration_array["enc_type"] = esc_attr($form_data["ux_ddl_encryption"]);
231
+ $update_email_configuration_array["auth_type"] = esc_attr($form_data["ux_ddl_mb_authentication"]);
232
+ $update_email_configuration_array["client_id"] = esc_html(trim($form_data["ux_txt_client_id"]));
233
+ $update_email_configuration_array["client_secret"] = esc_html(trim($form_data["ux_txt_client_secret"]));
234
+ $update_email_configuration_array["username"] = esc_html($form_data["ux_txt_username"]);
235
+ $update_email_configuration_array["automatic_mail"] = isset($form_data["ux_chk_automatic_sent_mail"]) ? esc_html($form_data["ux_chk_automatic_sent_mail"]) : "";
236
 
237
+ if (preg_match('/^\**$/', $form_data["ux_txt_password"])) {
238
+ $email_configuration_data = $wpdb->get_var
239
+ (
240
+ $wpdb->prepare
241
+ (
242
+ "SELECT meta_value FROM " . mail_bank_meta() .
243
+ " WHERE meta_key=%s", "email_configuration"
244
+ )
245
+ );
246
+ $email_configuration_array = maybe_unserialize($email_configuration_data);
247
+ $update_email_configuration_array["password"] = isset($email_configuration_array["password"]) ? esc_attr($email_configuration_array["password"]) : "";
248
+ } else {
249
+ $update_email_configuration_array["password"] = base64_encode(esc_html($form_data["ux_txt_password"]));
250
+ }
251
 
252
+ $update_email_configuration_array["redirect_uri"] = esc_html($form_data["ux_txt_redirect_uri"]);
253
 
254
+ update_option("update_email_configuration", $update_email_configuration_array);
255
 
256
+ $mail_bank_auth_host = new mail_bank_auth_host($update_email_configuration_array);
257
+ if (!in_array($form_data["ux_txt_host"], $mail_bank_auth_host->oauth_domains) && $form_data["ux_ddl_mb_authentication"] == "oauth2") {
258
+ echo "100";
259
+ die();
260
+ }
261
 
262
+ if ($update_email_configuration_array["auth_type"] == "oauth2" && $update_email_configuration_array["mailer_type"] == "smtp") {
263
+ if ($update_email_configuration_array["hostname"] == "smtp.gmail.com") {
264
+ $mail_bank_auth_host->google_authentication();
265
+ } elseif ($update_email_configuration_array["hostname"] == "smtp.live.com" && $update_email_configuration_array["mailer_type"] == "smtp") {
266
+ $mail_bank_auth_host->microsoft_authentication();
267
+ } elseif (in_array($update_email_configuration_array["hostname"], $mail_bank_auth_host->yahoo_domains)) {
268
+ $mail_bank_auth_host->yahoo_authentication();
269
+ }
270
+ } else {
271
+ $update_email_configuration_data_array = array();
272
+ $where = array();
273
+ $where["meta_key"] = "email_configuration";
274
+ $update_email_configuration_data_array["meta_value"] = serialize($update_email_configuration_array);
275
+ $obj_dbHelper_mail_bank->updateCommand(mail_bank_meta(), $update_email_configuration_data_array, $where);
276
+ }
277
+ }
278
+ break;
279
 
280
+ case "mail_bank_connectivity_test":
281
+ if (wp_verify_nonce(isset($_REQUEST["_wp_nonce"]) ? esc_attr($_REQUEST["_wp_nonce"]) : "", "connectivity_test_nonce")) {
282
+ $host = isset($_REQUEST["smtp_host"]) ? esc_attr($_REQUEST["smtp_host"]) : "";
283
+ $ports = array(25, 587, 465, 2525, 4065, 25025);
284
+ $ports_result = array();
285
+ foreach ($ports as $port) {
286
+ $connection = @fsockopen($host, $port);
287
+ if (is_resource($connection)) {
288
+ $ports_result[$port] = "Open";
289
+ fclose($connection);
290
+ } else {
291
+ $ports_result[$port] = "Close";
292
+ }
293
+ }
294
+ foreach ($ports_result as $results => $val) {
295
+ ?>
296
+ <tr>
297
+ <td>
298
+ <?php echo $mb_smtp; ?>
299
+ </td>
300
+ <td>
301
+ <?php echo $host . ":" . intval($results); ?>
302
+ </td>
303
+ <td>
304
+ <span style="<?php echo $val == 'Close' ? 'color:red' : ""; ?>"><?php echo $val; ?>
305
+ </td>
306
+ </tr>
307
+ <?php
308
+ }
309
+ }
310
+ break;
311
+ }
312
+ die();
313
  }
314
  }
315
  }
lib/admin-bar-menu.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * This file is used for creating admin bar menu.
5
  *
@@ -16,8 +15,8 @@ if (!is_user_logged_in()) {
16
  $access_granted = false;
17
  foreach ($user_role_permission as $permission) {
18
  if (current_user_can($permission)) {
19
- $access_granted = true;
20
- break;
21
  }
22
  }
23
  if (!$access_granted) {
@@ -26,121 +25,121 @@ if (!is_user_logged_in()) {
26
  $flag = 0;
27
 
28
  $role_capabilities = $wpdb->get_var
29
- (
30
- $wpdb->prepare
31
- (
32
- "SELECT meta_value FROM " . mail_bank_meta() . "
33
  WHERE meta_key = %s", "roles_and_capabilities"
34
- )
35
  );
36
 
37
  $roles_and_capabilities_unserialized_data = maybe_unserialize($role_capabilities);
38
  $capabilities = explode(",", isset($roles_and_capabilities_unserialized_data["roles_and_capabilities"]) ? esc_attr($roles_and_capabilities_unserialized_data["roles_and_capabilities"]) : "");
39
 
40
  if (is_super_admin()) {
41
- $mb_role = "administrator";
42
  } else {
43
- $mb_role = check_user_roles_mail_bank();
44
  }
45
  switch ($mb_role) {
46
- case "administrator":
47
- $flag = $capabilities[0];
48
- break;
49
 
50
- case "author":
51
- $flag = $capabilities[1];
52
- break;
53
 
54
- case "editor":
55
- $flag = $capabilities[2];
56
- break;
57
 
58
- case "contributor":
59
- $flag = $capabilities[3];
60
- break;
61
 
62
- case "subscriber":
63
- $flag = $capabilities[4];
64
- break;
65
 
66
- default:
67
- $flag = $capabilities[5];
68
- break;
69
  }
70
 
71
  if ($flag == "1") {
72
- global $wp_version;
73
- $icon = "<img style=\"vertical-align:middle; margin-right:3px;\" src=" . plugins_url("assets/global/img/icon.png", dirname(__FILE__)) . ">";
74
- $wp_admin_bar->add_menu(array
75
- (
76
- "id" => "wp_mail_bank",
77
- "title" => $icon . "<span class=\"ab-label\">" . $wp_mail_bank . "</span>",
78
- "href" => admin_url("admin.php?page=mb_email_configuration")
79
- ));
80
- $wp_admin_bar->add_menu(array
81
- (
82
- "parent" => "wp_mail_bank",
83
- "id" => "email_configuration_mail_bank",
84
- "title" => $mb_email_configuration,
85
- "href" => admin_url("admin.php?page=mb_email_configuration")
86
- ));
87
- $wp_admin_bar->add_menu(array
88
- (
89
- "parent" => "wp_mail_bank",
90
- "id" => "test_email_mail_bank",
91
- "title" => $mb_test_email,
92
- "href" => admin_url("admin.php?page=mb_test_email")
93
- ));
94
- $wp_admin_bar->add_menu(array
95
- (
96
- "parent" => "wp_mail_bank",
97
- "id" => "connectivity_test_mail_bank",
98
- "title" => $mb_connectivity_test,
99
- "href" => admin_url("admin.php?page=mb_connectivity_test")
100
- ));
101
- $wp_admin_bar->add_menu(array
102
- (
103
- "parent" => "wp_mail_bank",
104
- "id" => "email_logs_mail_bank",
105
- "title" => $mb_email_logs,
106
- "href" => admin_url("admin.php?page=mb_email_logs")
107
- ));
108
 
109
- $wp_admin_bar->add_menu(array
110
- (
111
- "parent" => "wp_mail_bank",
112
- "id" => "general_settings_mail_bank",
113
- "title" => $mb_settings,
114
- "href" => admin_url("admin.php?page=mb_settings")
115
- ));
116
- $wp_admin_bar->add_menu(array
117
- (
118
- "parent" => "wp_mail_bank",
119
- "id" => "roles_and_capabilities_mail_bank",
120
- "title" => $mb_roles_and_capabilities,
121
- "href" => admin_url("admin.php?page=mb_roles_and_capabilities")
122
- ));
123
- $wp_admin_bar->add_menu(array
124
- (
125
- "parent" => "wp_mail_bank",
126
- "id" => "feedbacks_mail_bank",
127
- "title" => $mb_feedbacks,
128
- "href" => admin_url("admin.php?page=mb_feedbacks")
129
- ));
130
- $wp_admin_bar->add_menu(array
131
- (
132
- "parent" => "wp_mail_bank",
133
- "id" => "system_information_mail_bank",
134
- "title" => $mb_system_information,
135
- "href" => admin_url("admin.php?page=mb_system_information")
136
- ));
137
- $wp_admin_bar->add_menu(array
138
- (
139
- "parent" => "wp_mail_bank",
140
- "id" => "mb_upgrade",
141
- "title" => $mb_upgrade,
142
- "href" => admin_url("admin.php?page=mb_upgrade")
143
- ));
144
  }
145
  }
146
  }
1
  <?php
 
2
  /**
3
  * This file is used for creating admin bar menu.
4
  *
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
  }
21
  }
22
  if (!$access_granted) {
25
  $flag = 0;
26
 
27
  $role_capabilities = $wpdb->get_var
28
+ (
29
+ $wpdb->prepare
30
+ (
31
+ "SELECT meta_value FROM " . mail_bank_meta() . "
32
  WHERE meta_key = %s", "roles_and_capabilities"
33
+ )
34
  );
35
 
36
  $roles_and_capabilities_unserialized_data = maybe_unserialize($role_capabilities);
37
  $capabilities = explode(",", isset($roles_and_capabilities_unserialized_data["roles_and_capabilities"]) ? esc_attr($roles_and_capabilities_unserialized_data["roles_and_capabilities"]) : "");
38
 
39
  if (is_super_admin()) {
40
+ $mb_role = "administrator";
41
  } else {
42
+ $mb_role = check_user_roles_mail_bank();
43
  }
44
  switch ($mb_role) {
45
+ case "administrator":
46
+ $flag = $capabilities[0];
47
+ break;
48
 
49
+ case "author":
50
+ $flag = $capabilities[1];
51
+ break;
52
 
53
+ case "editor":
54
+ $flag = $capabilities[2];
55
+ break;
56
 
57
+ case "contributor":
58
+ $flag = $capabilities[3];
59
+ break;
60
 
61
+ case "subscriber":
62
+ $flag = $capabilities[4];
63
+ break;
64
 
65
+ default:
66
+ $flag = $capabilities[5];
67
+ break;
68
  }
69
 
70
  if ($flag == "1") {
71
+ global $wp_version;
72
+ $icon = "<img style=\"vertical-align:middle; margin-right:3px;\" src=" . plugins_url("assets/global/img/icon.png", dirname(__FILE__)) . ">";
73
+ $wp_admin_bar->add_menu(array
74
+ (
75
+ "id" => "wp_mail_bank",
76
+ "title" => $icon . "<span class=\"ab-label\">" . $wp_mail_bank . "</span>",
77
+ "href" => admin_url("admin.php?page=mb_email_configuration")
78
+ ));
79
+ $wp_admin_bar->add_menu(array
80
+ (
81
+ "parent" => "wp_mail_bank",
82
+ "id" => "email_configuration_mail_bank",
83
+ "title" => $mb_email_configuration,
84
+ "href" => admin_url("admin.php?page=mb_email_configuration")
85
+ ));
86
+ $wp_admin_bar->add_menu(array
87
+ (
88
+ "parent" => "wp_mail_bank",
89
+ "id" => "test_email_mail_bank",
90
+ "title" => $mb_test_email,
91
+ "href" => admin_url("admin.php?page=mb_test_email")
92
+ ));
93
+ $wp_admin_bar->add_menu(array
94
+ (
95
+ "parent" => "wp_mail_bank",
96
+ "id" => "connectivity_test_mail_bank",
97
+ "title" => $mb_connectivity_test,
98
+ "href" => admin_url("admin.php?page=mb_connectivity_test")
99
+ ));
100
+ $wp_admin_bar->add_menu(array
101
+ (
102
+ "parent" => "wp_mail_bank",
103
+ "id" => "email_logs_mail_bank",
104
+ "title" => $mb_email_logs,
105
+ "href" => admin_url("admin.php?page=mb_email_logs")
106
+ ));
107
 
108
+ $wp_admin_bar->add_menu(array
109
+ (
110
+ "parent" => "wp_mail_bank",
111
+ "id" => "general_settings_mail_bank",
112
+ "title" => $mb_settings,
113
+ "href" => admin_url("admin.php?page=mb_settings")
114
+ ));
115
+ $wp_admin_bar->add_menu(array
116
+ (
117
+ "parent" => "wp_mail_bank",
118
+ "id" => "roles_and_capabilities_mail_bank",
119
+ "title" => $mb_roles_and_capabilities,
120
+ "href" => admin_url("admin.php?page=mb_roles_and_capabilities")
121
+ ));
122
+ $wp_admin_bar->add_menu(array
123
+ (
124
+ "parent" => "wp_mail_bank",
125
+ "id" => "feedbacks_mail_bank",
126
+ "title" => $mb_feedbacks,
127
+ "href" => admin_url("admin.php?page=mb_feedbacks")
128
+ ));
129
+ $wp_admin_bar->add_menu(array
130
+ (
131
+ "parent" => "wp_mail_bank",
132
+ "id" => "system_information_mail_bank",
133
+ "title" => $mb_system_information,
134
+ "href" => admin_url("admin.php?page=mb_system_information")
135
+ ));
136
+ $wp_admin_bar->add_menu(array
137
+ (
138
+ "parent" => "wp_mail_bank",
139
+ "id" => "mb_upgrade",
140
+ "title" => $mb_upgrade,
141
+ "href" => admin_url("admin.php?page=mb_upgrade")
142
+ ));
143
  }
144
  }
145
  }
lib/callback.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * This file is used for handling redirection.
5
  *
1
  <?php
 
2
  /**
3
  * This file is used for handling redirection.
4
  *
lib/helper.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * This file is used for creating dbHelper class.
5
  *
@@ -16,8 +15,8 @@ if (!is_user_logged_in()) {
16
  $access_granted = false;
17
  foreach ($user_role_permission as $permission) {
18
  if (current_user_can($permission)) {
19
- $access_granted = true;
20
- break;
21
  }
22
  }
23
  if (!$access_granted) {
@@ -30,82 +29,70 @@ if (!is_user_logged_in()) {
30
  Created On: 15-06-2016 10:44
31
  Created By: Tech Banker Team
32
  */
33
-
34
  class dbHelper_mail_bank {
35
- /*
36
- Function Name: insertCommand
37
- Parameters: Yes($table_name,$data)
38
- Description: This Function is used for Insert data in database.
39
- Created On: 15-06-2016 10:43
40
- Created By: Tech Banker Team
41
- */
42
-
43
- function insertCommand($table_name, $data) {
44
- global $wpdb;
45
- $wpdb->insert($table_name, $data);
46
- return $wpdb->insert_id;
47
- }
48
-
49
- /*
50
- Function Name: updateCommand
51
- Parameters: Yes($table_name,$data,$where)
52
- Description: This function is used for Update data in database.
53
- Created On: 15-06-2016 10:43
54
- Created By: Tech Banker Team
55
- */
56
-
57
- function updateCommand($table_name, $data, $where) {
58
- global $wpdb;
59
- $wpdb->update($table_name, $data, $where);
60
- }
61
-
62
- /*
63
- Function Name: deleteCommand
64
- Parameters: Yes($table_name,$where)
65
- Description: This function is used for delete data from database.
66
- Created On: 15-06-2016 10:43
67
- Created By: Tech Banker Team
68
- */
69
-
70
- function deleteCommand($table_name, $where) {
71
- global $wpdb;
72
- $wpdb->delete($table_name, $where);
73
- }
74
-
75
- /*
76
- Function Name: file_reader
77
- Parameters: Yes($filepath)
78
- Description: This function is used to read file contents
79
- Created On: 18-01-2017 11:24
80
- Created By: Tech Banker Team
81
- */
82
-
83
- public static function file_reader($filepath) {
84
- $reader = "";
85
- if (file_exists($filepath)) {
86
- $reader = file_get_contents($filepath);
87
- }
88
- return $reader;
89
- }
90
-
91
- /*
92
- Function Name: bulk_deleteCommand
93
- Parameters: Yes($table_name,$data,$where)
94
- Decription: This function is being used to delete multiple data from database.
95
- Created On: 15-06-2016 10:43
96
- Created By: Tech Banker Team
97
- */
98
-
99
- function bulk_deleteCommand($table_name, $where, $data) {
100
- global $wpdb;
101
- $wpdb->query
102
- (
103
- "DELETE FROM $table_name WHERE $where IN ($data)"
104
- );
105
- }
106
-
107
  }
108
-
109
  /*
110
  Class Name: mail_bank_discover_host
111
  Parameters: No
@@ -113,116 +100,107 @@ if (!is_user_logged_in()) {
113
  Created On: 21-06-2016 11:44
114
  Created By: Tech Banker Team
115
  */
116
-
117
  class mail_bank_discover_host {
118
-
119
- public $domain;
120
- public $email_domains = array(
121
- "1and1.com" => "smtp.1and1.com",
122
- "airmail.net" => "smtp.airmail.net",
123
- "aol.com" => "smtp.aol.com",
124
- "Bluewin.ch" => "Smtpauths.bluewin.ch",
125
- "Comcast.net" => "Smtp.comcast.net",
126
- "Earthlink.net" => "Smtpauth.earthlink.net",
127
- "gmail.com" => "smtp.gmail.com",
128
- "Gmx.com" => "mail.gmx.com",
129
- "Gmx.net" => "mail.gmx.com",
130
- "Gmx.us" => "mail.gmx.com",
131
- "hotmail.com" => "smtp.live.com",
132
- "outlook.com" => "smtp.live.com",
133
- "icloud.com" => "smtp.mail.me.com",
134
- "mail.com" => "smtp.mail.com",
135
- "ntlworld.com" => "smtp.ntlworld.com",
136
- "rocketmail.com" => "smtp.mail.yahoo.com",
137
- "rogers.com" => "smtp.broadband.rogers.com",
138
- "yahoo.ca" => "smtp.mail.yahoo.ca",
139
- "yahoo.co.id" => "smtp.mail.yahoo.co.id",
140
- "yahoo.co.in" => "smtp.mail.yahoo.co.in",
141
- "yahoo.co.kr" => "smtp.mail.yahoo.com",
142
- "yahoo.com" => "smtp.mail.yahoo.com",
143
- "yahoo.com.ar" => "smtp.mail.yahoo.com.ar",
144
- "yahoo.com.au" => "smtp.mail.yahoo.com.au",
145
- "yahoo.com.br" => "smtp.mail.yahoo.com.br",
146
- "yahoo.com.cn" => "smtp.mail.yahoo.com.cn",
147
- "yahoo.com.hk" => "smtp.mail.yahoo.com.hk",
148
- "yahoo.com.mx" => "smtp.mail.yahoo.com",
149
- "yahoo.com.my" => "smtp.mail.yahoo.com.my",
150
- "yahoo.com.ph" => "smtp.mail.yahoo.com.ph",
151
- "yahoo.com.sg" => "smtp.mail.yahoo.com.sg",
152
- "yahoo.com.tw" => "smtp.mail.yahoo.com.tw",
153
- "yahoo.com.vn" => "smtp.mail.yahoo.com.vn",
154
- "yahoo.co.nz" => "smtp.mail.yahoo.com.au",
155
- "yahoo.co.th" => "smtp.mail.yahoo.co.th",
156
- "yahoo.co.uk" => "smtp.mail.yahoo.co.uk",
157
- "ymail.com" => "smtp.mail.yahoo.com",
158
- "yahoo.de" => "smtp.mail.yahoo.de",
159
- "yahoo.es" => "smtp.correo.yahoo.es",
160
- "yahoo.fr" => "smtp.mail.yahoo.fr",
161
- "yahoo.ie" => "smtp.mail.yahoo.co.uk",
162
- "yahoo.it" => "smtp.mail.yahoo.it",
163
- "zoho.com" => "smtp.zoho.com",
164
- "ameritech.net" => "outbound.att.net",
165
- "att.net" => "outbound.att.net",
166
- "bellsouth.net" => "outbound.att.net",
167
- "flash.net" => "outbound.att.net",
168
- "nvbell.net" => "outbound.att.net",
169
- "pacbell.net" => "outbound.att.net",
170
- "prodigy.net" => "outbound.att.net",
171
- "sbcglobal.net" => "outbound.att.net",
172
- "snet.net" => "outbound.att.net",
173
- "swbell.net" => "outbound.att.net",
174
- "wans.net" => "outbound.att.net"
175
- );
176
-
177
- /*
178
- Function Name: get_smtp_from_email
179
- Parameters: Yes($hostname)
180
- Description: This Function is used for getting hostname.
181
- Created On: 15-06-2016 10:43
182
- Created By: Tech Banker Team
183
- */
184
-
185
- public function get_smtp_from_email($hostname) {
186
- reset($this->email_domains);
187
- while (list($domain, $smtp) = each($this->email_domains)) {
188
- if (strcasecmp($hostname, $domain) == 0) {
189
- return $smtp;
190
- }
191
- }
192
- return false;
193
- }
194
-
195
  }
196
-
197
  class plugin_info_wp_mail_bank {
198
- /*
199
- Function Name: get_plugin_info_wp_mail_bank
200
- Parameters: No
201
- Decription: This function is used to return the information about plugins.
202
- Created On: 21-04-2017 09:48
203
- Created By: Tech Banker Team
204
- */
205
-
206
- function get_plugin_info_wp_mail_bank() {
207
- $active_plugins = (array) get_option("active_plugins", array());
208
- if (is_multisite())
209
- $active_plugins = array_merge($active_plugins, get_site_option("active_sitewide_plugins", array()));
210
- $plugins = array();
211
- if (count($active_plugins) > 0) {
212
- $get_plugins = array();
213
- foreach ($active_plugins as $plugin) {
214
- $plugin_data = @get_plugin_data(WP_PLUGIN_DIR . "/" . $plugin);
215
-
216
- $get_plugins["plugin_name"] = strip_tags($plugin_data["Name"]);
217
- $get_plugins["plugin_author"] = strip_tags($plugin_data["Author"]);
218
- $get_plugins["plugin_version"] = strip_tags($plugin_data["Version"]);
219
- array_push($plugins, $get_plugins);
220
- }
221
- return $plugins;
222
- }
223
- }
224
-
225
  }
226
-
227
  }
228
- }
1
  <?php
 
2
  /**
3
  * This file is used for creating dbHelper class.
4
  *
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
  }
21
  }
22
  if (!$access_granted) {
29
  Created On: 15-06-2016 10:44
30
  Created By: Tech Banker Team
31
  */
 
32
  class dbHelper_mail_bank {
33
+ /*
34
+ Function Name: insertCommand
35
+ Parameters: Yes($table_name,$data)
36
+ Description: This Function is used for Insert data in database.
37
+ Created On: 15-06-2016 10:43
38
+ Created By: Tech Banker Team
39
+ */
40
+ function insertCommand($table_name, $data) {
41
+ global $wpdb;
42
+ $wpdb->insert($table_name, $data);
43
+ return $wpdb->insert_id;
44
+ }
45
+ /*
46
+ Function Name: updateCommand
47
+ Parameters: Yes($table_name,$data,$where)
48
+ Description: This function is used for Update data in database.
49
+ Created On: 15-06-2016 10:43
50
+ Created By: Tech Banker Team
51
+ */
52
+ function updateCommand($table_name, $data, $where) {
53
+ global $wpdb;
54
+ $wpdb->update($table_name, $data, $where);
55
+ }
56
+ /*
57
+ Function Name: deleteCommand
58
+ Parameters: Yes($table_name,$where)
59
+ Description: This function is used for delete data from database.
60
+ Created On: 15-06-2016 10:43
61
+ Created By: Tech Banker Team
62
+ */
63
+ function deleteCommand($table_name, $where) {
64
+ global $wpdb;
65
+ $wpdb->delete($table_name, $where);
66
+ }
67
+ /*
68
+ Function Name: file_reader
69
+ Parameters: Yes($filepath)
70
+ Description: This function is used to read file contents
71
+ Created On: 18-01-2017 11:24
72
+ Created By: Tech Banker Team
73
+ */
74
+ public static function file_reader($filepath) {
75
+ $reader = "";
76
+ if (file_exists($filepath)) {
77
+ $reader = file_get_contents($filepath);
78
+ }
79
+ return $reader;
80
+ }
81
+ /*
82
+ Function Name: bulk_deleteCommand
83
+ Parameters: Yes($table_name,$data,$where)
84
+ Decription: This function is being used to delete multiple data from database.
85
+ Created On: 15-06-2016 10:43
86
+ Created By: Tech Banker Team
87
+ */
88
+ function bulk_deleteCommand($table_name, $where, $data) {
89
+ global $wpdb;
90
+ $wpdb->query
91
+ (
92
+ "DELETE FROM $table_name WHERE $where IN ($data)"
93
+ );
94
+ }
 
 
 
 
 
 
 
 
 
 
95
  }
 
96
  /*
97
  Class Name: mail_bank_discover_host
98
  Parameters: No
100
  Created On: 21-06-2016 11:44
101
  Created By: Tech Banker Team
102
  */
 
103
  class mail_bank_discover_host {
104
+ public $domain;
105
+ public $email_domains = array(
106
+ "1and1.com" => "smtp.1and1.com",
107
+ "airmail.net" => "smtp.airmail.net",
108
+ "aol.com" => "smtp.aol.com",
109
+ "Bluewin.ch" => "Smtpauths.bluewin.ch",
110
+ "Comcast.net" => "Smtp.comcast.net",
111
+ "Earthlink.net" => "Smtpauth.earthlink.net",
112
+ "gmail.com" => "smtp.gmail.com",
113
+ "Gmx.com" => "mail.gmx.com",
114
+ "Gmx.net" => "mail.gmx.com",
115
+ "Gmx.us" => "mail.gmx.com",
116
+ "hotmail.com" => "smtp.live.com",
117
+ "outlook.com" => "smtp.live.com",
118
+ "icloud.com" => "smtp.mail.me.com",
119
+ "mail.com" => "smtp.mail.com",
120
+ "ntlworld.com" => "smtp.ntlworld.com",
121
+ "rocketmail.com" => "smtp.mail.yahoo.com",
122
+ "rogers.com" => "smtp.broadband.rogers.com",
123
+ "yahoo.ca" => "smtp.mail.yahoo.ca",
124
+ "yahoo.co.id" => "smtp.mail.yahoo.co.id",
125
+ "yahoo.co.in" => "smtp.mail.yahoo.co.in",
126
+ "yahoo.co.kr" => "smtp.mail.yahoo.com",
127
+ "yahoo.com" => "smtp.mail.yahoo.com",
128
+ "yahoo.com.ar" => "smtp.mail.yahoo.com.ar",
129
+ "yahoo.com.au" => "smtp.mail.yahoo.com.au",
130
+ "yahoo.com.br" => "smtp.mail.yahoo.com.br",
131
+ "yahoo.com.cn" => "smtp.mail.yahoo.com.cn",
132
+ "yahoo.com.hk" => "smtp.mail.yahoo.com.hk",
133
+ "yahoo.com.mx" => "smtp.mail.yahoo.com",
134
+ "yahoo.com.my" => "smtp.mail.yahoo.com.my",
135
+ "yahoo.com.ph" => "smtp.mail.yahoo.com.ph",
136
+ "yahoo.com.sg" => "smtp.mail.yahoo.com.sg",
137
+ "yahoo.com.tw" => "smtp.mail.yahoo.com.tw",
138
+ "yahoo.com.vn" => "smtp.mail.yahoo.com.vn",
139
+ "yahoo.co.nz" => "smtp.mail.yahoo.com.au",
140
+ "yahoo.co.th" => "smtp.mail.yahoo.co.th",
141
+ "yahoo.co.uk" => "smtp.mail.yahoo.co.uk",
142
+ "ymail.com" => "smtp.mail.yahoo.com",
143
+ "yahoo.de" => "smtp.mail.yahoo.de",
144
+ "yahoo.es" => "smtp.correo.yahoo.es",
145
+ "yahoo.fr" => "smtp.mail.yahoo.fr",
146
+ "yahoo.ie" => "smtp.mail.yahoo.co.uk",
147
+ "yahoo.it" => "smtp.mail.yahoo.it",
148
+ "zoho.com" => "smtp.zoho.com",
149
+ "ameritech.net" => "outbound.att.net",
150
+ "att.net" => "outbound.att.net",
151
+ "bellsouth.net" => "outbound.att.net",
152
+ "flash.net" => "outbound.att.net",
153
+ "nvbell.net" => "outbound.att.net",
154
+ "pacbell.net" => "outbound.att.net",
155
+ "prodigy.net" => "outbound.att.net",
156
+ "sbcglobal.net" => "outbound.att.net",
157
+ "snet.net" => "outbound.att.net",
158
+ "swbell.net" => "outbound.att.net",
159
+ "wans.net" => "outbound.att.net"
160
+ );
161
+ /*
162
+ Function Name: get_smtp_from_email
163
+ Parameters: Yes($hostname)
164
+ Description: This Function is used for getting hostname.
165
+ Created On: 15-06-2016 10:43
166
+ Created By: Tech Banker Team
167
+ */
168
+ public function get_smtp_from_email($hostname) {
169
+ reset($this->email_domains);
170
+ while (list($domain, $smtp) = each($this->email_domains)) {
171
+ if (strcasecmp($hostname, $domain) == 0) {
172
+ return $smtp;
173
+ }
174
+ }
175
+ return false;
176
+ }
 
 
 
 
177
  }
 
178
  class plugin_info_wp_mail_bank {
179
+ /*
180
+ Function Name: get_plugin_info_wp_mail_bank
181
+ Parameters: No
182
+ Decription: This function is used to return the information about plugins.
183
+ Created On: 21-04-2017 09:48
184
+ Created By: Tech Banker Team
185
+ */
186
+ function get_plugin_info_wp_mail_bank() {
187
+ $active_plugins = (array) get_option("active_plugins", array());
188
+ if (is_multisite())
189
+ $active_plugins = array_merge($active_plugins, get_site_option("active_sitewide_plugins", array()));
190
+ $plugins = array();
191
+ if (count($active_plugins) > 0) {
192
+ $get_plugins = array();
193
+ foreach ($active_plugins as $plugin) {
194
+ $plugin_data = @get_plugin_data(WP_PLUGIN_DIR . "/" . $plugin);
195
+
196
+ $get_plugins["plugin_name"] = strip_tags($plugin_data["Name"]);
197
+ $get_plugins["plugin_author"] = strip_tags($plugin_data["Author"]);
198
+ $get_plugins["plugin_version"] = strip_tags($plugin_data["Version"]);
199
+ array_push($plugins, $get_plugins);
200
+ }
201
+ return $plugins;
202
+ }
203
+ }
 
 
204
  }
 
205
  }
206
+ }
lib/install-script.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * This file is used for creating tables in database on the activation hook.
5
  *
@@ -23,44 +22,37 @@ if (!is_user_logged_in()) {
23
  Created On: 05-02-2016 11:40
24
  Created By: Tech Banker Team
25
  */
26
-
27
  class dbHelper_install_script_mail_bank {
28
- /*
29
- Function Name: insertCommand
30
- Parameters: Yes($table_name,$data)
31
- Description: This Function is used to Insert data in database.
32
- Created On: 05-02-2016 11:40
33
- Created By: Tech Banker Team
34
- */
35
-
36
- function insertCommand($table_name, $data) {
37
- global $wpdb;
38
- $wpdb->insert($table_name, $data);
39
- return $wpdb->insert_id;
40
- }
41
-
42
- /*
43
- Function Name: updateCommand
44
- Parameters: Yes($table_name,$data,$where)
45
- Description: This function is used to Update data.
46
- Created On: 05-02-2016 11:40
47
- Created By: Tech Banker Team
48
- */
49
-
50
- function updateCommand($table_name, $data, $where) {
51
- global $wpdb;
52
- $wpdb->update($table_name, $data, $where);
53
- }
54
-
55
  }
56
-
57
  if (file_exists(ABSPATH . "wp-admin/includes/upgrade.php"))
58
- require_once ABSPATH . "wp-admin/includes/upgrade.php";
59
 
60
  $mail_bank_version_number = get_option("mail-bank-version-number");
61
-
62
  function mail_bank_table() {
63
- $sql = "CREATE TABLE IF NOT EXISTS " . mail_bank() . "
64
  (
65
  `id` int(11) NOT NULL AUTO_INCREMENT,
66
  `type` varchar(100) NOT NULL,
@@ -68,20 +60,19 @@ if (!is_user_logged_in()) {
68
  PRIMARY KEY (`id`)
69
  )
70
  ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
71
- dbDelta($sql);
72
 
73
- $data = "INSERT INTO " . mail_bank() . " (`type`, `parent_id`) VALUES
74
  ('email_configuration', 0),
75
  ('email_logs', 0),
76
  ('settings', 0),
77
  ('roles_and_capabilities', 0)";
78
- dbDelta($data);
79
  }
80
-
81
  function mail_bank_meta_table() {
82
- $obj_dbHelper_install_script_mail_bank = new dbHelper_install_script_mail_bank();
83
- global $wpdb;
84
- $sql = "CREATE TABLE IF NOT EXISTS " . mail_bank_meta() . "
85
  (
86
  `id` int(11) NOT NULL AUTO_INCREMENT,
87
  `meta_id` int(11) NOT NULL,
@@ -90,293 +81,292 @@ if (!is_user_logged_in()) {
90
  PRIMARY KEY (`id`)
91
  )
92
  ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
93
- dbDelta($sql);
94
-
95
- $admin_email = get_option("admin_email");
96
- $admin_name = get_option("blogname");
97
-
98
- $mail_bank_table_data = $wpdb->get_results
99
- (
100
- "SELECT * FROM " . mail_bank()
101
- );
102
-
103
- foreach ($mail_bank_table_data as $row) {
104
- switch ($row->type) {
105
- case "email_configuration":
106
- $email_configuration_array = array();
107
- $email_configuration_array["email_address"] = $admin_email;
108
- $email_configuration_array["reply_to"] = "";
109
- $email_configuration_array["cc"] = "";
110
- $email_configuration_array["bcc"] = "";
111
- $email_configuration_array["mailer_type"] = "smtp";
112
- $email_configuration_array["sender_name"] = $admin_name;
113
- $email_configuration_array["sender_name_configuration"] = "override";
114
- $email_configuration_array["hostname"] = "";
115
- $email_configuration_array["port"] = "587";
116
- $email_configuration_array["client_id"] = "";
117
- $email_configuration_array["client_secret"] = "";
118
- $email_configuration_array["redirect_uri"] = "";
119
- $email_configuration_array["sender_email"] = $admin_email;
120
- $email_configuration_array["from_email_configuration"] = "override";
121
- $email_configuration_array["auth_type"] = "none";
122
- $email_configuration_array["username"] = $admin_email;
123
- $email_configuration_array["password"] = "";
124
- $email_configuration_array["enc_type"] = "tls";
125
-
126
- $email_configuration_array_data = array();
127
- $email_configuration_array_data["meta_id"] = $row->id;
128
- $email_configuration_array_data["meta_key"] = "email_configuration";
129
- $email_configuration_array_data["meta_value"] = serialize($email_configuration_array);
130
- $obj_dbHelper_install_script_mail_bank->insertCommand(mail_bank_meta(), $email_configuration_array_data);
131
- break;
132
-
133
- case "settings":
134
- $settings_data_array = array();
135
- $settings_data_array["debug_mode"] = "enable";
136
- $settings_data_array["remove_tables_at_uninstall"] = "enable";
137
- $settings_data_array["monitor_email_logs"] = "enable";
138
-
139
- $settings_array = array();
140
- $settings_array["meta_id"] = $row->id;
141
- $settings_array["meta_key"] = "settings";
142
- $settings_array["meta_value"] = serialize($settings_data_array);
143
- $obj_dbHelper_install_script_mail_bank->insertCommand(mail_bank_meta(), $settings_array);
144
- break;
145
-
146
- case "roles_and_capabilities":
147
- $roles_capabilities_data_array = array();
148
- $roles_capabilities_data_array["roles_and_capabilities"] = "1,1,1,0,0,0";
149
- $roles_capabilities_data_array["show_mail_bank_top_bar_menu"] = "enable";
150
- $roles_capabilities_data_array["others_full_control_capability"] = "0";
151
- $roles_capabilities_data_array["administrator_privileges"] = "1,1,1,1,1,1,1,1,1,1";
152
- $roles_capabilities_data_array["author_privileges"] = "0,0,1,0,0,0,0,0,0,0";
153
- $roles_capabilities_data_array["editor_privileges"] = "0,0,1,0,0,0,1,0,0,0";
154
- $roles_capabilities_data_array["contributor_privileges"] = "0,0,0,0,0,0,1,0,0,0";
155
- $roles_capabilities_data_array["subscriber_privileges"] = "0,0,0,0,0,0,0,0,0,0";
156
- $roles_capabilities_data_array["other_roles_privileges"] = "0,0,0,0,0,0,0,0,0,0";
157
- $user_capabilities = get_others_capabilities_mail_bank();
158
- $other_roles_array = array();
159
- $other_roles_access_array = array(
160
- "manage_options",
161
- "edit_plugins",
162
- "edit_posts",
163
- "publish_posts",
164
- "publish_pages",
165
- "edit_pages",
166
- "read"
167
- );
168
- foreach ($other_roles_access_array as $role) {
169
- if (in_array($role, $user_capabilities)) {
170
- array_push($other_roles_array, $role);
171
- }
172
- }
173
- $roles_capabilities_data_array["capabilities"] = $other_roles_array;
174
-
175
- $roles_data_array = array();
176
- $roles_data_array["meta_id"] = $row->id;
177
- $roles_data_array["meta_key"] = "roles_and_capabilities";
178
- $roles_data_array["meta_value"] = serialize($roles_capabilities_data_array);
179
- $obj_dbHelper_install_script_mail_bank->insertCommand(mail_bank_meta(), $roles_data_array);
180
- break;
181
- }
182
- }
183
  }
184
-
185
  $obj_dbHelper_install_script_mail_bank = new dbHelper_install_script_mail_bank();
186
  switch ($mail_bank_version_number) {
187
- case "":
188
- if (count($wpdb->get_var("SHOW TABLES LIKE '" . $wpdb->prefix . "mail_bank'")) != 0) {
189
- $mail_bank_data = $wpdb->get_row
190
- (
191
- "SELECT * FROM " . $wpdb->prefix . "mail_bank"
192
- );
193
-
194
- $wpdb->query("DROP TABLE IF EXISTS " . $wpdb->prefix . "mail_bank");
195
- mail_bank_table();
196
- mail_bank_meta_table();
197
-
198
- $get_from_name = get_option("show_from_name_in_email");
199
- $get_from_email = get_option("show_from_email_in_email");
200
-
201
- if (count($mail_bank_data) > 0) {
202
- $update_mail_bank_data = array();
203
- $update_mail_bank_data["email_address"] = get_option("admin_email");
204
- $update_mail_bank_data["reply_to"] = "";
205
- $update_mail_bank_data["cc"] = "";
206
- $update_mail_bank_data["bcc"] = "";
207
- $update_mail_bank_data["mailer_type"] = isset($mail_bank_data->mailer_type) && $mail_bank_data->mailer_type == 1 ? "php_mail_function" : "smtp";
208
- $update_mail_bank_data["sender_name_configuration"] = isset($get_from_name) && $get_from_name == 1 ? "override" : "dont_override";
209
- $update_mail_bank_data["sender_name"] = isset($mail_bank_data->from_name) ? esc_html($mail_bank_data->from_name) : esc_html(get_option("blogname"));
210
- $update_mail_bank_data["from_email_configuration"] = isset($get_from_email) && $get_from_email == 1 ? "override" : "dont_override";
211
- $update_mail_bank_data["sender_email"] = isset($mail_bank_data->from_email) ? esc_attr($mail_bank_data->from_email) : get_option("admin_email");
212
- $update_mail_bank_data["hostname"] = isset($mail_bank_data->smtp_host) ? esc_attr($mail_bank_data->smtp_host) : "";
213
- $update_mail_bank_data["port"] = isset($mail_bank_data->smtp_port) ? intval($mail_bank_data->smtp_port) : 0;
214
- $update_mail_bank_data["enc_type"] = isset($mail_bank_data->encryption) && (($mail_bank_data->encryption) == 0) ? "none" : ((($mail_bank_data->encryption) == 1) ? "ssl" : "tls");
215
- $update_mail_bank_data["auth_type"] = "login";
216
- $update_mail_bank_data["client_id"] = "";
217
- $update_mail_bank_data["client_secret"] = "";
218
- $update_mail_bank_data["redirect_uri"] = "";
219
- $update_mail_bank_data["username"] = isset($mail_bank_data->smtp_username) ? esc_attr($mail_bank_data->smtp_username) : "";
220
- $update_mail_bank_data["password"] = isset($mail_bank_data->smtp_password) ? base64_encode($mail_bank_data->smtp_password) : "";
221
- $update_mail_bank_data["automatic_mail"] = "1";
222
-
223
- $update_mail_bank_data_serialize = array();
224
- $where = array();
225
- $where["meta_id"] = $mail_bank_data->id;
226
- $where["meta_key"] = "email_configuration";
227
- $update_mail_bank_data_serialize["meta_value"] = serialize($update_mail_bank_data);
228
- $obj_dbHelper_install_script_mail_bank->updateCommand(mail_bank_meta(), $update_mail_bank_data_serialize, $where);
229
- }
230
- $plugin_settings_data = $wpdb->get_var
231
- (
232
- $wpdb->prepare
233
- (
234
- "SELECT meta_value FROM " . mail_bank_meta() . "
235
  WHERE meta_key = %s", "settings"
236
- )
237
- );
238
- $plugin_settings_data_unserialize = maybe_unserialize($plugin_settings_data);
239
-
240
- $update_plugin_data = array();
241
- $update_plugin_data["debug_mode"] = isset($plugin_settings_data_unserialize["debug_mode"]) ? esc_attr($plugin_settings_data_unserialize["debug_mode"]) : "enable";
242
- $update_plugin_data["remove_tables_at_uninstall"] = isset($plugin_settings_data_unserialize["remove_tables_at_uninstall"]) ? esc_attr($plugin_settings_data_unserialize["remove_tables_at_uninstall"]) : "disable";
243
- $update_plugin_data["monitor_email_logs"] = isset($plugin_settings_data_unserialize["monitor_email_logs"]) ? esc_attr($plugin_settings_data_unserialize["monitor_email_logs"]) : "enable";
244
-
245
- $update_plugin_settings_data_serialize = array();
246
- $where = array();
247
- $where["meta_key"] = "settings";
248
- $update_plugin_settings_data_serialize["meta_value"] = serialize($update_plugin_data);
249
- $obj_dbHelper_install_script_mail_bank->updateCommand(mail_bank_meta(), $update_plugin_settings_data_serialize, $where);
250
- } else {
251
- mail_bank_table();
252
- mail_bank_meta_table();
253
- }
254
- break;
255
-
256
- default:
257
- if (count($wpdb->get_var("SHOW TABLES LIKE '" . mail_bank() . "'")) != 0 && count($wpdb->get_var("SHOW TABLES LIKE '" . mail_bank_meta() . "'")) != 0) {
258
- $settings_data = $wpdb->get_var
259
- (
260
- $wpdb->prepare
261
- (
262
- "SELECT meta_value FROM " . mail_bank_meta() .
263
- " WHERE meta_key=%s", "settings"
264
- )
265
- );
266
-
267
- $settings_data_array = maybe_unserialize($settings_data);
268
- if (!array_key_exists("monitor_email_logs", $settings_data_array)) {
269
- $settings_data_array["monitor_email_logs"] = "enable";
270
- }
271
- $where = array();
272
- $settings_array = array();
273
- $where["meta_key"] = "settings";
274
- $settings_array["meta_value"] = serialize($settings_data_array);
275
- $obj_dbHelper_install_script_mail_bank->updateCommand(mail_bank_meta(), $settings_array, $where);
276
-
277
- $get_roles_settings_data = $wpdb->get_var
278
- (
279
- $wpdb->prepare
280
- (
281
- "SELECT meta_value FROM " . mail_bank_meta() .
282
- " WHERE meta_key=%s", "roles_and_capabilities"
283
- )
284
- );
285
-
286
- $get_roles_settings_data_array = maybe_unserialize($get_roles_settings_data);
287
-
288
- if (array_key_exists("roles_and_capabilities", $get_roles_settings_data_array)) {
289
- $roles_and_capabilities_data = isset($get_roles_settings_data_array["roles_and_capabilities"]) ? explode(",", $get_roles_settings_data_array["roles_and_capabilities"]) : "1,1,1,0,0,0";
290
- $administrator_privileges_data = isset($get_roles_settings_data_array["administrator_privileges"]) ? explode(",", $get_roles_settings_data_array["administrator_privileges"]) : "1,1,1,1,1,1,1,1,1,1";
291
- $author_privileges_data = isset($get_roles_settings_data_array["author_privileges"]) ? explode(",", $get_roles_settings_data_array["author_privileges"]) : "0,0,1,0,0,0,0,0,0,0";
292
- $editor_privileges_data = isset($get_roles_settings_data_array["editor_privileges"]) ? explode(",", $get_roles_settings_data_array["editor_privileges"]) : "0,0,1,0,0,0,1,0,0,0";
293
- $contributor_privileges_data = isset($get_roles_settings_data_array["contributor_privileges"]) ? explode(",", $get_roles_settings_data_array["contributor_privileges"]) : "0,0,0,0,0,0,1,0,0,0";
294
- $subscriber_privileges_data = isset($get_roles_settings_data_array["subscriber_privileges"]) ? explode(",", $get_roles_settings_data_array["subscriber_privileges"]) : "0,0,0,0,0,0,0,0,0,0";
295
- $other_privileges_data = isset($get_roles_settings_data_array["other_roles_privileges"]) ? explode(",", $get_roles_settings_data_array["other_roles_privileges"]) : "0,0,0,0,0,0,0,0,0,0";
296
-
297
- if (count($roles_and_capabilities_data) == 5) {
298
- array_push($roles_and_capabilities_data, 0);
299
- }
300
-
301
- if (count($administrator_privileges_data) == 8) {
302
- array_splice($administrator_privileges_data, 3, 0, 1);
303
- array_splice($administrator_privileges_data, 8, 0, 1);
304
- } elseif (count($administrator_privileges_data) == 9) {
305
- array_splice($administrator_privileges_data, 3, 0, 1);
306
- }
307
-
308
- if (count($author_privileges_data) == 8) {
309
- array_splice($author_privileges_data, 3, 0, 0);
310
- array_splice($author_privileges_data, 8, 0, 0);
311
- } elseif (count($author_privileges_data) == 9) {
312
- array_splice($author_privileges_data, 3, 0, 0);
313
- }
314
-
315
- if (count($editor_privileges_data) == 8) {
316
- array_splice($editor_privileges_data, 3, 0, 0);
317
- array_splice($editor_privileges_data, 8, 0, 0);
318
- } elseif (count($editor_privileges_data) == 9) {
319
- array_splice($editor_privileges_data, 3, 0, 0);
320
- }
321
-
322
- if (count($contributor_privileges_data) == 8) {
323
- array_splice($contributor_privileges_data, 3, 0, 0);
324
- array_splice($contributor_privileges_data, 8, 0, 0);
325
- } elseif (count($contributor_privileges_data) == 9) {
326
- array_splice($editor_privileges_data, 3, 0, 0);
327
- }
328
-
329
- if (count($subscriber_privileges_data) == 8) {
330
- array_splice($subscriber_privileges_data, 3, 0, 0);
331
- array_splice($subscriber_privileges_data, 8, 0, 0);
332
- } elseif (count($subscriber_privileges_data) == 9) {
333
- array_splice($subscriber_privileges_data, 3, 0, 0);
334
- }
335
-
336
- if (count($other_privileges_data) == 8) {
337
- array_splice($other_privileges_data, 3, 0, 0);
338
- array_splice($other_privileges_data, 8, 0, 0);
339
- } elseif (count($other_privileges_data) == 9) {
340
- array_splice($other_privileges_data, 3, 0, 0);
341
- }
342
-
343
- if (!array_key_exists("others_full_control_capability", $get_roles_settings_data_array)) {
344
- $get_roles_settings_data_array["others_full_control_capability"] = "0";
345
- }
346
-
347
- if (!array_key_exists("capabilities", $get_roles_settings_data_array)) {
348
- $user_capabilities = get_others_capabilities_mail_bank();
349
- $other_roles_array = array();
350
- $other_roles_access_array = array(
351
- "manage_options",
352
- "edit_plugins",
353
- "edit_posts",
354
- "publish_posts",
355
- "publish_pages",
356
- "edit_pages",
357
- "read"
358
- );
359
- foreach ($other_roles_access_array as $role) {
360
- if (in_array($role, $user_capabilities)) {
361
- array_push($other_roles_array, $role);
362
- }
363
- }
364
- $get_roles_settings_data_array["capabilities"] = $other_roles_array;
365
- }
366
- $get_roles_settings_data_array["roles_and_capabilities"] = implode(",", $roles_and_capabilities_data);
367
- $get_roles_settings_data_array["administrator_privileges"] = implode(",", $administrator_privileges_data);
368
- $get_roles_settings_data_array["author_privileges"] = implode(",", $author_privileges_data);
369
- $get_roles_settings_data_array["editor_privileges"] = implode(",", $editor_privileges_data);
370
- $get_roles_settings_data_array["contributor_privileges"] = implode(",", $contributor_privileges_data);
371
- $get_roles_settings_data_array["subscriber_privileges"] = implode(",", $subscriber_privileges_data);
372
- $get_roles_settings_data_array["other_roles_privileges"] = implode(",", $other_privileges_data);
373
- $where = array();
374
- $roles_capabilities_array = array();
375
- $where["meta_key"] = "roles_and_capabilities";
376
- $roles_capabilities_array["meta_value"] = serialize($get_roles_settings_data_array);
377
- $obj_dbHelper_install_script_mail_bank->updateCommand(mail_bank_meta(), $roles_capabilities_array, $where);
378
- }
379
- }
380
  }
381
  update_option("mail-bank-version-number", "3.0.0");
382
  }
1
  <?php
 
2
  /**
3
  * This file is used for creating tables in database on the activation hook.
4
  *
22
  Created On: 05-02-2016 11:40
23
  Created By: Tech Banker Team
24
  */
 
25
  class dbHelper_install_script_mail_bank {
26
+ /*
27
+ Function Name: insertCommand
28
+ Parameters: Yes($table_name,$data)
29
+ Description: This Function is used to Insert data in database.
30
+ Created On: 05-02-2016 11:40
31
+ Created By: Tech Banker Team
32
+ */
33
+ function insertCommand($table_name, $data) {
34
+ global $wpdb;
35
+ $wpdb->insert($table_name, $data);
36
+ return $wpdb->insert_id;
37
+ }
38
+ /*
39
+ Function Name: updateCommand
40
+ Parameters: Yes($table_name,$data,$where)
41
+ Description: This function is used to Update data.
42
+ Created On: 05-02-2016 11:40
43
+ Created By: Tech Banker Team
44
+ */
45
+ function updateCommand($table_name, $data, $where) {
46
+ global $wpdb;
47
+ $wpdb->update($table_name, $data, $where);
48
+ }
 
 
 
 
49
  }
 
50
  if (file_exists(ABSPATH . "wp-admin/includes/upgrade.php"))
51
+ require_once ABSPATH . "wp-admin/includes/upgrade.php";
52
 
53
  $mail_bank_version_number = get_option("mail-bank-version-number");
 
54
  function mail_bank_table() {
55
+ $sql = "CREATE TABLE IF NOT EXISTS " . mail_bank() . "
56
  (
57
  `id` int(11) NOT NULL AUTO_INCREMENT,
58
  `type` varchar(100) NOT NULL,
60
  PRIMARY KEY (`id`)
61
  )
62
  ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
63
+ dbDelta($sql);
64
 
65
+ $data = "INSERT INTO " . mail_bank() . " (`type`, `parent_id`) VALUES
66
  ('email_configuration', 0),
67
  ('email_logs', 0),
68
  ('settings', 0),
69
  ('roles_and_capabilities', 0)";
70
+ dbDelta($data);
71
  }
 
72
  function mail_bank_meta_table() {
73
+ $obj_dbHelper_install_script_mail_bank = new dbHelper_install_script_mail_bank();
74
+ global $wpdb;
75
+ $sql = "CREATE TABLE IF NOT EXISTS " . mail_bank_meta() . "
76
  (
77
  `id` int(11) NOT NULL AUTO_INCREMENT,
78
  `meta_id` int(11) NOT NULL,
81
  PRIMARY KEY (`id`)
82
  )
83
  ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
84
+ dbDelta($sql);
85
+
86
+ $admin_email = get_option("admin_email");
87
+ $admin_name = get_option("blogname");
88
+
89
+ $mail_bank_table_data = $wpdb->get_results
90
+ (
91
+ "SELECT * FROM " . mail_bank()
92
+ );
93
+
94
+ foreach ($mail_bank_table_data as $row) {
95
+ switch ($row->type) {
96
+ case "email_configuration":
97
+ $email_configuration_array = array();
98
+ $email_configuration_array["email_address"] = $admin_email;
99
+ $email_configuration_array["reply_to"] = "";
100
+ $email_configuration_array["cc"] = "";
101
+ $email_configuration_array["bcc"] = "";
102
+ $email_configuration_array["mailer_type"] = "smtp";
103
+ $email_configuration_array["sender_name"] = $admin_name;
104
+ $email_configuration_array["sender_name_configuration"] = "override";
105
+ $email_configuration_array["hostname"] = "";
106
+ $email_configuration_array["port"] = "587";
107
+ $email_configuration_array["client_id"] = "";
108
+ $email_configuration_array["client_secret"] = "";
109
+ $email_configuration_array["redirect_uri"] = "";
110
+ $email_configuration_array["sender_email"] = $admin_email;
111
+ $email_configuration_array["from_email_configuration"] = "override";
112
+ $email_configuration_array["auth_type"] = "none";
113
+ $email_configuration_array["username"] = $admin_email;
114
+ $email_configuration_array["password"] = "";
115
+ $email_configuration_array["enc_type"] = "tls";
116
+
117
+ $email_configuration_array_data = array();
118
+ $email_configuration_array_data["meta_id"] = $row->id;
119
+ $email_configuration_array_data["meta_key"] = "email_configuration";
120
+ $email_configuration_array_data["meta_value"] = serialize($email_configuration_array);
121
+ $obj_dbHelper_install_script_mail_bank->insertCommand(mail_bank_meta(), $email_configuration_array_data);
122
+ break;
123
+
124
+ case "settings":
125
+ $settings_data_array = array();
126
+ $settings_data_array["debug_mode"] = "enable";
127
+ $settings_data_array["remove_tables_at_uninstall"] = "enable";
128
+ $settings_data_array["monitor_email_logs"] = "enable";
129
+
130
+ $settings_array = array();
131
+ $settings_array["meta_id"] = $row->id;
132
+ $settings_array["meta_key"] = "settings";
133
+ $settings_array["meta_value"] = serialize($settings_data_array);
134
+ $obj_dbHelper_install_script_mail_bank->insertCommand(mail_bank_meta(), $settings_array);
135
+ break;
136
+
137
+ case "roles_and_capabilities":
138
+ $roles_capabilities_data_array = array();
139
+ $roles_capabilities_data_array["roles_and_capabilities"] = "1,1,1,0,0,0";
140
+ $roles_capabilities_data_array["show_mail_bank_top_bar_menu"] = "enable";
141
+ $roles_capabilities_data_array["others_full_control_capability"] = "0";
142
+ $roles_capabilities_data_array["administrator_privileges"] = "1,1,1,1,1,1,1,1,1,1";
143
+ $roles_capabilities_data_array["author_privileges"] = "0,0,1,0,0,0,0,0,0,0";
144
+ $roles_capabilities_data_array["editor_privileges"] = "0,0,1,0,0,0,1,0,0,0";
145
+ $roles_capabilities_data_array["contributor_privileges"] = "0,0,0,0,0,0,1,0,0,0";
146
+ $roles_capabilities_data_array["subscriber_privileges"] = "0,0,0,0,0,0,0,0,0,0";
147
+ $roles_capabilities_data_array["other_roles_privileges"] = "0,0,0,0,0,0,0,0,0,0";
148
+ $user_capabilities = get_others_capabilities_mail_bank();
149
+ $other_roles_array = array();
150
+ $other_roles_access_array = array(
151
+ "manage_options",
152
+ "edit_plugins",
153
+ "edit_posts",
154
+ "publish_posts",
155
+ "publish_pages",
156
+ "edit_pages",
157
+ "read"
158
+ );
159
+ foreach ($other_roles_access_array as $role) {
160
+ if (in_array($role, $user_capabilities)) {
161
+ array_push($other_roles_array, $role);
162
+ }
163
+ }
164
+ $roles_capabilities_data_array["capabilities"] = $other_roles_array;
165
+
166
+ $roles_data_array = array();
167
+ $roles_data_array["meta_id"] = $row->id;
168
+ $roles_data_array["meta_key"] = "roles_and_capabilities";
169
+ $roles_data_array["meta_value"] = serialize($roles_capabilities_data_array);
170
+ $obj_dbHelper_install_script_mail_bank->insertCommand(mail_bank_meta(), $roles_data_array);
171
+ break;
172
+ }
173
+ }
174
  }
 
175
  $obj_dbHelper_install_script_mail_bank = new dbHelper_install_script_mail_bank();
176
  switch ($mail_bank_version_number) {
177
+ case "":
178
+ if (count($wpdb->get_var("SHOW TABLES LIKE '" . $wpdb->prefix . "mail_bank'")) != 0) {
179
+ $mail_bank_data = $wpdb->get_row
180
+ (
181
+ "SELECT * FROM " . $wpdb->prefix . "mail_bank"
182
+ );
183
+
184
+ $wpdb->query("DROP TABLE IF EXISTS " . $wpdb->prefix . "mail_bank");
185
+ mail_bank_table();
186
+ mail_bank_meta_table();
187
+
188
+ $get_from_name = get_option("show_from_name_in_email");
189
+ $get_from_email = get_option("show_from_email_in_email");
190
+
191
+ if (count($mail_bank_data) > 0) {
192
+ $update_mail_bank_data = array();
193
+ $update_mail_bank_data["email_address"] = get_option("admin_email");
194
+ $update_mail_bank_data["reply_to"] = "";
195
+ $update_mail_bank_data["cc"] = "";
196
+ $update_mail_bank_data["bcc"] = "";
197
+ $update_mail_bank_data["mailer_type"] = isset($mail_bank_data->mailer_type) && $mail_bank_data->mailer_type == 1 ? "php_mail_function" : "smtp";
198
+ $update_mail_bank_data["sender_name_configuration"] = isset($get_from_name) && $get_from_name == 1 ? "override" : "dont_override";
199
+ $update_mail_bank_data["sender_name"] = isset($mail_bank_data->from_name) ? esc_html($mail_bank_data->from_name) : esc_html(get_option("blogname"));
200
+ $update_mail_bank_data["from_email_configuration"] = isset($get_from_email) && $get_from_email == 1 ? "override" : "dont_override";
201
+ $update_mail_bank_data["sender_email"] = isset($mail_bank_data->from_email) ? esc_attr($mail_bank_data->from_email) : get_option("admin_email");
202
+ $update_mail_bank_data["hostname"] = isset($mail_bank_data->smtp_host) ? esc_attr($mail_bank_data->smtp_host) : "";
203
+ $update_mail_bank_data["port"] = isset($mail_bank_data->smtp_port) ? intval($mail_bank_data->smtp_port) : 0;
204
+ $update_mail_bank_data["enc_type"] = isset($mail_bank_data->encryption) && (($mail_bank_data->encryption) == 0) ? "none" : ((($mail_bank_data->encryption) == 1) ? "ssl" : "tls");
205
+ $update_mail_bank_data["auth_type"] = "login";
206
+ $update_mail_bank_data["client_id"] = "";
207
+ $update_mail_bank_data["client_secret"] = "";
208
+ $update_mail_bank_data["redirect_uri"] = "";
209
+ $update_mail_bank_data["username"] = isset($mail_bank_data->smtp_username) ? esc_attr($mail_bank_data->smtp_username) : "";
210
+ $update_mail_bank_data["password"] = isset($mail_bank_data->smtp_password) ? base64_encode($mail_bank_data->smtp_password) : "";
211
+ $update_mail_bank_data["automatic_mail"] = "1";
212
+
213
+ $update_mail_bank_data_serialize = array();
214
+ $where = array();
215
+ $where["meta_id"] = $mail_bank_data->id;
216
+ $where["meta_key"] = "email_configuration";
217
+ $update_mail_bank_data_serialize["meta_value"] = serialize($update_mail_bank_data);
218
+ $obj_dbHelper_install_script_mail_bank->updateCommand(mail_bank_meta(), $update_mail_bank_data_serialize, $where);
219
+ }
220
+ $plugin_settings_data = $wpdb->get_var
221
+ (
222
+ $wpdb->prepare
223
+ (
224
+ "SELECT meta_value FROM " . mail_bank_meta() . "
225
  WHERE meta_key = %s", "settings"
226
+ )
227
+ );
228
+ $plugin_settings_data_unserialize = maybe_unserialize($plugin_settings_data);
229
+
230
+ $update_plugin_data = array();
231
+ $update_plugin_data["debug_mode"] = isset($plugin_settings_data_unserialize["debug_mode"]) ? esc_attr($plugin_settings_data_unserialize["debug_mode"]) : "enable";
232
+ $update_plugin_data["remove_tables_at_uninstall"] = isset($plugin_settings_data_unserialize["remove_tables_at_uninstall"]) ? esc_attr($plugin_settings_data_unserialize["remove_tables_at_uninstall"]) : "disable";
233
+ $update_plugin_data["monitor_email_logs"] = isset($plugin_settings_data_unserialize["monitor_email_logs"]) ? esc_attr($plugin_settings_data_unserialize["monitor_email_logs"]) : "enable";
234
+
235
+ $update_plugin_settings_data_serialize = array();
236
+ $where = array();
237
+ $where["meta_key"] = "settings";
238
+ $update_plugin_settings_data_serialize["meta_value"] = serialize($update_plugin_data);
239
+ $obj_dbHelper_install_script_mail_bank->updateCommand(mail_bank_meta(), $update_plugin_settings_data_serialize, $where);
240
+ } else {
241
+ mail_bank_table();
242
+ mail_bank_meta_table();
243
+ }
244
+ break;
245
+
246
+ default:
247
+ if (count($wpdb->get_var("SHOW TABLES LIKE '" . mail_bank() . "'")) != 0 && count($wpdb->get_var("SHOW TABLES LIKE '" . mail_bank_meta() . "'")) != 0) {
248
+ $settings_data = $wpdb->get_var
249
+ (
250
+ $wpdb->prepare
251
+ (
252
+ "SELECT meta_value FROM " . mail_bank_meta() .
253
+ " WHERE meta_key=%s", "settings"
254
+ )
255
+ );
256
+
257
+ $settings_data_array = maybe_unserialize($settings_data);
258
+ if (!array_key_exists("monitor_email_logs", $settings_data_array)) {
259
+ $settings_data_array["monitor_email_logs"] = "enable";
260
+ }
261
+ $where = array();
262
+ $settings_array = array();
263
+ $where["meta_key"] = "settings";
264
+ $settings_array["meta_value"] = serialize($settings_data_array);
265
+ $obj_dbHelper_install_script_mail_bank->updateCommand(mail_bank_meta(), $settings_array, $where);
266
+
267
+ $get_roles_settings_data = $wpdb->get_var
268
+ (
269
+ $wpdb->prepare
270
+ (
271
+ "SELECT meta_value FROM " . mail_bank_meta() .
272
+ " WHERE meta_key=%s", "roles_and_capabilities"
273
+ )
274
+ );
275
+
276
+ $get_roles_settings_data_array = maybe_unserialize($get_roles_settings_data);
277
+
278
+ if (array_key_exists("roles_and_capabilities", $get_roles_settings_data_array)) {
279
+ $roles_and_capabilities_data = isset($get_roles_settings_data_array["roles_and_capabilities"]) ? explode(",", $get_roles_settings_data_array["roles_and_capabilities"]) : "1,1,1,0,0,0";
280
+ $administrator_privileges_data = isset($get_roles_settings_data_array["administrator_privileges"]) ? explode(",", $get_roles_settings_data_array["administrator_privileges"]) : "1,1,1,1,1,1,1,1,1,1";
281
+ $author_privileges_data = isset($get_roles_settings_data_array["author_privileges"]) ? explode(",", $get_roles_settings_data_array["author_privileges"]) : "0,0,1,0,0,0,0,0,0,0";
282
+ $editor_privileges_data = isset($get_roles_settings_data_array["editor_privileges"]) ? explode(",", $get_roles_settings_data_array["editor_privileges"]) : "0,0,1,0,0,0,1,0,0,0";
283
+ $contributor_privileges_data = isset($get_roles_settings_data_array["contributor_privileges"]) ? explode(",", $get_roles_settings_data_array["contributor_privileges"]) : "0,0,0,0,0,0,1,0,0,0";
284
+ $subscriber_privileges_data = isset($get_roles_settings_data_array["subscriber_privileges"]) ? explode(",", $get_roles_settings_data_array["subscriber_privileges"]) : "0,0,0,0,0,0,0,0,0,0";
285
+ $other_privileges_data = isset($get_roles_settings_data_array["other_roles_privileges"]) ? explode(",", $get_roles_settings_data_array["other_roles_privileges"]) : "0,0,0,0,0,0,0,0,0,0";
286
+
287
+ if (count($roles_and_capabilities_data) == 5) {
288
+ array_push($roles_and_capabilities_data, 0);
289
+ }
290
+
291
+ if (count($administrator_privileges_data) == 8) {
292
+ array_splice($administrator_privileges_data, 3, 0, 1);
293
+ array_splice($administrator_privileges_data, 8, 0, 1);
294
+ } elseif (count($administrator_privileges_data) == 9) {
295
+ array_splice($administrator_privileges_data, 3, 0, 1);
296
+ }
297
+
298
+ if (count($author_privileges_data) == 8) {
299
+ array_splice($author_privileges_data, 3, 0, 0);
300
+ array_splice($author_privileges_data, 8, 0, 0);
301
+ } elseif (count($author_privileges_data) == 9) {
302
+ array_splice($author_privileges_data, 3, 0, 0);
303
+ }
304
+
305
+ if (count($editor_privileges_data) == 8) {
306
+ array_splice($editor_privileges_data, 3, 0, 0);
307
+ array_splice($editor_privileges_data, 8, 0, 0);
308
+ } elseif (count($editor_privileges_data) == 9) {
309
+ array_splice($editor_privileges_data, 3, 0, 0);
310
+ }
311
+
312
+ if (count($contributor_privileges_data) == 8) {
313
+ array_splice($contributor_privileges_data, 3, 0, 0);
314
+ array_splice($contributor_privileges_data, 8, 0, 0);
315
+ } elseif (count($contributor_privileges_data) == 9) {
316
+ array_splice($editor_privileges_data, 3, 0, 0);
317
+ }
318
+
319
+ if (count($subscriber_privileges_data) == 8) {
320
+ array_splice($subscriber_privileges_data, 3, 0, 0);
321
+ array_splice($subscriber_privileges_data, 8, 0, 0);
322
+ } elseif (count($subscriber_privileges_data) == 9) {
323
+ array_splice($subscriber_privileges_data, 3, 0, 0);
324
+ }
325
+
326
+ if (count($other_privileges_data) == 8) {
327
+ array_splice($other_privileges_data, 3, 0, 0);
328
+ array_splice($other_privileges_data, 8, 0, 0);
329
+ } elseif (count($other_privileges_data) == 9) {
330
+ array_splice($other_privileges_data, 3, 0, 0);
331
+ }
332
+
333
+ if (!array_key_exists("others_full_control_capability", $get_roles_settings_data_array)) {
334
+ $get_roles_settings_data_array["others_full_control_capability"] = "0";
335
+ }
336
+
337
+ if (!array_key_exists("capabilities", $get_roles_settings_data_array)) {
338
+ $user_capabilities = get_others_capabilities_mail_bank();
339
+ $other_roles_array = array();
340
+ $other_roles_access_array = array(
341
+ "manage_options",
342
+ "edit_plugins",
343
+ "edit_posts",
344
+ "publish_posts",
345
+ "publish_pages",
346
+ "edit_pages",
347
+ "read"
348
+ );
349
+ foreach ($other_roles_access_array as $role) {
350
+ if (in_array($role, $user_capabilities)) {
351
+ array_push($other_roles_array, $role);
352
+ }
353
+ }
354
+ $get_roles_settings_data_array["capabilities"] = $other_roles_array;
355
+ }
356
+ $get_roles_settings_data_array["roles_and_capabilities"] = implode(",", $roles_and_capabilities_data);
357
+ $get_roles_settings_data_array["administrator_privileges"] = implode(",", $administrator_privileges_data);
358
+ $get_roles_settings_data_array["author_privileges"] = implode(",", $author_privileges_data);
359
+ $get_roles_settings_data_array["editor_privileges"] = implode(",", $editor_privileges_data);
360
+ $get_roles_settings_data_array["contributor_privileges"] = implode(",", $contributor_privileges_data);
361
+ $get_roles_settings_data_array["subscriber_privileges"] = implode(",", $subscriber_privileges_data);
362
+ $get_roles_settings_data_array["other_roles_privileges"] = implode(",", $other_privileges_data);
363
+ $where = array();
364
+ $roles_capabilities_array = array();
365
+ $where["meta_key"] = "roles_and_capabilities";
366
+ $roles_capabilities_array["meta_value"] = serialize($get_roles_settings_data_array);
367
+ $obj_dbHelper_install_script_mail_bank->updateCommand(mail_bank_meta(), $roles_capabilities_array, $where);
368
+ }
369
+ }
370
  }
371
  update_option("mail-bank-version-number", "3.0.0");
372
  }
lib/sidebar-menu.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * This file is used for creating sidebar menu.
5
  *
@@ -16,8 +15,8 @@ if (!is_user_logged_in()) {
16
  $access_granted = false;
17
  foreach ($user_role_permission as $permission) {
18
  if (current_user_can($permission)) {
19
- $access_granted = true;
20
- break;
21
  }
22
  }
23
  if (!$access_granted) {
@@ -26,99 +25,99 @@ if (!is_user_logged_in()) {
26
  $flag = 0;
27
 
28
  $role_capabilities = $wpdb->get_var
29
- (
30
- $wpdb->prepare
31
- (
32
- "SELECT meta_value from " . mail_bank_meta() . "
33
  WHERE meta_key = %s", "roles_and_capabilities"
34
- )
35
  );
36
 
37
  $roles_and_capabilities_unserialized_data = maybe_unserialize($role_capabilities);
38
  $capabilities = explode(",", isset($roles_and_capabilities_unserialized_data["roles_and_capabilities"]) ? esc_attr($roles_and_capabilities_unserialized_data["roles_and_capabilities"]) : "");
39
 
40
  if (is_super_admin()) {
41
- $mb_role = "administrator";
42
  } else {
43
- $mb_role = check_user_roles_mail_bank();
44
  }
45
  switch ($mb_role) {
46
- case "administrator":
47
- $privileges = "administrator_privileges";
48
- $flag = $capabilities[0];
49
- break;
50
-
51
- case "author":
52
- $privileges = "author_privileges";
53
- $flag = $capabilities[1];
54
- break;
55
-
56
- case "editor":
57
- $privileges = "editor_privileges";
58
- $flag = $capabilities[2];
59
- break;
60
-
61
- case "contributor":
62
- $privileges = "contributor_privileges";
63
- $flag = $capabilities[3];
64
- break;
65
-
66
- case "subscriber":
67
- $privileges = "subscriber_privileges";
68
- $flag = $capabilities[4];
69
- break;
70
-
71
- default:
72
- $privileges = "other_roles_privileges";
73
- $flag = $capabilities[5];
74
- break;
75
  }
76
 
77
  foreach ($roles_and_capabilities_unserialized_data as $key => $value) {
78
- if ($privileges == $key) {
79
- $privileges_value = $value;
80
- break;
81
- }
82
  }
83
 
84
  $full_control = explode(",", $privileges_value);
85
  if (!defined("full_control"))
86
- define("full_control", "$full_control[0]");
87
  if (!defined("email_configuration_mail_bank"))
88
- define("email_configuration_mail_bank", "$full_control[1]");
89
  if (!defined("test_email_mail_bank"))
90
- define("test_email_mail_bank", "$full_control[2]");
91
  if (!defined("conectivity_test_email_mail_bank"))
92
- define("conectivity_test_email_mail_bank", "$full_control[3]");
93
  if (!defined("email_logs_mail_bank"))
94
- define("email_logs_mail_bank", "$full_control[4]");
95
  if (!defined("settings_mail_bank"))
96
- define("settings_mail_bank", "$full_control[5]");
97
  if (!defined("roles_and_capabilities_mail_bank"))
98
- define("roles_and_capabilities_mail_bank", "$full_control[6]");
99
  if (!defined("system_information_mail_bank"))
100
- define("system_information_mail_bank", "$full_control[7]");
101
  $check_wp_mail_bank_wizard = get_option("wp-mail-bank-wizard-set-up");
102
  if ($flag == "1") {
103
- global $wp_version;
104
-
105
- $icon = plugins_url("assets/global/img/icon.png", dirname(__FILE__));
106
- if ($check_wp_mail_bank_wizard) {
107
- add_menu_page($wp_mail_bank, $wp_mail_bank, "read", "mb_email_configuration", "", $icon);
108
- } else {
109
- add_menu_page($wp_mail_bank, $wp_mail_bank, "read", "wp_mail_bank_wizard", "", plugins_url("assets/global/img/icon.png", dirname(__FILE__)));
110
- add_submenu_page($wp_mail_bank, $wp_mail_bank, "", "read", "wp_mail_bank_wizard", "wp_mail_bank_wizard");
111
- }
112
-
113
- add_submenu_page("mb_email_configuration", $mb_email_configuration, $mb_email_configuration, "read", "mb_email_configuration", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_email_configuration");
114
- add_submenu_page("mb_email_configuration", $mb_test_email, $mb_test_email, "read", "mb_test_email", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_test_email");
115
- add_submenu_page("mb_email_configuration", $mb_connectivity_test, $mb_connectivity_test, "read", "mb_connectivity_test", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_connectivity_test");
116
- add_submenu_page("mb_email_configuration", $mb_email_logs, $mb_email_logs, "read", "mb_email_logs", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_email_logs");
117
- add_submenu_page("mb_email_configuration", $mb_settings, $mb_settings, "read", "mb_settings", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_settings");
118
- add_submenu_page("mb_email_configuration", $mb_roles_and_capabilities, $mb_roles_and_capabilities, "read", "mb_roles_and_capabilities", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_roles_and_capabilities");
119
- add_submenu_page("mb_email_configuration", $mb_feedbacks, $mb_feedbacks, "read", "mb_feedbacks", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_feedbacks");
120
- add_submenu_page("mb_email_configuration", $mb_system_information, $mb_system_information, "read", "mb_system_information", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_system_information");
121
- add_submenu_page("mb_email_configuration", $mb_upgrade, $mb_upgrade, "read", "mb_upgrade", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_upgrade");
122
  }
123
 
124
 
@@ -129,21 +128,19 @@ if (!is_user_logged_in()) {
129
  Created On: 21-04-2017 10:17
130
  Created By: Tech Banker Team
131
  */
132
-
133
  function wp_mail_bank_wizard() {
134
- global $wpdb;
135
- $user_role_permission = get_users_capabilities_mail_bank();
136
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
137
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
138
- }
139
- if (file_exists(MAIL_BANK_DIR_PATH . "views/wizard/wizard.php")) {
140
- include_once MAIL_BANK_DIR_PATH . "views/wizard/wizard.php";
141
- }
142
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
143
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
144
- }
145
  }
146
-
147
  /*
148
  Function Name: mb_email_configuration
149
  Parameters: No
@@ -151,30 +148,28 @@ if (!is_user_logged_in()) {
151
  Created On: 15-06-2016 10:44
152
  Created By: Tech Banker Team
153
  */
154
-
155
  function mb_email_configuration() {
156
- global $wpdb;
157
- $user_role_permission = get_users_capabilities_mail_bank();
158
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
159
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
160
- }
161
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
162
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
163
- }
164
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
165
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
166
- }
167
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
168
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
169
- }
170
- if (file_exists(MAIL_BANK_DIR_PATH . "views/email-setup/email-setup.php")) {
171
- include_once MAIL_BANK_DIR_PATH . "views/email-setup/email-setup.php";
172
- }
173
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
174
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
175
- }
176
  }
177
-
178
  /*
179
  Function Name: mb_test_email
180
  Parameters: No
@@ -182,30 +177,28 @@ if (!is_user_logged_in()) {
182
  Created On: 15-06-2016 10:44
183
  Created By: Tech Banker Team
184
  */
185
-
186
  function mb_test_email() {
187
- global $wpdb;
188
- $user_role_permission = get_users_capabilities_mail_bank();
189
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
190
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
191
- }
192
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
193
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
194
- }
195
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
196
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
197
- }
198
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
199
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
200
- }
201
- if (file_exists(MAIL_BANK_DIR_PATH . "views/test-email/test-email.php")) {
202
- include_once MAIL_BANK_DIR_PATH . "views/test-email/test-email.php";
203
- }
204
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
205
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
206
- }
207
  }
208
-
209
  /*
210
  Function Name: mb_connectivity_test
211
  Parameters: No
@@ -213,30 +206,28 @@ if (!is_user_logged_in()) {
213
  Created On: 15-06-2016 10:44
214
  Created By: Tech Banker Team
215
  */
216
-
217
  function mb_connectivity_test() {
218
- global $wpdb;
219
- $user_role_permission = get_users_capabilities_mail_bank();
220
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
221
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
222
- }
223
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
224
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
225
- }
226
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
227
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
228
- }
229
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
230
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
231
- }
232
- if (file_exists(MAIL_BANK_DIR_PATH . "views/connectivity-test/connectivity-test.php")) {
233
- include_once MAIL_BANK_DIR_PATH . "views/connectivity-test/connectivity-test.php";
234
- }
235
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
236
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
237
- }
238
  }
239
-
240
  /*
241
  Function Name: mb_email_logs
242
  Parameters: No
@@ -244,30 +235,28 @@ if (!is_user_logged_in()) {
244
  Created On: 15-06-2016 10:44
245
  Created By: Tech Banker Team
246
  */
247
-
248
  function mb_email_logs() {
249
- global $wpdb;
250
- $user_role_permission = get_users_capabilities_mail_bank();
251
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
252
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
253
- }
254
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
255
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
256
- }
257
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
258
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
259
- }
260
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
261
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
262
- }
263
- if (file_exists(MAIL_BANK_DIR_PATH . "views/email-logs/email-logs.php")) {
264
- include_once MAIL_BANK_DIR_PATH . "views/email-logs/email-logs.php";
265
- }
266
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
267
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
268
- }
269
  }
270
-
271
  /*
272
  Function Name: mb_settings
273
  Parameters: No
@@ -275,30 +264,28 @@ if (!is_user_logged_in()) {
275
  Created On: 15-06-2016 10:44
276
  Created By: Tech Banker Team
277
  */
278
-
279
  function mb_settings() {
280
- global $wpdb;
281
- $user_role_permission = get_users_capabilities_mail_bank();
282
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
283
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
284
- }
285
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
286
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
287
- }
288
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
289
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
290
- }
291
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
292
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
293
- }
294
- if (file_exists(MAIL_BANK_DIR_PATH . "views/settings/settings.php")) {
295
- include_once MAIL_BANK_DIR_PATH . "views/settings/settings.php";
296
- }
297
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
298
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
299
- }
300
  }
301
-
302
  /*
303
  Function Name: mb_roles_and_capabilities
304
  Parameters: No
@@ -306,30 +293,28 @@ if (!is_user_logged_in()) {
306
  Created On: 15-06-2016 12:59
307
  Created By: Tech Banker Team
308
  */
309
-
310
  function mb_roles_and_capabilities() {
311
- global $wpdb;
312
- $user_role_permission = get_users_capabilities_mail_bank();
313
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
314
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
315
- }
316
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
317
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
318
- }
319
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
320
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
321
- }
322
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
323
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
324
- }
325
- if (file_exists(MAIL_BANK_DIR_PATH . "views/roles-and-capabilities/roles-and-capabilities.php")) {
326
- include_once MAIL_BANK_DIR_PATH . "views/roles-and-capabilities/roles-and-capabilities.php";
327
- }
328
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
329
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
330
- }
331
  }
332
-
333
  /*
334
  Function Name: mb_feedbacks
335
  Parameters: No
@@ -337,30 +322,28 @@ if (!is_user_logged_in()) {
337
  Created On: 15-06-2016 10:44
338
  Created By: Tech Banker Team
339
  */
340
-
341
  function mb_feedbacks() {
342
- global $wpdb;
343
- $user_role_permission = get_users_capabilities_mail_bank();
344
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
345
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
346
- }
347
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
348
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
349
- }
350
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
351
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
352
- }
353
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
354
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
355
- }
356
- if (file_exists(MAIL_BANK_DIR_PATH . "views/feedbacks/feedbacks.php")) {
357
- include_once MAIL_BANK_DIR_PATH . "views/feedbacks/feedbacks.php";
358
- }
359
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
360
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
361
- }
362
  }
363
-
364
  /*
365
  Function Name: mb_system_information
366
  Parameters: No
@@ -368,30 +351,28 @@ if (!is_user_logged_in()) {
368
  Created On: 15-06-2016 02:29
369
  Created By: Tech Banker Team
370
  */
371
-
372
  function mb_system_information() {
373
- global $wpdb;
374
- $user_role_permission = get_users_capabilities_mail_bank();
375
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
376
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
377
- }
378
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
379
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
380
- }
381
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
382
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
383
- }
384
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
385
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
386
- }
387
- if (file_exists(MAIL_BANK_DIR_PATH . "views/system-information/system-information.php")) {
388
- include_once MAIL_BANK_DIR_PATH . "views/system-information/system-information.php";
389
- }
390
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
391
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
392
- }
393
  }
394
-
395
  /*
396
  Function Name: mb_upgrade
397
  Parameter: No
@@ -399,29 +380,27 @@ if (!is_user_logged_in()) {
399
  Created On: 13-08-2016 09:41
400
  Created By: Tech Banker Team
401
  */
402
-
403
  function mb_upgrade() {
404
- global $wpdb;
405
- $user_role_permission = get_users_capabilities_mail_bank();
406
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
407
- include MAIL_BANK_DIR_PATH . "includes/translations.php";
408
- }
409
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
410
- include_once MAIL_BANK_DIR_PATH . "includes/header.php";
411
- }
412
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
413
- include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
414
- }
415
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
416
- include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
417
- }
418
- if (file_exists(MAIL_BANK_DIR_PATH . "views/premium-editions/premium-editions.php")) {
419
- include_once MAIL_BANK_DIR_PATH . "views/premium-editions/premium-editions.php";
420
- }
421
- if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
422
- include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
423
- }
424
  }
425
-
426
  }
427
- }
1
  <?php
 
2
  /**
3
  * This file is used for creating sidebar menu.
4
  *
15
  $access_granted = false;
16
  foreach ($user_role_permission as $permission) {
17
  if (current_user_can($permission)) {
18
+ $access_granted = true;
19
+ break;
20
  }
21
  }
22
  if (!$access_granted) {
25
  $flag = 0;
26
 
27
  $role_capabilities = $wpdb->get_var
28
+ (
29
+ $wpdb->prepare
30
+ (
31
+ "SELECT meta_value from " . mail_bank_meta() . "
32
  WHERE meta_key = %s", "roles_and_capabilities"
33
+ )
34
  );
35
 
36
  $roles_and_capabilities_unserialized_data = maybe_unserialize($role_capabilities);
37
  $capabilities = explode(",", isset($roles_and_capabilities_unserialized_data["roles_and_capabilities"]) ? esc_attr($roles_and_capabilities_unserialized_data["roles_and_capabilities"]) : "");
38
 
39
  if (is_super_admin()) {
40
+ $mb_role = "administrator";
41
  } else {
42
+ $mb_role = check_user_roles_mail_bank();
43
  }
44
  switch ($mb_role) {
45
+ case "administrator":
46
+ $privileges = "administrator_privileges";
47
+ $flag = $capabilities[0];
48
+ break;
49
+
50
+ case "author":
51
+ $privileges = "author_privileges";
52
+ $flag = $capabilities[1];
53
+ break;
54
+
55
+ case "editor":
56
+ $privileges = "editor_privileges";
57
+ $flag = $capabilities[2];
58
+ break;
59
+
60
+ case "contributor":
61
+ $privileges = "contributor_privileges";
62
+ $flag = $capabilities[3];
63
+ break;
64
+
65
+ case "subscriber":
66
+ $privileges = "subscriber_privileges";
67
+ $flag = $capabilities[4];
68
+ break;
69
+
70
+ default:
71
+ $privileges = "other_roles_privileges";
72
+ $flag = $capabilities[5];
73
+ break;
74
  }
75
 
76
  foreach ($roles_and_capabilities_unserialized_data as $key => $value) {
77
+ if ($privileges == $key) {
78
+ $privileges_value = $value;
79
+ break;
80
+ }
81
  }
82
 
83
  $full_control = explode(",", $privileges_value);
84
  if (!defined("full_control"))
85
+ define("full_control", "$full_control[0]");
86
  if (!defined("email_configuration_mail_bank"))
87
+ define("email_configuration_mail_bank", "$full_control[1]");
88
  if (!defined("test_email_mail_bank"))
89
+ define("test_email_mail_bank", "$full_control[2]");
90
  if (!defined("conectivity_test_email_mail_bank"))
91
+ define("conectivity_test_email_mail_bank", "$full_control[3]");
92
  if (!defined("email_logs_mail_bank"))
93
+ define("email_logs_mail_bank", "$full_control[4]");
94
  if (!defined("settings_mail_bank"))
95
+ define("settings_mail_bank", "$full_control[5]");
96
  if (!defined("roles_and_capabilities_mail_bank"))
97
+ define("roles_and_capabilities_mail_bank", "$full_control[6]");
98
  if (!defined("system_information_mail_bank"))
99
+ define("system_information_mail_bank", "$full_control[7]");
100
  $check_wp_mail_bank_wizard = get_option("wp-mail-bank-wizard-set-up");
101
  if ($flag == "1") {
102
+ global $wp_version;
103
+
104
+ $icon = plugins_url("assets/global/img/icon.png", dirname(__FILE__));
105
+ if ($check_wp_mail_bank_wizard) {
106
+ add_menu_page($wp_mail_bank, $wp_mail_bank, "read", "mb_email_configuration", "", $icon);
107
+ } else {
108
+ add_menu_page($wp_mail_bank, $wp_mail_bank, "read", "wp_mail_bank_wizard", "", plugins_url("assets/global/img/icon.png", dirname(__FILE__)));
109
+ add_submenu_page($wp_mail_bank, $wp_mail_bank, "", "read", "wp_mail_bank_wizard", "wp_mail_bank_wizard");
110
+ }
111
+
112
+ add_submenu_page("mb_email_configuration", $mb_email_configuration, $mb_email_configuration, "read", "mb_email_configuration", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_email_configuration");
113
+ add_submenu_page("mb_email_configuration", $mb_test_email, $mb_test_email, "read", "mb_test_email", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_test_email");
114
+ add_submenu_page("mb_email_configuration", $mb_connectivity_test, $mb_connectivity_test, "read", "mb_connectivity_test", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_connectivity_test");
115
+ add_submenu_page("mb_email_configuration", $mb_email_logs, $mb_email_logs, "read", "mb_email_logs", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_email_logs");
116
+ add_submenu_page("mb_email_configuration", $mb_settings, $mb_settings, "read", "mb_settings", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_settings");
117
+ add_submenu_page("mb_email_configuration", $mb_roles_and_capabilities, $mb_roles_and_capabilities, "read", "mb_roles_and_capabilities", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_roles_and_capabilities");
118
+ add_submenu_page("mb_email_configuration", $mb_feedbacks, $mb_feedbacks, "read", "mb_feedbacks", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_feedbacks");
119
+ add_submenu_page("mb_email_configuration", $mb_system_information, $mb_system_information, "read", "mb_system_information", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_system_information");
120
+ add_submenu_page("mb_email_configuration", $mb_upgrade, $mb_upgrade, "read", "mb_upgrade", $check_wp_mail_bank_wizard == "" ? "wp_mail_bank_wizard" : "mb_upgrade");
121
  }
122
 
123
 
128
  Created On: 21-04-2017 10:17
129
  Created By: Tech Banker Team
130
  */
 
131
  function wp_mail_bank_wizard() {
132
+ global $wpdb;
133
+ $user_role_permission = get_users_capabilities_mail_bank();
134
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
135
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
136
+ }
137
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/wizard/wizard.php")) {
138
+ include_once MAIL_BANK_DIR_PATH . "views/wizard/wizard.php";
139
+ }
140
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
141
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
142
+ }
143
  }
 
144
  /*
145
  Function Name: mb_email_configuration
146
  Parameters: No
148
  Created On: 15-06-2016 10:44
149
  Created By: Tech Banker Team
150
  */
 
151
  function mb_email_configuration() {
152
+ global $wpdb;
153
+ $user_role_permission = get_users_capabilities_mail_bank();
154
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
155
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
156
+ }
157
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
158
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
159
+ }
160
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
161
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
162
+ }
163
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
164
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
165
+ }
166
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/email-setup/email-setup.php")) {
167
+ include_once MAIL_BANK_DIR_PATH . "views/email-setup/email-setup.php";
168
+ }
169
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
170
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
171
+ }
172
  }
 
173
  /*
174
  Function Name: mb_test_email
175
  Parameters: No
177
  Created On: 15-06-2016 10:44
178
  Created By: Tech Banker Team
179
  */
 
180
  function mb_test_email() {
181
+ global $wpdb;
182
+ $user_role_permission = get_users_capabilities_mail_bank();
183
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
184
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
185
+ }
186
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
187
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
188
+ }
189
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
190
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
191
+ }
192
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
193
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
194
+ }
195
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/test-email/test-email.php")) {
196
+ include_once MAIL_BANK_DIR_PATH . "views/test-email/test-email.php";
197
+ }
198
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
199
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
200
+ }
201
  }
 
202
  /*
203
  Function Name: mb_connectivity_test
204
  Parameters: No
206
  Created On: 15-06-2016 10:44
207
  Created By: Tech Banker Team
208
  */
 
209
  function mb_connectivity_test() {
210
+ global $wpdb;
211
+ $user_role_permission = get_users_capabilities_mail_bank();
212
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
213
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
214
+ }
215
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
216
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
217
+ }
218
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
219
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
220
+ }
221
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
222
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
223
+ }
224
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/connectivity-test/connectivity-test.php")) {
225
+ include_once MAIL_BANK_DIR_PATH . "views/connectivity-test/connectivity-test.php";
226
+ }
227
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
228
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
229
+ }
230
  }
 
231
  /*
232
  Function Name: mb_email_logs
233
  Parameters: No
235
  Created On: 15-06-2016 10:44
236
  Created By: Tech Banker Team
237
  */
 
238
  function mb_email_logs() {
239
+ global $wpdb;
240
+ $user_role_permission = get_users_capabilities_mail_bank();
241
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
242
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
243
+ }
244
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
245
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
246
+ }
247
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
248
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
249
+ }
250
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
251
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
252
+ }
253
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/email-logs/email-logs.php")) {
254
+ include_once MAIL_BANK_DIR_PATH . "views/email-logs/email-logs.php";
255
+ }
256
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
257
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
258
+ }
259
  }
 
260
  /*
261
  Function Name: mb_settings
262
  Parameters: No
264
  Created On: 15-06-2016 10:44
265
  Created By: Tech Banker Team
266
  */
 
267
  function mb_settings() {
268
+ global $wpdb;
269
+ $user_role_permission = get_users_capabilities_mail_bank();
270
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
271
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
272
+ }
273
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
274
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
275
+ }
276
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
277
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
278
+ }
279
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
280
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
281
+ }
282
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/settings/settings.php")) {
283
+ include_once MAIL_BANK_DIR_PATH . "views/settings/settings.php";
284
+ }
285
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
286
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
287
+ }
288
  }
 
289
  /*
290
  Function Name: mb_roles_and_capabilities
291
  Parameters: No
293
  Created On: 15-06-2016 12:59
294
  Created By: Tech Banker Team
295
  */
 
296
  function mb_roles_and_capabilities() {
297
+ global $wpdb;
298
+ $user_role_permission = get_users_capabilities_mail_bank();
299
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
300
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
301
+ }
302
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
303
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
304
+ }
305
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
306
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
307
+ }
308
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
309
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
310
+ }
311
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/roles-and-capabilities/roles-and-capabilities.php")) {
312
+ include_once MAIL_BANK_DIR_PATH . "views/roles-and-capabilities/roles-and-capabilities.php";
313
+ }
314
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
315
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
316
+ }
317
  }
 
318
  /*
319
  Function Name: mb_feedbacks
320
  Parameters: No
322
  Created On: 15-06-2016 10:44
323
  Created By: Tech Banker Team
324
  */
 
325
  function mb_feedbacks() {
326
+ global $wpdb;
327
+ $user_role_permission = get_users_capabilities_mail_bank();
328
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
329
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
330
+ }
331
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
332
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
333
+ }
334
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
335
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
336
+ }
337
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
338
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
339
+ }
340
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/feedbacks/feedbacks.php")) {
341
+ include_once MAIL_BANK_DIR_PATH . "views/feedbacks/feedbacks.php";
342
+ }
343
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
344
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
345
+ }
346
  }
 
347
  /*
348
  Function Name: mb_system_information
349
  Parameters: No
351
  Created On: 15-06-2016 02:29
352
  Created By: Tech Banker Team
353
  */
 
354
  function mb_system_information() {
355
+ global $wpdb;
356
+ $user_role_permission = get_users_capabilities_mail_bank();
357
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
358
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
359
+ }
360
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
361
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
362
+ }
363
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
364
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
365
+ }
366
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
367
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
368
+ }
369
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/system-information/system-information.php")) {
370
+ include_once MAIL_BANK_DIR_PATH . "views/system-information/system-information.php";
371
+ }
372
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
373
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
374
+ }
375
  }
 
376
  /*
377
  Function Name: mb_upgrade
378
  Parameter: No
380
  Created On: 13-08-2016 09:41
381
  Created By: Tech Banker Team
382
  */
 
383
  function mb_upgrade() {
384
+ global $wpdb;
385
+ $user_role_permission = get_users_capabilities_mail_bank();
386
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/translations.php")) {
387
+ include MAIL_BANK_DIR_PATH . "includes/translations.php";
388
+ }
389
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/header.php")) {
390
+ include_once MAIL_BANK_DIR_PATH . "includes/header.php";
391
+ }
392
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/sidebar.php")) {
393
+ include_once MAIL_BANK_DIR_PATH . "includes/sidebar.php";
394
+ }
395
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/queries.php")) {
396
+ include_once MAIL_BANK_DIR_PATH . "includes/queries.php";
397
+ }
398
+ if (file_exists(MAIL_BANK_DIR_PATH . "views/premium-editions/premium-editions.php")) {
399
+ include_once MAIL_BANK_DIR_PATH . "views/premium-editions/premium-editions.php";
400
+ }
401
+ if (file_exists(MAIL_BANK_DIR_PATH . "includes/footer.php")) {
402
+ include_once MAIL_BANK_DIR_PATH . "includes/footer.php";
403
+ }
404
  }
 
405
  }
406
+ }
lib/zend/exception.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -28,14 +27,11 @@ if (!defined("ABSPATH")) {
28
  * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
29
  * @license http://framework.zend.com/license/new-bsd New BSD License
30
  */
31
-
32
  class mail_bank_Zend_Exception extends Exception {
33
-
34
  /**
35
  * @var null|Exception
36
  */
37
  private $_previous = null;
38
-
39
  /**
40
  * Construct the exception
41
  *
@@ -46,13 +42,12 @@ class mail_bank_Zend_Exception extends Exception {
46
  */
47
  public function __construct($msg = '', $code = 0, Exception $previous = null) {
48
  if (version_compare(PHP_VERSION, '5.3.0', '<')) {
49
- parent::__construct($msg, (int) $code);
50
- $this->_previous = $previous;
51
  } else {
52
- parent::__construct($msg, (int) $code, $previous);
53
  }
54
  }
55
-
56
  /**
57
  * Overloading
58
  *
@@ -64,11 +59,10 @@ class mail_bank_Zend_Exception extends Exception {
64
  */
65
  public function __call($method, array $args) {
66
  if ('getprevious' == strtolower($method)) {
67
- return $this->_getPrevious();
68
  }
69
  return null;
70
  }
71
-
72
  /**
73
  * String representation of the exception
74
  *
@@ -76,15 +70,14 @@ class mail_bank_Zend_Exception extends Exception {
76
  */
77
  public function __toString() {
78
  if (version_compare(PHP_VERSION, '5.3.0', '<')) {
79
- if (null !== ($e = $this->getPrevious())) {
80
- return $e->__toString()
81
- . "\n\nNext "
82
- . parent::__toString();
83
- }
84
  }
85
  return parent::__toString();
86
  }
87
-
88
  /**
89
  * Returns previous Exception
90
  *
@@ -93,5 +86,4 @@ class mail_bank_Zend_Exception extends Exception {
93
  protected function _getPrevious() {
94
  return $this->_previous;
95
  }
96
-
97
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
27
  * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
28
  * @license http://framework.zend.com/license/new-bsd New BSD License
29
  */
 
30
  class mail_bank_Zend_Exception extends Exception {
 
31
  /**
32
  * @var null|Exception
33
  */
34
  private $_previous = null;
 
35
  /**
36
  * Construct the exception
37
  *
42
  */
43
  public function __construct($msg = '', $code = 0, Exception $previous = null) {
44
  if (version_compare(PHP_VERSION, '5.3.0', '<')) {
45
+ parent::__construct($msg, (int) $code);
46
+ $this->_previous = $previous;
47
  } else {
48
+ parent::__construct($msg, (int) $code, $previous);
49
  }
50
  }
 
51
  /**
52
  * Overloading
53
  *
59
  */
60
  public function __call($method, array $args) {
61
  if ('getprevious' == strtolower($method)) {
62
+ return $this->_getPrevious();
63
  }
64
  return null;
65
  }
 
66
  /**
67
  * String representation of the exception
68
  *
70
  */
71
  public function __toString() {
72
  if (version_compare(PHP_VERSION, '5.3.0', '<')) {
73
+ if (null !== ($e = $this->getPrevious())) {
74
+ return $e->__toString()
75
+ . "\n\nNext "
76
+ . parent::__toString();
77
+ }
78
  }
79
  return parent::__toString();
80
  }
 
81
  /**
82
  * Returns previous Exception
83
  *
86
  protected function _getPrevious() {
87
  return $this->_previous;
88
  }
89
+ }
 
lib/zend/loader.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -30,9 +29,7 @@ if (!defined("ABSPATH")) {
30
  * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
31
  * @license http://framework.zend.com/license/new-bsd New BSD License
32
  */
33
-
34
  class mail_bank_Zend_Loader {
35
-
36
  /**
37
  * Loads a class from a PHP file. The filename must be formatted
38
  * as "$class.php".
@@ -55,44 +52,43 @@ class mail_bank_Zend_Loader {
55
  */
56
  public static function loadClass($class, $dirs = null) {
57
  if (class_exists($class, false) || interface_exists($class, false)) {
58
- return;
59
  }
60
 
61
  if ((null !== $dirs) && !is_string($dirs) && !is_array($dirs)) {
62
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
63
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
64
 
65
- throw new mail_bank_Zend_Exception('Directory argument must be a string or an array');
66
  }
67
 
68
  $file = self::standardiseFile($class);
69
  if (!empty($dirs)) {
70
- // use the autodiscovered path
71
- $dirPath = dirname($file);
72
- if (is_string($dirs)) {
73
- $dirs = explode(PATH_SEPARATOR, $dirs);
74
- }
75
- foreach ($dirs as $key => $dir) {
76
- if ($dir == '.') {
77
- $dirs[$key] = $dirPath;
78
- } else {
79
- $dir = rtrim($dir, '\\/');
80
- $dirs[$key] = $dir . DIRECTORY_SEPARATOR . $dirPath;
81
- }
82
- }
83
- $file = basename($file);
84
- self::loadFile($file, $dirs, true);
85
  } else {
86
- self::loadFile($file, null, true);
87
  }
88
  if (!class_exists($class, false) && !interface_exists($class, false)) {
89
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
90
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
91
 
92
- throw new mail_bank_Zend_Exception("File \"$file\" does not exist or class \"$class\" was not found in the file");
93
  }
94
  }
95
-
96
  /**
97
  * Loads a PHP file. This is a wrapper for PHP's include() function.
98
  *
@@ -124,35 +120,34 @@ class mail_bank_Zend_Loader {
124
  */
125
  $incPath = false;
126
  if (!empty($dirs) && (is_array($dirs) || is_string($dirs))) {
127
- if (is_array($dirs)) {
128
- $dirs = implode(PATH_SEPARATOR, $dirs);
129
- }
130
- $incPath = get_include_path();
131
- set_include_path($dirs . PATH_SEPARATOR . $incPath);
132
  }
133
 
134
  /**
135
  * Try finding for the plain filename in the include_path.
136
  */
137
  if ($once) {
138
- if (file_exists($filename))
139
- include_once $filename;
140
  }
141
  else {
142
- if (file_exists($filename))
143
- include $filename;
144
  }
145
 
146
  /**
147
  * If searching in directories, reset include_path
148
  */
149
  if ($incPath) {
150
- set_include_path($incPath);
151
  }
152
 
153
  return true;
154
  }
155
-
156
  /**
157
  * Returns TRUE if the $filename is readable, or FALSE otherwise.
158
  * This function uses the PHP include_path, where PHP's is_readable()
@@ -168,33 +163,32 @@ class mail_bank_Zend_Loader {
168
  */
169
  public static function isReadable($filename) {
170
  if (is_readable($filename)) {
171
- // Return early if the filename is readable without needing the
172
- // include_path
173
- return true;
174
  }
175
 
176
  if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && preg_match('/^[a-z]:/i', $filename)
177
  ) {
178
- // If on windows, and path provided is clearly an absolute path,
179
- // return false immediately
180
- return false;
181
  }
182
 
183
  foreach (self::explodeIncludePath() as $path) {
184
- if ($path == '.') {
185
- if (is_readable($filename)) {
186
- return true;
187
- }
188
- continue;
189
- }
190
- $file = $path . '/' . $filename;
191
- if (is_readable($file)) {
192
- return true;
193
- }
194
  }
195
  return false;
196
  }
197
-
198
  /**
199
  * Explode an include path into an array
200
  *
@@ -206,20 +200,19 @@ class mail_bank_Zend_Loader {
206
  */
207
  public static function explodeIncludePath($path = null) {
208
  if (null === $path) {
209
- $path = get_include_path();
210
  }
211
 
212
  if (PATH_SEPARATOR == ':') {
213
- // On *nix systems, include_paths which include paths with a stream
214
- // schema cannot be safely explode'd, so we have to be a bit more
215
- // intelligent in the approach.
216
- $paths = preg_split('#:(?!//)#', $path);
217
  } else {
218
- $paths = explode(PATH_SEPARATOR, $path);
219
  }
220
  return $paths;
221
  }
222
-
223
  /**
224
  * spl_autoload() suitable implementation for supporting class autoloading.
225
  *
@@ -235,13 +228,12 @@ class mail_bank_Zend_Loader {
235
  public static function autoload($class) {
236
  trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead', E_USER_NOTICE);
237
  try {
238
- @self::loadClass($class);
239
- return $class;
240
  } catch (Exception $e) {
241
- return false;
242
  }
243
  }
244
-
245
  /**
246
  * Register {@link autoload()} with spl_autoload()
247
  *
@@ -255,31 +247,30 @@ class mail_bank_Zend_Loader {
255
  public static function registerAutoload($class = 'mail_bank_Zend_Loader', $enabled = true) {
256
  trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0; use mail_bank_Zend_Loader_Autoloader instead', E_USER_NOTICE);
257
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/loader/autoloader.php'))
258
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/loader/autoloader.php';
259
 
260
  $autoloader = mail_bank_Zend_Loader_Autoloader::getInstance();
261
  $autoloader->setFallbackAutoloader(true);
262
 
263
  if ('mail_bank_Zend_Loader' != $class) {
264
- self::loadClass($class);
265
- $methods = get_class_methods($class);
266
- if (!in_array('autoload', (array) $methods)) {
267
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
268
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
269
 
270
- throw new mail_bank_Zend_Exception("The class \"$class\" does not have an autoload() method");
271
- }
272
 
273
- $callback = array($class, 'autoload');
274
 
275
- if ($enabled) {
276
- $autoloader->pushAutoloader($callback);
277
- } else {
278
- $autoloader->removeAutoloader($callback);
279
- }
280
  }
281
  }
282
-
283
  /**
284
  * Ensure that filename does not contain exploits
285
  *
@@ -292,13 +283,12 @@ class mail_bank_Zend_Loader {
292
  * Security check
293
  */
294
  if (preg_match('/[^a-z0-9\\/\\\\_.:-]/i', $filename)) {
295
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
296
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
297
 
298
- throw new mail_bank_Zend_Exception('Security check: Illegal character in filename');
299
  }
300
  }
301
-
302
  /**
303
  * Attempt to include() the file.
304
  *
@@ -315,15 +305,14 @@ class mail_bank_Zend_Loader {
315
  */
316
  protected static function _includeFile($filespec, $once = false) {
317
  if ($once) {
318
- if (file_exists($filespec))
319
- return include_once $filespec;
320
  }
321
  else {
322
- if (file_exists($filespec))
323
- return include $filespec;
324
  }
325
  }
326
-
327
  /**
328
  * Standardise the filename.
329
  *
@@ -341,12 +330,11 @@ class mail_bank_Zend_Loader {
341
  $file = '';
342
  $namespace = '';
343
  if ($lastNsPos = strripos($fileName, '\\')) {
344
- $namespace = substr($fileName, 0, $lastNsPos);
345
- $fileName = substr($fileName, $lastNsPos + 1);
346
- $file = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
347
  }
348
  $file .= str_replace('_', DIRECTORY_SEPARATOR, $fileName) . '.php';
349
  return $file;
350
  }
351
-
352
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
29
  * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
30
  * @license http://framework.zend.com/license/new-bsd New BSD License
31
  */
 
32
  class mail_bank_Zend_Loader {
 
33
  /**
34
  * Loads a class from a PHP file. The filename must be formatted
35
  * as "$class.php".
52
  */
53
  public static function loadClass($class, $dirs = null) {
54
  if (class_exists($class, false) || interface_exists($class, false)) {
55
+ return;
56
  }
57
 
58
  if ((null !== $dirs) && !is_string($dirs) && !is_array($dirs)) {
59
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
60
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
61
 
62
+ throw new mail_bank_Zend_Exception('Directory argument must be a string or an array');
63
  }
64
 
65
  $file = self::standardiseFile($class);
66
  if (!empty($dirs)) {
67
+ // use the autodiscovered path
68
+ $dirPath = dirname($file);
69
+ if (is_string($dirs)) {
70
+ $dirs = explode(PATH_SEPARATOR, $dirs);
71
+ }
72
+ foreach ($dirs as $key => $dir) {
73
+ if ($dir == '.') {
74
+ $dirs[$key] = $dirPath;
75
+ } else {
76
+ $dir = rtrim($dir, '\\/');
77
+ $dirs[$key] = $dir . DIRECTORY_SEPARATOR . $dirPath;
78
+ }
79
+ }
80
+ $file = basename($file);
81
+ self::loadFile($file, $dirs, true);
82
  } else {
83
+ self::loadFile($file, null, true);
84
  }
85
  if (!class_exists($class, false) && !interface_exists($class, false)) {
86
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
87
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
88
 
89
+ throw new mail_bank_Zend_Exception("File \"$file\" does not exist or class \"$class\" was not found in the file");
90
  }
91
  }
 
92
  /**
93
  * Loads a PHP file. This is a wrapper for PHP's include() function.
94
  *
120
  */
121
  $incPath = false;
122
  if (!empty($dirs) && (is_array($dirs) || is_string($dirs))) {
123
+ if (is_array($dirs)) {
124
+ $dirs = implode(PATH_SEPARATOR, $dirs);
125
+ }
126
+ $incPath = get_include_path();
127
+ set_include_path($dirs . PATH_SEPARATOR . $incPath);
128
  }
129
 
130
  /**
131
  * Try finding for the plain filename in the include_path.
132
  */
133
  if ($once) {
134
+ if (file_exists($filename))
135
+ include_once $filename;
136
  }
137
  else {
138
+ if (file_exists($filename))
139
+ include $filename;
140
  }
141
 
142
  /**
143
  * If searching in directories, reset include_path
144
  */
145
  if ($incPath) {
146
+ set_include_path($incPath);
147
  }
148
 
149
  return true;
150
  }
 
151
  /**
152
  * Returns TRUE if the $filename is readable, or FALSE otherwise.
153
  * This function uses the PHP include_path, where PHP's is_readable()
163
  */
164
  public static function isReadable($filename) {
165
  if (is_readable($filename)) {
166
+ // Return early if the filename is readable without needing the
167
+ // include_path
168
+ return true;
169
  }
170
 
171
  if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && preg_match('/^[a-z]:/i', $filename)
172
  ) {
173
+ // If on windows, and path provided is clearly an absolute path,
174
+ // return false immediately
175
+ return false;
176
  }
177
 
178
  foreach (self::explodeIncludePath() as $path) {
179
+ if ($path == '.') {
180
+ if (is_readable($filename)) {
181
+ return true;
182
+ }
183
+ continue;
184
+ }
185
+ $file = $path . '/' . $filename;
186
+ if (is_readable($file)) {
187
+ return true;
188
+ }
189
  }
190
  return false;
191
  }
 
192
  /**
193
  * Explode an include path into an array
194
  *
200
  */
201
  public static function explodeIncludePath($path = null) {
202
  if (null === $path) {
203
+ $path = get_include_path();
204
  }
205
 
206
  if (PATH_SEPARATOR == ':') {
207
+ // On *nix systems, include_paths which include paths with a stream
208
+ // schema cannot be safely explode'd, so we have to be a bit more
209
+ // intelligent in the approach.
210
+ $paths = preg_split('#:(?!//)#', $path);
211
  } else {
212
+ $paths = explode(PATH_SEPARATOR, $path);
213
  }
214
  return $paths;
215
  }
 
216
  /**
217
  * spl_autoload() suitable implementation for supporting class autoloading.
218
  *
228
  public static function autoload($class) {
229
  trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead', E_USER_NOTICE);
230
  try {
231
+ @self::loadClass($class);
232
+ return $class;
233
  } catch (Exception $e) {
234
+ return false;
235
  }
236
  }
 
237
  /**
238
  * Register {@link autoload()} with spl_autoload()
239
  *
247
  public static function registerAutoload($class = 'mail_bank_Zend_Loader', $enabled = true) {
248
  trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0; use mail_bank_Zend_Loader_Autoloader instead', E_USER_NOTICE);
249
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/loader/autoloader.php'))
250
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/loader/autoloader.php';
251
 
252
  $autoloader = mail_bank_Zend_Loader_Autoloader::getInstance();
253
  $autoloader->setFallbackAutoloader(true);
254
 
255
  if ('mail_bank_Zend_Loader' != $class) {
256
+ self::loadClass($class);
257
+ $methods = get_class_methods($class);
258
+ if (!in_array('autoload', (array) $methods)) {
259
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
260
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
261
 
262
+ throw new mail_bank_Zend_Exception("The class \"$class\" does not have an autoload() method");
263
+ }
264
 
265
+ $callback = array($class, 'autoload');
266
 
267
+ if ($enabled) {
268
+ $autoloader->pushAutoloader($callback);
269
+ } else {
270
+ $autoloader->removeAutoloader($callback);
271
+ }
272
  }
273
  }
 
274
  /**
275
  * Ensure that filename does not contain exploits
276
  *
283
  * Security check
284
  */
285
  if (preg_match('/[^a-z0-9\\/\\\\_.:-]/i', $filename)) {
286
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
287
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
288
 
289
+ throw new mail_bank_Zend_Exception('Security check: Illegal character in filename');
290
  }
291
  }
 
292
  /**
293
  * Attempt to include() the file.
294
  *
305
  */
306
  protected static function _includeFile($filespec, $once = false) {
307
  if ($once) {
308
+ if (file_exists($filespec))
309
+ return include_once $filespec;
310
  }
311
  else {
312
+ if (file_exists($filespec))
313
+ return include $filespec;
314
  }
315
  }
 
316
  /**
317
  * Standardise the filename.
318
  *
330
  $file = '';
331
  $namespace = '';
332
  if ($lastNsPos = strripos($fileName, '\\')) {
333
+ $namespace = substr($fileName, 0, $lastNsPos);
334
+ $fileName = substr($fileName, $lastNsPos + 1);
335
+ $file = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
336
  }
337
  $file .= str_replace('_', DIRECTORY_SEPARATOR, $fileName) . '.php';
338
  return $file;
339
  }
340
+ }
 
lib/zend/loader/autoloader.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -26,7 +25,6 @@ if (!defined("ABSPATH")) {
26
  /** Zend_Loader */
27
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/loader.php'))
28
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/loader.php';
29
-
30
  /**
31
  * Autoloader stack and namespace autoloader
32
  * @uses mail_bank_Zend_Loader_Autoloader
@@ -36,32 +34,26 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/loader.php'))
36
  * @license http://framework.zend.com/license/new-bsd New BSD License
37
  */
38
  class mail_bank_Zend_Loader_Autoloader {
39
-
40
  /**
41
  * @var mail_bank_Zend_Loader_Autoloader Singleton instance
42
  */
43
  protected static $_instance;
44
-
45
  /**
46
  * @var array Concrete autoloader callback implementations
47
  */
48
  protected $_autoloaders = array();
49
-
50
  /**
51
  * @var array Default autoloader callback
52
  */
53
  protected $_defaultAutoloader = array('mail_bank_Zend_Loader', 'loadClass');
54
-
55
  /**
56
  * @var bool Whether or not to act as a fallback autoloader
57
  */
58
  protected $_fallbackAutoloader = false;
59
-
60
  /**
61
  * @var array Callback for internal autoloader implementation
62
  */
63
  protected $_internalAutoloader;
64
-
65
  /**
66
  * @var array Supported namespaces 'Zend' and 'ZendX' by default.
67
  */
@@ -69,22 +61,18 @@ class mail_bank_Zend_Loader_Autoloader {
69
  'mail_bank_Zend_' => true,
70
  'ZendX_' => true,
71
  );
72
-
73
  /**
74
  * @var array Namespace-specific autoloaders
75
  */
76
  protected $_namespaceAutoloaders = array();
77
-
78
  /**
79
  * @var bool Whether or not to suppress file not found warnings
80
  */
81
  protected $_suppressNotFoundWarnings = false;
82
-
83
  /**
84
  * @var null|string
85
  */
86
  protected $_zfPath;
87
-
88
  /**
89
  * Retrieve singleton instance
90
  *
@@ -92,11 +80,10 @@ class mail_bank_Zend_Loader_Autoloader {
92
  */
93
  public static function getInstance() {
94
  if (null === self::$_instance) {
95
- self::$_instance = new self();
96
  }
97
  return self::$_instance;
98
  }
99
-
100
  /**
101
  * Reset the singleton instance
102
  *
@@ -105,7 +92,6 @@ class mail_bank_Zend_Loader_Autoloader {
105
  public static function resetInstance() {
106
  self::$_instance = null;
107
  }
108
-
109
  /**
110
  * Autoload a class
111
  *
@@ -116,23 +102,22 @@ class mail_bank_Zend_Loader_Autoloader {
116
  $self = self::getInstance();
117
 
118
  foreach ($self->getClassAutoloaders($class) as $autoloader) {
119
- if ($autoloader instanceof mail_bank_Zend_Loader_Autoloader_Interface) {
120
- if ($autoloader->autoload($class)) {
121
- return true;
122
- }
123
- } elseif (is_array($autoloader)) {
124
- if (call_user_func($autoloader, $class)) {
125
- return true;
126
- }
127
- } elseif (is_string($autoloader) || is_callable($autoloader)) {
128
- if ($autoloader($class)) {
129
- return true;
130
- }
131
- }
132
  }
133
  return false;
134
  }
135
-
136
  /**
137
  * Set the default autoloader implementation
138
  *
@@ -141,13 +126,12 @@ class mail_bank_Zend_Loader_Autoloader {
141
  */
142
  public function setDefaultAutoloader($callback) {
143
  if (!is_callable($callback)) {
144
- throw new mail_bank_Zend_Loader_Exception('Invalid callback specified for default autoloader');
145
  }
146
 
147
  $this->_defaultAutoloader = $callback;
148
  return $this;
149
  }
150
-
151
  /**
152
  * Retrieve the default autoloader callback
153
  *
@@ -156,7 +140,6 @@ class mail_bank_Zend_Loader_Autoloader {
156
  public function getDefaultAutoloader() {
157
  return $this->_defaultAutoloader;
158
  }
159
-
160
  /**
161
  * Set several autoloader callbacks at once
162
  *
@@ -167,7 +150,6 @@ class mail_bank_Zend_Loader_Autoloader {
167
  $this->_autoloaders = $autoloaders;
168
  return $this;
169
  }
170
-
171
  /**
172
  * Get attached autoloader implementations
173
  *
@@ -176,7 +158,6 @@ class mail_bank_Zend_Loader_Autoloader {
176
  public function getAutoloaders() {
177
  return $this->_autoloaders;
178
  }
179
-
180
  /**
181
  * Return all autoloaders for a given namespace
182
  *
@@ -186,11 +167,10 @@ class mail_bank_Zend_Loader_Autoloader {
186
  public function getNamespaceAutoloaders($namespace) {
187
  $namespace = (string) $namespace;
188
  if (!array_key_exists($namespace, $this->_namespaceAutoloaders)) {
189
- return array();
190
  }
191
  return $this->_namespaceAutoloaders[$namespace];
192
  }
193
-
194
  /**
195
  * Register a namespace to autoload
196
  *
@@ -199,19 +179,18 @@ class mail_bank_Zend_Loader_Autoloader {
199
  */
200
  public function registerNamespace($namespace) {
201
  if (is_string($namespace)) {
202
- $namespace = (array) $namespace;
203
  } elseif (!is_array($namespace)) {
204
- throw new mail_bank_Zend_Loader_Exception('Invalid namespace provided');
205
  }
206
 
207
  foreach ($namespace as $ns) {
208
- if (!isset($this->_namespaces[$ns])) {
209
- $this->_namespaces[$ns] = true;
210
- }
211
  }
212
  return $this;
213
  }
214
-
215
  /**
216
  * Unload a registered autoload namespace
217
  *
@@ -220,19 +199,18 @@ class mail_bank_Zend_Loader_Autoloader {
220
  */
221
  public function unregisterNamespace($namespace) {
222
  if (is_string($namespace)) {
223
- $namespace = (array) $namespace;
224
  } elseif (!is_array($namespace)) {
225
- throw new mail_bank_Zend_Loader_Exception('Invalid namespace provided');
226
  }
227
 
228
  foreach ($namespace as $ns) {
229
- if (isset($this->_namespaces[$ns])) {
230
- unset($this->_namespaces[$ns]);
231
- }
232
  }
233
  return $this;
234
  }
235
-
236
  /**
237
  * Get a list of registered autoload namespaces
238
  *
@@ -241,31 +219,28 @@ class mail_bank_Zend_Loader_Autoloader {
241
  public function getRegisteredNamespaces() {
242
  return array_keys($this->_namespaces);
243
  }
244
-
245
  public function setZfPath($spec, $version = 'latest') {
246
  $path = $spec;
247
  if (is_array($spec)) {
248
- if (!isset($spec['path'])) {
249
- throw new mail_bank_Zend_Loader_Exception('No path specified for ZF');
250
- }
251
- $path = $spec['path'];
252
- if (isset($spec['version'])) {
253
- $version = $spec['version'];
254
- }
255
  }
256
 
257
  $this->_zfPath = $this->_getVersionPath($path, $version);
258
  set_include_path(implode(PATH_SEPARATOR, array(
259
- $this->_zfPath,
260
- get_include_path(),
261
  )));
262
  return $this;
263
  }
264
-
265
  public function getZfPath() {
266
  return $this->_zfPath;
267
  }
268
-
269
  /**
270
  * Get or set the value of the "suppress not found warnings" flag
271
  *
@@ -274,12 +249,11 @@ class mail_bank_Zend_Loader_Autoloader {
274
  */
275
  public function suppressNotFoundWarnings($flag = null) {
276
  if (null === $flag) {
277
- return $this->_suppressNotFoundWarnings;
278
  }
279
  $this->_suppressNotFoundWarnings = (bool) $flag;
280
  return $this;
281
  }
282
-
283
  /**
284
  * Indicate whether or not this autoloader should be a fallback autoloader
285
  *
@@ -290,7 +264,6 @@ class mail_bank_Zend_Loader_Autoloader {
290
  $this->_fallbackAutoloader = (bool) $flag;
291
  return $this;
292
  }
293
-
294
  /**
295
  * Is this instance acting as a fallback autoloader?
296
  *
@@ -299,7 +272,6 @@ class mail_bank_Zend_Loader_Autoloader {
299
  public function isFallbackAutoloader() {
300
  return $this->_fallbackAutoloader;
301
  }
302
-
303
  /**
304
  * Get autoloaders to use when matching class
305
  *
@@ -316,43 +288,42 @@ class mail_bank_Zend_Loader_Autoloader {
316
 
317
  // Add concrete namespaced autoloaders
318
  foreach (array_keys($this->_namespaceAutoloaders) as $ns) {
319
- if ('' == $ns) {
320
- continue;
321
- }
322
- if (0 === strpos($class, $ns)) {
323
- if ((false === $namespace) || (strlen($ns) > strlen($namespace))) {
324
- $namespace = $ns;
325
- $autoloaders = $this->getNamespaceAutoloaders($ns);
326
- }
327
- }
328
  }
329
 
330
  // Add internal namespaced autoloader
331
  foreach ($this->getRegisteredNamespaces() as $ns) {
332
- if (0 === strpos($class, $ns)) {
333
- $namespace = $ns;
334
- $autoloaders[] = $this->_internalAutoloader;
335
- break;
336
- }
337
  }
338
 
339
  // Add non-namespaced autoloaders
340
  $autoloadersNonNamespace = $this->getNamespaceAutoloaders('');
341
  if (count($autoloadersNonNamespace)) {
342
- foreach ($autoloadersNonNamespace as $ns) {
343
- $autoloaders[] = $ns;
344
- }
345
- unset($autoloadersNonNamespace);
346
  }
347
 
348
  // Add fallback autoloader
349
  if (!$namespace && $this->isFallbackAutoloader()) {
350
- $autoloaders[] = $this->_internalAutoloader;
351
  }
352
 
353
  return $autoloaders;
354
  }
355
-
356
  /**
357
  * Add an autoloader to the beginning of the stack
358
  *
@@ -367,14 +338,13 @@ class mail_bank_Zend_Loader_Autoloader {
367
 
368
  $namespace = (array) $namespace;
369
  foreach ($namespace as $ns) {
370
- $autoloaders = $this->getNamespaceAutoloaders($ns);
371
- array_unshift($autoloaders, $callback);
372
- $this->_setNamespaceAutoloaders($autoloaders, $ns);
373
  }
374
 
375
  return $this;
376
  }
377
-
378
  /**
379
  * Append an autoloader to the autoloader stack
380
  *
@@ -389,14 +359,13 @@ class mail_bank_Zend_Loader_Autoloader {
389
 
390
  $namespace = (array) $namespace;
391
  foreach ($namespace as $ns) {
392
- $autoloaders = $this->getNamespaceAutoloaders($ns);
393
- array_push($autoloaders, $callback);
394
- $this->_setNamespaceAutoloaders($autoloaders, $ns);
395
  }
396
 
397
  return $this;
398
  }
399
-
400
  /**
401
  * Remove an autoloader from the autoloader stack
402
  *
@@ -406,32 +375,31 @@ class mail_bank_Zend_Loader_Autoloader {
406
  */
407
  public function removeAutoloader($callback, $namespace = null) {
408
  if (null === $namespace) {
409
- $autoloaders = $this->getAutoloaders();
410
- if (false !== ($index = array_search($callback, $autoloaders, true))) {
411
- unset($autoloaders[$index]);
412
- $this->setAutoloaders($autoloaders);
413
- }
414
-
415
- foreach ($this->_namespaceAutoloaders as $ns => $autoloaders) {
416
- if (false !== ($index = array_search($callback, $autoloaders, true))) {
417
- unset($autoloaders[$index]);
418
- $this->_setNamespaceAutoloaders($autoloaders, $ns);
419
- }
420
- }
421
  } else {
422
- $namespace = (array) $namespace;
423
- foreach ($namespace as $ns) {
424
- $autoloaders = $this->getNamespaceAutoloaders($ns);
425
- if (false !== ($index = array_search($callback, $autoloaders, true))) {
426
- unset($autoloaders[$index]);
427
- $this->_setNamespaceAutoloaders($autoloaders, $ns);
428
- }
429
- }
430
  }
431
 
432
  return $this;
433
  }
434
-
435
  /**
436
  * Constructor
437
  *
@@ -443,7 +411,6 @@ class mail_bank_Zend_Loader_Autoloader {
443
  spl_autoload_register(array(__CLASS__, 'autoload'));
444
  $this->_internalAutoloader = array($this, '_autoload');
445
  }
446
-
447
  /**
448
  * Internal autoloader implementation
449
  *
@@ -453,17 +420,16 @@ class mail_bank_Zend_Loader_Autoloader {
453
  protected function _autoload($class) {
454
  $callback = $this->getDefaultAutoloader();
455
  try {
456
- if ($this->suppressNotFoundWarnings()) {
457
- @call_user_func($callback, $class);
458
- } else {
459
- call_user_func($callback, $class);
460
- }
461
- return $class;
462
  } catch (mail_bank_Zend_Exception $e) {
463
- return false;
464
  }
465
  }
466
-
467
  /**
468
  * Set autoloaders for a specific namespace
469
  *
@@ -476,7 +442,6 @@ class mail_bank_Zend_Loader_Autoloader {
476
  $this->_namespaceAutoloaders[$namespace] = $autoloaders;
477
  return $this;
478
  }
479
-
480
  /**
481
  * Retrieve the filesystem path for the requested ZF version
482
  *
@@ -488,18 +453,17 @@ class mail_bank_Zend_Loader_Autoloader {
488
  $type = $this->_getVersionType($version);
489
 
490
  if ($type == 'latest') {
491
- $version = 'latest';
492
  }
493
 
494
  $availableVersions = $this->_getAvailableVersions($path, $version);
495
  if (empty($availableVersions)) {
496
- throw new mail_bank_Zend_Loader_Exception('No valid ZF installations discovered');
497
  }
498
 
499
  $matchedVersion = array_pop($availableVersions);
500
  return $matchedVersion;
501
  }
502
-
503
  /**
504
  * Retrieve the ZF version type
505
  *
@@ -509,23 +473,22 @@ class mail_bank_Zend_Loader_Autoloader {
509
  */
510
  protected function _getVersionType($version) {
511
  if (strtolower($version) == 'latest') {
512
- return 'latest';
513
  }
514
 
515
  $parts = explode('.', $version);
516
  $count = count($parts);
517
  if (1 == $count) {
518
- return 'major';
519
  }
520
  if (2 == $count) {
521
- return 'minor';
522
  }
523
  if (3 < $count) {
524
- throw new mail_bank_Zend_Loader_Exception('Invalid version string provided');
525
  }
526
  return 'specific';
527
  }
528
-
529
  /**
530
  * Get available versions for the version type requested
531
  *
@@ -535,7 +498,7 @@ class mail_bank_Zend_Loader_Autoloader {
535
  */
536
  protected function _getAvailableVersions($path, $version) {
537
  if (!is_dir($path)) {
538
- throw new mail_bank_Zend_Loader_Exception('Invalid ZF path provided');
539
  }
540
 
541
  $path = rtrim($path, '/');
@@ -544,21 +507,20 @@ class mail_bank_Zend_Loader_Autoloader {
544
  $versions = array();
545
  $dirs = glob("$path/*", GLOB_ONLYDIR);
546
  foreach ((array) $dirs as $dir) {
547
- $dirName = substr($dir, strlen($path) + 1);
548
- if (!preg_match('/^(?:ZendFramework-)?(\d+\.\d+\.\d+((a|b|pl|pr|p|rc)\d+)?)(?:-minimal)?$/i', $dirName, $matches)) {
549
- continue;
550
- }
551
 
552
- $matchedVersion = $matches[1];
553
 
554
- if (('latest' == $version) || ((strlen($matchedVersion) >= $versionLen) && (0 === strpos($matchedVersion, $version)))
555
- ) {
556
- $versions[$matchedVersion] = $dir . '/library';
557
- }
558
  }
559
 
560
  uksort($versions, 'version_compare');
561
  return $versions;
562
  }
563
-
564
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
25
  /** Zend_Loader */
26
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/loader.php'))
27
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/loader.php';
 
28
  /**
29
  * Autoloader stack and namespace autoloader
30
  * @uses mail_bank_Zend_Loader_Autoloader
34
  * @license http://framework.zend.com/license/new-bsd New BSD License
35
  */
36
  class mail_bank_Zend_Loader_Autoloader {
 
37
  /**
38
  * @var mail_bank_Zend_Loader_Autoloader Singleton instance
39
  */
40
  protected static $_instance;
 
41
  /**
42
  * @var array Concrete autoloader callback implementations
43
  */
44
  protected $_autoloaders = array();
 
45
  /**
46
  * @var array Default autoloader callback
47
  */
48
  protected $_defaultAutoloader = array('mail_bank_Zend_Loader', 'loadClass');
 
49
  /**
50
  * @var bool Whether or not to act as a fallback autoloader
51
  */
52
  protected $_fallbackAutoloader = false;
 
53
  /**
54
  * @var array Callback for internal autoloader implementation
55
  */
56
  protected $_internalAutoloader;
 
57
  /**
58
  * @var array Supported namespaces 'Zend' and 'ZendX' by default.
59
  */
61
  'mail_bank_Zend_' => true,
62
  'ZendX_' => true,
63
  );
 
64
  /**
65
  * @var array Namespace-specific autoloaders
66
  */
67
  protected $_namespaceAutoloaders = array();
 
68
  /**
69
  * @var bool Whether or not to suppress file not found warnings
70
  */
71
  protected $_suppressNotFoundWarnings = false;
 
72
  /**
73
  * @var null|string
74
  */
75
  protected $_zfPath;
 
76
  /**
77
  * Retrieve singleton instance
78
  *
80
  */
81
  public static function getInstance() {
82
  if (null === self::$_instance) {
83
+ self::$_instance = new self();
84
  }
85
  return self::$_instance;
86
  }
 
87
  /**
88
  * Reset the singleton instance
89
  *
92
  public static function resetInstance() {
93
  self::$_instance = null;
94
  }
 
95
  /**
96
  * Autoload a class
97
  *
102
  $self = self::getInstance();
103
 
104
  foreach ($self->getClassAutoloaders($class) as $autoloader) {
105
+ if ($autoloader instanceof mail_bank_Zend_Loader_Autoloader_Interface) {
106
+ if ($autoloader->autoload($class)) {
107
+ return true;
108
+ }
109
+ } elseif (is_array($autoloader)) {
110
+ if (call_user_func($autoloader, $class)) {
111
+ return true;
112
+ }
113
+ } elseif (is_string($autoloader) || is_callable($autoloader)) {
114
+ if ($autoloader($class)) {
115
+ return true;
116
+ }
117
+ }
118
  }
119
  return false;
120
  }
 
121
  /**
122
  * Set the default autoloader implementation
123
  *
126
  */
127
  public function setDefaultAutoloader($callback) {
128
  if (!is_callable($callback)) {
129
+ throw new mail_bank_Zend_Loader_Exception('Invalid callback specified for default autoloader');
130
  }
131
 
132
  $this->_defaultAutoloader = $callback;
133
  return $this;
134
  }
 
135
  /**
136
  * Retrieve the default autoloader callback
137
  *
140
  public function getDefaultAutoloader() {
141
  return $this->_defaultAutoloader;
142
  }
 
143
  /**
144
  * Set several autoloader callbacks at once
145
  *
150
  $this->_autoloaders = $autoloaders;
151
  return $this;
152
  }
 
153
  /**
154
  * Get attached autoloader implementations
155
  *
158
  public function getAutoloaders() {
159
  return $this->_autoloaders;
160
  }
 
161
  /**
162
  * Return all autoloaders for a given namespace
163
  *
167
  public function getNamespaceAutoloaders($namespace) {
168
  $namespace = (string) $namespace;
169
  if (!array_key_exists($namespace, $this->_namespaceAutoloaders)) {
170
+ return array();
171
  }
172
  return $this->_namespaceAutoloaders[$namespace];
173
  }
 
174
  /**
175
  * Register a namespace to autoload
176
  *
179
  */
180
  public function registerNamespace($namespace) {
181
  if (is_string($namespace)) {
182
+ $namespace = (array) $namespace;
183
  } elseif (!is_array($namespace)) {
184
+ throw new mail_bank_Zend_Loader_Exception('Invalid namespace provided');
185
  }
186
 
187
  foreach ($namespace as $ns) {
188
+ if (!isset($this->_namespaces[$ns])) {
189
+ $this->_namespaces[$ns] = true;
190
+ }
191
  }
192
  return $this;
193
  }
 
194
  /**
195
  * Unload a registered autoload namespace
196
  *
199
  */
200
  public function unregisterNamespace($namespace) {
201
  if (is_string($namespace)) {
202
+ $namespace = (array) $namespace;
203
  } elseif (!is_array($namespace)) {
204
+ throw new mail_bank_Zend_Loader_Exception('Invalid namespace provided');
205
  }
206
 
207
  foreach ($namespace as $ns) {
208
+ if (isset($this->_namespaces[$ns])) {
209
+ unset($this->_namespaces[$ns]);
210
+ }
211
  }
212
  return $this;
213
  }
 
214
  /**
215
  * Get a list of registered autoload namespaces
216
  *
219
  public function getRegisteredNamespaces() {
220
  return array_keys($this->_namespaces);
221
  }
 
222
  public function setZfPath($spec, $version = 'latest') {
223
  $path = $spec;
224
  if (is_array($spec)) {
225
+ if (!isset($spec['path'])) {
226
+ throw new mail_bank_Zend_Loader_Exception('No path specified for ZF');
227
+ }
228
+ $path = $spec['path'];
229
+ if (isset($spec['version'])) {
230
+ $version = $spec['version'];
231
+ }
232
  }
233
 
234
  $this->_zfPath = $this->_getVersionPath($path, $version);
235
  set_include_path(implode(PATH_SEPARATOR, array(
236
+ $this->_zfPath,
237
+ get_include_path(),
238
  )));
239
  return $this;
240
  }
 
241
  public function getZfPath() {
242
  return $this->_zfPath;
243
  }
 
244
  /**
245
  * Get or set the value of the "suppress not found warnings" flag
246
  *
249
  */
250
  public function suppressNotFoundWarnings($flag = null) {
251
  if (null === $flag) {
252
+ return $this->_suppressNotFoundWarnings;
253
  }
254
  $this->_suppressNotFoundWarnings = (bool) $flag;
255
  return $this;
256
  }
 
257
  /**
258
  * Indicate whether or not this autoloader should be a fallback autoloader
259
  *
264
  $this->_fallbackAutoloader = (bool) $flag;
265
  return $this;
266
  }
 
267
  /**
268
  * Is this instance acting as a fallback autoloader?
269
  *
272
  public function isFallbackAutoloader() {
273
  return $this->_fallbackAutoloader;
274
  }
 
275
  /**
276
  * Get autoloaders to use when matching class
277
  *
288
 
289
  // Add concrete namespaced autoloaders
290
  foreach (array_keys($this->_namespaceAutoloaders) as $ns) {
291
+ if ('' == $ns) {
292
+ continue;
293
+ }
294
+ if (0 === strpos($class, $ns)) {
295
+ if ((false === $namespace) || (strlen($ns) > strlen($namespace))) {
296
+ $namespace = $ns;
297
+ $autoloaders = $this->getNamespaceAutoloaders($ns);
298
+ }
299
+ }
300
  }
301
 
302
  // Add internal namespaced autoloader
303
  foreach ($this->getRegisteredNamespaces() as $ns) {
304
+ if (0 === strpos($class, $ns)) {
305
+ $namespace = $ns;
306
+ $autoloaders[] = $this->_internalAutoloader;
307
+ break;
308
+ }
309
  }
310
 
311
  // Add non-namespaced autoloaders
312
  $autoloadersNonNamespace = $this->getNamespaceAutoloaders('');
313
  if (count($autoloadersNonNamespace)) {
314
+ foreach ($autoloadersNonNamespace as $ns) {
315
+ $autoloaders[] = $ns;
316
+ }
317
+ unset($autoloadersNonNamespace);
318
  }
319
 
320
  // Add fallback autoloader
321
  if (!$namespace && $this->isFallbackAutoloader()) {
322
+ $autoloaders[] = $this->_internalAutoloader;
323
  }
324
 
325
  return $autoloaders;
326
  }
 
327
  /**
328
  * Add an autoloader to the beginning of the stack
329
  *
338
 
339
  $namespace = (array) $namespace;
340
  foreach ($namespace as $ns) {
341
+ $autoloaders = $this->getNamespaceAutoloaders($ns);
342
+ array_unshift($autoloaders, $callback);
343
+ $this->_setNamespaceAutoloaders($autoloaders, $ns);
344
  }
345
 
346
  return $this;
347
  }
 
348
  /**
349
  * Append an autoloader to the autoloader stack
350
  *
359
 
360
  $namespace = (array) $namespace;
361
  foreach ($namespace as $ns) {
362
+ $autoloaders = $this->getNamespaceAutoloaders($ns);
363
+ array_push($autoloaders, $callback);
364
+ $this->_setNamespaceAutoloaders($autoloaders, $ns);
365
  }
366
 
367
  return $this;
368
  }
 
369
  /**
370
  * Remove an autoloader from the autoloader stack
371
  *
375
  */
376
  public function removeAutoloader($callback, $namespace = null) {
377
  if (null === $namespace) {
378
+ $autoloaders = $this->getAutoloaders();
379
+ if (false !== ($index = array_search($callback, $autoloaders, true))) {
380
+ unset($autoloaders[$index]);
381
+ $this->setAutoloaders($autoloaders);
382
+ }
383
+
384
+ foreach ($this->_namespaceAutoloaders as $ns => $autoloaders) {
385
+ if (false !== ($index = array_search($callback, $autoloaders, true))) {
386
+ unset($autoloaders[$index]);
387
+ $this->_setNamespaceAutoloaders($autoloaders, $ns);
388
+ }
389
+ }
390
  } else {
391
+ $namespace = (array) $namespace;
392
+ foreach ($namespace as $ns) {
393
+ $autoloaders = $this->getNamespaceAutoloaders($ns);
394
+ if (false !== ($index = array_search($callback, $autoloaders, true))) {
395
+ unset($autoloaders[$index]);
396
+ $this->_setNamespaceAutoloaders($autoloaders, $ns);
397
+ }
398
+ }
399
  }
400
 
401
  return $this;
402
  }
 
403
  /**
404
  * Constructor
405
  *
411
  spl_autoload_register(array(__CLASS__, 'autoload'));
412
  $this->_internalAutoloader = array($this, '_autoload');
413
  }
 
414
  /**
415
  * Internal autoloader implementation
416
  *
420
  protected function _autoload($class) {
421
  $callback = $this->getDefaultAutoloader();
422
  try {
423
+ if ($this->suppressNotFoundWarnings()) {
424
+ @call_user_func($callback, $class);
425
+ } else {
426
+ call_user_func($callback, $class);
427
+ }
428
+ return $class;
429
  } catch (mail_bank_Zend_Exception $e) {
430
+ return false;
431
  }
432
  }
 
433
  /**
434
  * Set autoloaders for a specific namespace
435
  *
442
  $this->_namespaceAutoloaders[$namespace] = $autoloaders;
443
  return $this;
444
  }
 
445
  /**
446
  * Retrieve the filesystem path for the requested ZF version
447
  *
453
  $type = $this->_getVersionType($version);
454
 
455
  if ($type == 'latest') {
456
+ $version = 'latest';
457
  }
458
 
459
  $availableVersions = $this->_getAvailableVersions($path, $version);
460
  if (empty($availableVersions)) {
461
+ throw new mail_bank_Zend_Loader_Exception('No valid ZF installations discovered');
462
  }
463
 
464
  $matchedVersion = array_pop($availableVersions);
465
  return $matchedVersion;
466
  }
 
467
  /**
468
  * Retrieve the ZF version type
469
  *
473
  */
474
  protected function _getVersionType($version) {
475
  if (strtolower($version) == 'latest') {
476
+ return 'latest';
477
  }
478
 
479
  $parts = explode('.', $version);
480
  $count = count($parts);
481
  if (1 == $count) {
482
+ return 'major';
483
  }
484
  if (2 == $count) {
485
+ return 'minor';
486
  }
487
  if (3 < $count) {
488
+ throw new mail_bank_Zend_Loader_Exception('Invalid version string provided');
489
  }
490
  return 'specific';
491
  }
 
492
  /**
493
  * Get available versions for the version type requested
494
  *
498
  */
499
  protected function _getAvailableVersions($path, $version) {
500
  if (!is_dir($path)) {
501
+ throw new mail_bank_Zend_Loader_Exception('Invalid ZF path provided');
502
  }
503
 
504
  $path = rtrim($path, '/');
507
  $versions = array();
508
  $dirs = glob("$path/*", GLOB_ONLYDIR);
509
  foreach ((array) $dirs as $dir) {
510
+ $dirName = substr($dir, strlen($path) + 1);
511
+ if (!preg_match('/^(?:ZendFramework-)?(\d+\.\d+\.\d+((a|b|pl|pr|p|rc)\d+)?)(?:-minimal)?$/i', $dirName, $matches)) {
512
+ continue;
513
+ }
514
 
515
+ $matchedVersion = $matches[1];
516
 
517
+ if (('latest' == $version) || ((strlen($matchedVersion) >= $versionLen) && (0 === strpos($matchedVersion, $version)))
518
+ ) {
519
+ $versions[$matchedVersion] = $dir . '/library';
520
+ }
521
  }
522
 
523
  uksort($versions, 'version_compare');
524
  return $versions;
525
  }
526
+ }
 
lib/zend/mail.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -45,7 +44,6 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mime/message.php'))
45
  */
46
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mime/part.php'))
47
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/mime/part.php';
48
-
49
  /**
50
  * Class for sending an email.
51
  *
@@ -58,109 +56,91 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
58
  /* * #@+
59
  * @access protected
60
  */
61
-
62
  /**
63
  * @var mail_bank_Zend_Mail_Transport_Abstract
64
  * @static
65
  */
66
  protected static $_defaultTransport = null;
67
-
68
  /**
69
  * @var array
70
  * @static
71
  */
72
  protected static $_defaultFrom;
73
-
74
  /**
75
  * @var array
76
  * @static
77
  */
78
  protected static $_defaultReplyTo;
79
-
80
  /**
81
  * Mail character set
82
  * @var string
83
  */
84
  protected $_charset = 'iso-8859-1';
85
-
86
  /**
87
  * Mail headers
88
  * @var array
89
  */
90
  protected $_headers = array();
91
-
92
  /**
93
  * Encoding of Mail headers
94
  * @var string
95
  */
96
  protected $_headerEncoding = mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE;
97
-
98
  /**
99
  * From: address
100
  * @var string
101
  */
102
  protected $_from = null;
103
-
104
  /**
105
  * To: addresses
106
  * @var array
107
  */
108
  protected $_to = array();
109
-
110
  /**
111
  * Array of all recipients
112
  * @var array
113
  */
114
  protected $_recipients = array();
115
-
116
  /**
117
  * Reply-To header
118
  * @var string
119
  */
120
  protected $_replyTo = null;
121
-
122
  /**
123
  * Return-Path header
124
  * @var string
125
  */
126
  protected $_returnPath = null;
127
-
128
  /**
129
  * Subject: header
130
  * @var string
131
  */
132
  protected $_subject = null;
133
-
134
  /**
135
  * Date: header
136
  * @var string
137
  */
138
  protected $_date = null;
139
-
140
  /**
141
  * Message-ID: header
142
  * @var string
143
  */
144
  protected $_messageId = null;
145
-
146
  /**
147
  * text/plain MIME part
148
  * @var false|mail_bank_Zend_Mime_Part
149
  */
150
  protected $_bodyText = false;
151
-
152
  /**
153
  * text/html MIME part
154
  * @var false|Zend_Mime_Part
155
  */
156
  protected $_bodyHtml = false;
157
-
158
  /**
159
  * MIME boundary string
160
  * @var string
161
  */
162
  protected $_mimeBoundary = null;
163
-
164
  /**
165
  * Content type of the message
166
  * @var string
@@ -168,13 +148,11 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
168
  protected $_type = null;
169
 
170
  /* * #@- */
171
-
172
  /**
173
  * Flag: whether or not email has attachments
174
  * @var boolean
175
  */
176
  public $hasAttachments = false;
177
-
178
  /**
179
  * Sets the default mail transport for all following uses of
180
  * mail_bank_Zend_Mail::send();
@@ -186,7 +164,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
186
  public static function setDefaultTransport(mail_bank_Zend_Mail_Transport_Abstract $transport) {
187
  self::$_defaultTransport = $transport;
188
  }
189
-
190
  /**
191
  * Gets the default mail transport for all following uses of
192
  * unittests
@@ -197,14 +174,12 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
197
  public static function getDefaultTransport() {
198
  return self::$_defaultTransport;
199
  }
200
-
201
  /**
202
  * Clear the default transport property
203
  */
204
  public static function clearDefaultTransport() {
205
  self::$_defaultTransport = null;
206
  }
207
-
208
  /**
209
  * Public constructor
210
  *
@@ -212,10 +187,9 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
212
  */
213
  public function __construct($charset = null) {
214
  if ($charset != null) {
215
- $this->_charset = $charset;
216
  }
217
  }
218
-
219
  /**
220
  * Return charset string
221
  *
@@ -224,7 +198,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
224
  public function getCharset() {
225
  return $this->_charset;
226
  }
227
-
228
  /**
229
  * Set content type
230
  *
@@ -236,24 +209,23 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
236
  */
237
  public function setType($type) {
238
  $allowed = array(
239
- mail_bank_Zend_Mime::MULTIPART_ALTERNATIVE,
240
- mail_bank_Zend_Mime::MULTIPART_MIXED,
241
- mail_bank_Zend_Mime::MULTIPART_RELATED,
242
  );
243
  if (!in_array($type, $allowed)) {
244
- /**
245
- * @see mail_bank_Zend_Mail_Exception
246
- */
247
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
248
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
249
 
250
- throw new mail_bank_Zend_Mail_Exception('Invalid content type "' . $type . '"');
251
  }
252
 
253
  $this->_type = $type;
254
  return $this;
255
  }
256
-
257
  /**
258
  * Get content type of the message
259
  *
@@ -262,7 +234,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
262
  public function getType() {
263
  return $this->_type;
264
  }
265
-
266
  /**
267
  * Set an arbitrary mime boundary for the message
268
  *
@@ -276,7 +247,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
276
 
277
  return $this;
278
  }
279
-
280
  /**
281
  * Return the boundary string used for the message
282
  *
@@ -285,7 +255,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
285
  public function getMimeBoundary() {
286
  return $this->_mimeBoundary;
287
  }
288
-
289
  /**
290
  * Return encoding of mail headers
291
  *
@@ -295,7 +264,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
295
  public function getEncodingOfHeaders() {
296
  return $this->getHeaderEncoding();
297
  }
298
-
299
  /**
300
  * Return the encoding of mail headers
301
  *
@@ -306,7 +274,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
306
  public function getHeaderEncoding() {
307
  return $this->_headerEncoding;
308
  }
309
-
310
  /**
311
  * Set the encoding of mail headers
312
  *
@@ -317,7 +284,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
317
  public function setEncodingOfHeaders($encoding) {
318
  return $this->setHeaderEncoding($encoding);
319
  }
320
-
321
  /**
322
  * Set the encoding of mail headers
323
  *
@@ -328,23 +294,22 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
328
  */
329
  public function setHeaderEncoding($encoding) {
330
  $allowed = array(
331
- mail_bank_Zend_Mime::ENCODING_BASE64,
332
- mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE
333
  );
334
  if (!in_array($encoding, $allowed)) {
335
- /**
336
- * @see mail_bank_Zend_Mail_Exception
337
- */
338
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
339
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
340
 
341
- throw new mail_bank_Zend_Mail_Exception('Invalid encoding "' . $encoding . '"');
342
  }
343
  $this->_headerEncoding = $encoding;
344
 
345
  return $this;
346
  }
347
-
348
  /**
349
  * Sets the text body for the message.
350
  *
@@ -355,7 +320,7 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
355
  */
356
  public function setBodyText($txt, $charset = null, $encoding = mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE) {
357
  if ($charset === null) {
358
- $charset = $this->_charset;
359
  }
360
 
361
  $mp = new mail_bank_Zend_Mime_Part($txt);
@@ -368,7 +333,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
368
 
369
  return $this;
370
  }
371
-
372
  /**
373
  * Return text body mail_bank_Zend_Mime_Part or string
374
  *
@@ -378,13 +342,12 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
378
  */
379
  public function getBodyText($textOnly = false) {
380
  if ($textOnly && $this->_bodyText) {
381
- $body = $this->_bodyText;
382
- return $body->getContent();
383
  }
384
 
385
  return $this->_bodyText;
386
  }
387
-
388
  /**
389
  * Sets the HTML body for the message
390
  *
@@ -395,7 +358,7 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
395
  */
396
  public function setBodyHtml($html, $charset = null, $encoding = mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE) {
397
  if ($charset === null) {
398
- $charset = $this->_charset;
399
  }
400
 
401
  $mp = new mail_bank_Zend_Mime_Part($html);
@@ -408,7 +371,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
408
 
409
  return $this;
410
  }
411
-
412
  /**
413
  * Return mail_bank_Zend_Mime_Part representing body HTML
414
  *
@@ -417,13 +379,12 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
417
  */
418
  public function getBodyHtml($htmlOnly = false) {
419
  if ($htmlOnly && $this->_bodyHtml) {
420
- $body = $this->_bodyHtml;
421
- return $body->getContent();
422
  }
423
 
424
  return $this->_bodyHtml;
425
  }
426
-
427
  /**
428
  * Adds an existing attachment to the mail message
429
  *
@@ -436,7 +397,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
436
 
437
  return $this;
438
  }
439
-
440
  /**
441
  * Creates a mail_bank_Zend_Mime_Part attachment
442
  *
@@ -462,7 +422,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
462
 
463
  return $mp;
464
  }
465
-
466
  /**
467
  * Return a count of message parts
468
  *
@@ -471,7 +430,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
471
  public function getPartCount() {
472
  return count($this->_parts);
473
  }
474
-
475
  /**
476
  * Encode header fields
477
  *
@@ -483,16 +441,15 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
483
  */
484
  protected function _encodeHeader($value) {
485
  if (mail_bank_Zend_Mime::isPrintable($value) === false) {
486
- if ($this->getHeaderEncoding() === mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE) {
487
- $value = mail_bank_Zend_Mime::encodeQuotedPrintableHeader($value, $this->getCharset(), mail_bank_Zend_Mime::LINELENGTH, mail_bank_Zend_Mime::LINEEND);
488
- } else {
489
- $value = mail_bank_Zend_Mime::encodeBase64Header($value, $this->getCharset(), mail_bank_Zend_Mime::LINELENGTH, mail_bank_Zend_Mime::LINEEND);
490
- }
491
  }
492
 
493
  return $value;
494
  }
495
-
496
  /**
497
  * Add a header to the message
498
  *
@@ -505,16 +462,15 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
505
  */
506
  protected function _storeHeader($headerName, $value, $append = false) {
507
  if (isset($this->_headers[$headerName])) {
508
- $this->_headers[$headerName][] = $value;
509
  } else {
510
- $this->_headers[$headerName] = array($value);
511
  }
512
 
513
  if ($append) {
514
- $this->_headers[$headerName]['append'] = true;
515
  }
516
  }
517
-
518
  /**
519
  * Clear header from the message
520
  *
@@ -524,7 +480,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
524
  protected function _clearHeader($headerName) {
525
  $this->clearHeader($headerName);
526
  }
527
-
528
  /**
529
  * Helper function for adding a recipient and the corresponding header
530
  *
@@ -539,7 +494,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
539
  $this->_recipients[$email] = 1;
540
  $this->_storeHeader($headerName, $this->_formatAddress($email, $name), true);
541
  }
542
-
543
  /**
544
  * Adds To-header and recipient, $email can be an array, or a single string
545
  * address
@@ -550,17 +504,16 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
550
  */
551
  public function addTo($email, $name = '') {
552
  if (!is_array($email)) {
553
- $email = array($name => $email);
554
  }
555
 
556
  foreach ($email as $n => $recipient) {
557
- $this->_addRecipientAndHeader('To', $recipient, is_int($n) ? '' : $n);
558
- $this->_to[] = $recipient;
559
  }
560
 
561
  return $this;
562
  }
563
-
564
  /**
565
  * Adds Cc-header and recipient, $email can be an array, or a single string
566
  * address
@@ -571,16 +524,15 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
571
  */
572
  public function addCc($email, $name = '') {
573
  if (!is_array($email)) {
574
- $email = array($name => $email);
575
  }
576
 
577
  foreach ($email as $n => $recipient) {
578
- $this->_addRecipientAndHeader('Cc', $recipient, is_int($n) ? '' : $n);
579
  }
580
 
581
  return $this;
582
  }
583
-
584
  /**
585
  * Adds Bcc recipient, $email can be an array, or a single string address
586
  *
@@ -589,16 +541,15 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
589
  */
590
  public function addBcc($email) {
591
  if (!is_array($email)) {
592
- $email = array($email);
593
  }
594
 
595
  foreach ($email as $recipient) {
596
- $this->_addRecipientAndHeader('Bcc', $recipient, '');
597
  }
598
 
599
  return $this;
600
  }
601
-
602
  /**
603
  * Return list of recipient email addresses
604
  *
@@ -607,7 +558,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
607
  public function getRecipients() {
608
  return array_keys($this->_recipients);
609
  }
610
-
611
  /**
612
  * Clear header from the message
613
  *
@@ -616,11 +566,10 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
616
  */
617
  public function clearHeader($headerName) {
618
  if (isset($this->_headers[$headerName])) {
619
- unset($this->_headers[$headerName]);
620
  }
621
  return $this;
622
  }
623
-
624
  /**
625
  * Clears list of recipient email addresses
626
  *
@@ -636,7 +585,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
636
 
637
  return $this;
638
  }
639
-
640
  /**
641
  * Sets From-header and sender of the message
642
  *
@@ -647,13 +595,13 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
647
  */
648
  public function setFrom($email, $name = null) {
649
  if (null !== $this->_from) {
650
- /**
651
- * @see mail_bank_Zend_Mail_Exception
652
- */
653
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
654
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
655
 
656
- throw new mail_bank_Zend_Mail_Exception('From Header set twice');
657
  }
658
 
659
  $email = $this->_filterEmail($email);
@@ -663,7 +611,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
663
 
664
  return $this;
665
  }
666
-
667
  /**
668
  * Set Reply-To Header
669
  *
@@ -674,13 +621,13 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
674
  */
675
  public function setReplyTo($email, $name = null) {
676
  if (null !== $this->_replyTo) {
677
- /**
678
- * @see mail_bank_Zend_Mail_Exception
679
- */
680
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
681
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
682
 
683
- throw new mail_bank_Zend_Mail_Exception('Reply-To Header set twice');
684
  }
685
 
686
  $email = $this->_filterEmail($email);
@@ -690,7 +637,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
690
 
691
  return $this;
692
  }
693
-
694
  /**
695
  * Returns the sender of the mail
696
  *
@@ -699,7 +645,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
699
  public function getFrom() {
700
  return $this->_from;
701
  }
702
-
703
  /**
704
  * Returns the current Reply-To address of the message
705
  *
@@ -708,7 +653,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
708
  public function getReplyTo() {
709
  return $this->_replyTo;
710
  }
711
-
712
  /**
713
  * Clears the sender from the mail
714
  *
@@ -720,7 +664,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
720
 
721
  return $this;
722
  }
723
-
724
  /**
725
  * Clears the current Reply-To address from the message
726
  *
@@ -732,7 +675,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
732
 
733
  return $this;
734
  }
735
-
736
  /**
737
  * Sets Default From-email and name of the message
738
  *
@@ -743,7 +685,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
743
  public static function setDefaultFrom($email, $name = null) {
744
  self::$_defaultFrom = array('email' => $email, 'name' => $name);
745
  }
746
-
747
  /**
748
  * Returns the default sender of the mail
749
  *
@@ -752,7 +693,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
752
  public static function getDefaultFrom() {
753
  return self::$_defaultFrom;
754
  }
755
-
756
  /**
757
  * Clears the default sender from the mail
758
  *
@@ -761,7 +701,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
761
  public static function clearDefaultFrom() {
762
  self::$_defaultFrom = null;
763
  }
764
-
765
  /**
766
  * Sets From-name and -email based on the defaults
767
  *
@@ -771,18 +710,17 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
771
  public function setFromToDefaultFrom() {
772
  $from = self::getDefaultFrom();
773
  if ($from === null) {
774
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
775
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
776
 
777
- throw new mail_bank_Zend_Mail_Exception(
778
- 'No default From Address set to use');
779
  }
780
 
781
  $this->setFrom($from['email'], $from['name']);
782
 
783
  return $this;
784
  }
785
-
786
  /**
787
  * Sets Default ReplyTo-address and -name of the message
788
  *
@@ -793,7 +731,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
793
  public static function setDefaultReplyTo($email, $name = null) {
794
  self::$_defaultReplyTo = array('email' => $email, 'name' => $name);
795
  }
796
-
797
  /**
798
  * Returns the default Reply-To Address and Name of the mail
799
  *
@@ -802,7 +739,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
802
  public static function getDefaultReplyTo() {
803
  return self::$_defaultReplyTo;
804
  }
805
-
806
  /**
807
  * Clears the default ReplyTo-address and -name from the mail
808
  *
@@ -811,7 +747,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
811
  public static function clearDefaultReplyTo() {
812
  self::$_defaultReplyTo = null;
813
  }
814
-
815
  /**
816
  * Sets ReplyTo-name and -email based on the defaults
817
  *
@@ -821,18 +756,17 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
821
  public function setReplyToFromDefault() {
822
  $replyTo = self::getDefaultReplyTo();
823
  if ($replyTo === null) {
824
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
825
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
826
 
827
- throw new mail_bank_Zend_Mail_Exception(
828
- 'No default Reply-To Address set to use');
829
  }
830
 
831
  $this->setReplyTo($replyTo['email'], $replyTo['name']);
832
 
833
  return $this;
834
  }
835
-
836
  /**
837
  * Sets the Return-Path header of the message
838
  *
@@ -842,21 +776,20 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
842
  */
843
  public function setReturnPath($email) {
844
  if ($this->_returnPath === null) {
845
- $email = $this->_filterEmail($email);
846
- $this->_returnPath = $email;
847
- $this->_storeHeader('Return-Path', $email, false);
848
  } else {
849
- /**
850
- * @see mail_bank_Zend_Mail_Exception
851
- */
852
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
853
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
854
 
855
- throw new mail_bank_Zend_Mail_Exception('Return-Path Header set twice');
856
  }
857
  return $this;
858
  }
859
-
860
  /**
861
  * Returns the current Return-Path address of the message
862
  *
@@ -866,12 +799,11 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
866
  */
867
  public function getReturnPath() {
868
  if (null !== $this->_returnPath) {
869
- return $this->_returnPath;
870
  }
871
 
872
  return $this->_from;
873
  }
874
-
875
  /**
876
  * Clears the current Return-Path address from the message
877
  *
@@ -883,7 +815,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
883
 
884
  return $this;
885
  }
886
-
887
  /**
888
  * Sets the subject of the message
889
  *
@@ -893,21 +824,20 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
893
  */
894
  public function setSubject($subject) {
895
  if ($this->_subject === null) {
896
- $subject = $this->_filterOther($subject);
897
- $this->_subject = $this->_encodeHeader($subject);
898
- $this->_storeHeader('Subject', $this->_subject);
899
  } else {
900
- /**
901
- * @see mail_bank_Zend_Mail_Exception
902
- */
903
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
904
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
905
 
906
- throw new mail_bank_Zend_Mail_Exception('Subject set twice');
907
  }
908
  return $this;
909
  }
910
-
911
  /**
912
  * Returns the encoded subject of the message
913
  *
@@ -916,7 +846,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
916
  public function getSubject() {
917
  return $this->_subject;
918
  }
919
-
920
  /**
921
  * Clears the encoded subject from the message
922
  *
@@ -928,7 +857,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
928
 
929
  return $this;
930
  }
931
-
932
  /**
933
  * Sets Date-header
934
  *
@@ -939,51 +867,50 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
939
  */
940
  public function setDate($date = null) {
941
  if ($this->_date === null) {
942
- if ($date === null) {
943
- $date = date('r');
944
- } else if (is_int($date)) {
945
- $date = date('r', $date);
946
- } else if (is_string($date)) {
947
- $date = strtotime($date);
948
- if ($date === false || $date < 0) {
949
- /**
950
- * @see mail_bank_Zend_Mail_Exception
951
- */
952
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
953
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
954
-
955
- throw new mail_bank_Zend_Mail_Exception('String representations of Date Header must be ' .
956
- 'strtotime()-compatible');
957
- }
958
- $date = date('r', $date);
959
- }
960
- else if ($date instanceof mail_bank_Zend_Date) {
961
- $date = $date->get(mail_bank_Zend_Date::RFC_2822);
962
- } else {
963
- /**
964
- * @see mail_bank_Zend_Mail_Exception
965
- */
966
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
967
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
968
-
969
- throw new mail_bank_Zend_Mail_Exception(__METHOD__ . ' only accepts UNIX timestamps, Zend_Date objects, ' .
970
- ' and strtotime()-compatible strings');
971
- }
972
- $this->_date = $date;
973
- $this->_storeHeader('Date', $date);
974
  }
975
  else {
976
- /**
977
- * @see mail_bank_Zend_Mail_Exception
978
- */
979
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
980
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
981
 
982
- throw new mail_bank_Zend_Mail_Exception('Date Header set twice');
983
  }
984
  return $this;
985
  }
986
-
987
  /**
988
  * Returns the formatted date of the message
989
  *
@@ -992,7 +919,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
992
  public function getDate() {
993
  return $this->_date;
994
  }
995
-
996
  /**
997
  * Clears the formatted date from the message
998
  *
@@ -1004,7 +930,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1004
 
1005
  return $this;
1006
  }
1007
-
1008
  /**
1009
  * Sets the Message-ID of the message
1010
  *
@@ -1018,28 +943,27 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1018
  */
1019
  public function setMessageId($id = true) {
1020
  if ($id === null || $id === false) {
1021
- return $this;
1022
  } elseif ($id === true) {
1023
- $id = $this->createMessageId();
1024
  }
1025
 
1026
  if ($this->_messageId === null) {
1027
- $id = $this->_filterOther($id);
1028
- $this->_messageId = $id;
1029
- $this->_storeHeader('Message-Id', '<' . $this->_messageId . '>');
1030
  } else {
1031
- /**
1032
- * @see mail_bank_Zend_Mail_Exception
1033
- */
1034
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
1035
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
1036
 
1037
- throw new mail_bank_Zend_Mail_Exception('Message-ID set twice');
1038
  }
1039
 
1040
  return $this;
1041
  }
1042
-
1043
  /**
1044
  * Returns the Message-ID of the message
1045
  *
@@ -1048,7 +972,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1048
  public function getMessageId() {
1049
  return $this->_messageId;
1050
  }
1051
-
1052
  /**
1053
  * Clears the Message-ID from the message
1054
  *
@@ -1060,7 +983,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1060
 
1061
  return $this;
1062
  }
1063
-
1064
  /**
1065
  * Creates the Message-ID
1066
  *
@@ -1070,30 +992,29 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1070
  $time = time();
1071
 
1072
  if ($this->_from !== null) {
1073
- $user = $this->_from;
1074
  } elseif (isset($_SERVER['REMOTE_ADDR'])) {
1075
- $user = $_SERVER['REMOTE_ADDR'];
1076
  } else {
1077
- $user = getmypid();
1078
  }
1079
 
1080
  $rand = mt_rand();
1081
 
1082
  if ($this->_recipients !== array()) {
1083
- $recipient = array_rand($this->_recipients);
1084
  } else {
1085
- $recipient = 'unknown';
1086
  }
1087
 
1088
  if (isset($_SERVER["SERVER_NAME"])) {
1089
- $hostName = $_SERVER["SERVER_NAME"];
1090
  } else {
1091
- $hostName = php_uname('n');
1092
  }
1093
 
1094
  return sha1($time . $user . $rand . $recipient) . '@' . $hostName;
1095
  }
1096
-
1097
  /**
1098
  * Add a custom header to the message
1099
  *
@@ -1105,17 +1026,17 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1105
  */
1106
  public function addHeader($name, $value, $append = false) {
1107
  $prohibit = array('to', 'cc', 'bcc', 'from', 'subject',
1108
- 'reply-to', 'return-path',
1109
- 'date', 'message-id',
1110
  );
1111
  if (in_array(strtolower($name), $prohibit)) {
1112
- /**
1113
- * @see mail_bank_Zend_Mail_Exception
1114
- */
1115
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
1116
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
1117
 
1118
- throw new mail_bank_Zend_Mail_Exception('Cannot set standard header from addHeader()');
1119
  }
1120
 
1121
  $value = $this->_filterOther($value);
@@ -1124,7 +1045,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1124
 
1125
  return $this;
1126
  }
1127
-
1128
  /**
1129
  * Return mail headers
1130
  *
@@ -1133,7 +1053,6 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1133
  public function getHeaders() {
1134
  return $this->_headers;
1135
  }
1136
-
1137
  /**
1138
  * Sends this email using the given transport or a previously
1139
  * set DefaultTransport or the internal mail function if no
@@ -1144,34 +1063,33 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1144
  */
1145
  public function send($transport = null) {
1146
  if ($transport === null) {
1147
- if (!self::$_defaultTransport instanceof mail_bank_Zend_Mail_Transport_Abstract) {
1148
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/transport/sendmail.php'))
1149
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/transport/sendmail.php';
1150
-
1151
- $transport = new mail_bank_Zend_Mail_Transport_Sendmail();
1152
- }
1153
- else {
1154
- $transport = self::$_defaultTransport;
1155
- }
1156
  }
1157
 
1158
  if ($this->_date === null) {
1159
- $this->setDate();
1160
  }
1161
 
1162
  if (null === $this->_from && null !== self::getDefaultFrom()) {
1163
- $this->setFromToDefaultFrom();
1164
  }
1165
 
1166
  if (null === $this->_replyTo && null !== self::getDefaultReplyTo()) {
1167
- $this->setReplyToFromDefault();
1168
  }
1169
 
1170
  $transport->send($this);
1171
 
1172
  return $this;
1173
  }
1174
-
1175
  /**
1176
  * Filter of email data
1177
  *
@@ -1180,17 +1098,16 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1180
  */
1181
  protected function _filterEmail($email) {
1182
  $rule = array("\r" => '',
1183
- "\n" => '',
1184
- "\t" => '',
1185
- '"' => '',
1186
- ',' => '',
1187
- '<' => '',
1188
- '>' => '',
1189
  );
1190
 
1191
  return strtr($email, $rule);
1192
  }
1193
-
1194
  /**
1195
  * Filter of name data
1196
  *
@@ -1199,16 +1116,15 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1199
  */
1200
  protected function _filterName($name) {
1201
  $rule = array("\r" => '',
1202
- "\n" => '',
1203
- "\t" => '',
1204
- '"' => "'",
1205
- '<' => '[',
1206
- '>' => ']',
1207
  );
1208
 
1209
  return trim(strtr($name, $rule));
1210
  }
1211
-
1212
  /**
1213
  * Filter of other data
1214
  *
@@ -1217,13 +1133,12 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1217
  */
1218
  protected function _filterOther($data) {
1219
  $rule = array("\r" => '',
1220
- "\n" => '',
1221
- "\t" => '',
1222
  );
1223
 
1224
  return strtr($data, $rule);
1225
  }
1226
-
1227
  /**
1228
  * Formats e-mail address
1229
  *
@@ -1233,16 +1148,15 @@ class mail_bank_Zend_Mail extends mail_bank_Zend_Mime_Message {
1233
  */
1234
  protected function _formatAddress($email, $name) {
1235
  if ($name === '' || $name === null || $name === $email) {
1236
- return $email;
1237
  } else {
1238
- $encodedName = $this->_encodeHeader($name);
1239
- if ($encodedName === $name && strcspn($name, '()<>[]:;@\\,.') != strlen($name)) {
1240
- $format = '"%s" <%s>';
1241
- } else {
1242
- $format = '%s <%s>';
1243
- }
1244
- return sprintf($format, $encodedName, $email);
1245
  }
1246
  }
1247
-
1248
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
44
  */
45
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mime/part.php'))
46
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/mime/part.php';
 
47
  /**
48
  * Class for sending an email.
49
  *
56
  /* * #@+
57
  * @access protected
58
  */
 
59
  /**
60
  * @var mail_bank_Zend_Mail_Transport_Abstract
61
  * @static
62
  */
63
  protected static $_defaultTransport = null;
 
64
  /**
65
  * @var array
66
  * @static
67
  */
68
  protected static $_defaultFrom;
 
69
  /**
70
  * @var array
71
  * @static
72
  */
73
  protected static $_defaultReplyTo;
 
74
  /**
75
  * Mail character set
76
  * @var string
77
  */
78
  protected $_charset = 'iso-8859-1';
 
79
  /**
80
  * Mail headers
81
  * @var array
82
  */
83
  protected $_headers = array();
 
84
  /**
85
  * Encoding of Mail headers
86
  * @var string
87
  */
88
  protected $_headerEncoding = mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE;
 
89
  /**
90
  * From: address
91
  * @var string
92
  */
93
  protected $_from = null;
 
94
  /**
95
  * To: addresses
96
  * @var array
97
  */
98
  protected $_to = array();
 
99
  /**
100
  * Array of all recipients
101
  * @var array
102
  */
103
  protected $_recipients = array();
 
104
  /**
105
  * Reply-To header
106
  * @var string
107
  */
108
  protected $_replyTo = null;
 
109
  /**
110
  * Return-Path header
111
  * @var string
112
  */
113
  protected $_returnPath = null;
 
114
  /**
115
  * Subject: header
116
  * @var string
117
  */
118
  protected $_subject = null;
 
119
  /**
120
  * Date: header
121
  * @var string
122
  */
123
  protected $_date = null;
 
124
  /**
125
  * Message-ID: header
126
  * @var string
127
  */
128
  protected $_messageId = null;
 
129
  /**
130
  * text/plain MIME part
131
  * @var false|mail_bank_Zend_Mime_Part
132
  */
133
  protected $_bodyText = false;
 
134
  /**
135
  * text/html MIME part
136
  * @var false|Zend_Mime_Part
137
  */
138
  protected $_bodyHtml = false;
 
139
  /**
140
  * MIME boundary string
141
  * @var string
142
  */
143
  protected $_mimeBoundary = null;
 
144
  /**
145
  * Content type of the message
146
  * @var string
148
  protected $_type = null;
149
 
150
  /* * #@- */
 
151
  /**
152
  * Flag: whether or not email has attachments
153
  * @var boolean
154
  */
155
  public $hasAttachments = false;
 
156
  /**
157
  * Sets the default mail transport for all following uses of
158
  * mail_bank_Zend_Mail::send();
164
  public static function setDefaultTransport(mail_bank_Zend_Mail_Transport_Abstract $transport) {
165
  self::$_defaultTransport = $transport;
166
  }
 
167
  /**
168
  * Gets the default mail transport for all following uses of
169
  * unittests
174
  public static function getDefaultTransport() {
175
  return self::$_defaultTransport;
176
  }
 
177
  /**
178
  * Clear the default transport property
179
  */
180
  public static function clearDefaultTransport() {
181
  self::$_defaultTransport = null;
182
  }
 
183
  /**
184
  * Public constructor
185
  *
187
  */
188
  public function __construct($charset = null) {
189
  if ($charset != null) {
190
+ $this->_charset = $charset;
191
  }
192
  }
 
193
  /**
194
  * Return charset string
195
  *
198
  public function getCharset() {
199
  return $this->_charset;
200
  }
 
201
  /**
202
  * Set content type
203
  *
209
  */
210
  public function setType($type) {
211
  $allowed = array(
212
+ mail_bank_Zend_Mime::MULTIPART_ALTERNATIVE,
213
+ mail_bank_Zend_Mime::MULTIPART_MIXED,
214
+ mail_bank_Zend_Mime::MULTIPART_RELATED,
215
  );
216
  if (!in_array($type, $allowed)) {
217
+ /**
218
+ * @see mail_bank_Zend_Mail_Exception
219
+ */
220
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
221
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
222
 
223
+ throw new mail_bank_Zend_Mail_Exception('Invalid content type "' . $type . '"');
224
  }
225
 
226
  $this->_type = $type;
227
  return $this;
228
  }
 
229
  /**
230
  * Get content type of the message
231
  *
234
  public function getType() {
235
  return $this->_type;
236
  }
 
237
  /**
238
  * Set an arbitrary mime boundary for the message
239
  *
247
 
248
  return $this;
249
  }
 
250
  /**
251
  * Return the boundary string used for the message
252
  *
255
  public function getMimeBoundary() {
256
  return $this->_mimeBoundary;
257
  }
 
258
  /**
259
  * Return encoding of mail headers
260
  *
264
  public function getEncodingOfHeaders() {
265
  return $this->getHeaderEncoding();
266
  }
 
267
  /**
268
  * Return the encoding of mail headers
269
  *
274
  public function getHeaderEncoding() {
275
  return $this->_headerEncoding;
276
  }
 
277
  /**
278
  * Set the encoding of mail headers
279
  *
284
  public function setEncodingOfHeaders($encoding) {
285
  return $this->setHeaderEncoding($encoding);
286
  }
 
287
  /**
288
  * Set the encoding of mail headers
289
  *
294
  */
295
  public function setHeaderEncoding($encoding) {
296
  $allowed = array(
297
+ mail_bank_Zend_Mime::ENCODING_BASE64,
298
+ mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE
299
  );
300
  if (!in_array($encoding, $allowed)) {
301
+ /**
302
+ * @see mail_bank_Zend_Mail_Exception
303
+ */
304
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
305
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
306
 
307
+ throw new mail_bank_Zend_Mail_Exception('Invalid encoding "' . $encoding . '"');
308
  }
309
  $this->_headerEncoding = $encoding;
310
 
311
  return $this;
312
  }
 
313
  /**
314
  * Sets the text body for the message.
315
  *
320
  */
321
  public function setBodyText($txt, $charset = null, $encoding = mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE) {
322
  if ($charset === null) {
323
+ $charset = $this->_charset;
324
  }
325
 
326
  $mp = new mail_bank_Zend_Mime_Part($txt);
333
 
334
  return $this;
335
  }
 
336
  /**
337
  * Return text body mail_bank_Zend_Mime_Part or string
338
  *
342
  */
343
  public function getBodyText($textOnly = false) {
344
  if ($textOnly && $this->_bodyText) {
345
+ $body = $this->_bodyText;
346
+ return $body->getContent();
347
  }
348
 
349
  return $this->_bodyText;
350
  }
 
351
  /**
352
  * Sets the HTML body for the message
353
  *
358
  */
359
  public function setBodyHtml($html, $charset = null, $encoding = mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE) {
360
  if ($charset === null) {
361
+ $charset = $this->_charset;
362
  }
363
 
364
  $mp = new mail_bank_Zend_Mime_Part($html);
371
 
372
  return $this;
373
  }
 
374
  /**
375
  * Return mail_bank_Zend_Mime_Part representing body HTML
376
  *
379
  */
380
  public function getBodyHtml($htmlOnly = false) {
381
  if ($htmlOnly && $this->_bodyHtml) {
382
+ $body = $this->_bodyHtml;
383
+ return $body->getContent();
384
  }
385
 
386
  return $this->_bodyHtml;
387
  }
 
388
  /**
389
  * Adds an existing attachment to the mail message
390
  *
397
 
398
  return $this;
399
  }
 
400
  /**
401
  * Creates a mail_bank_Zend_Mime_Part attachment
402
  *
422
 
423
  return $mp;
424
  }
 
425
  /**
426
  * Return a count of message parts
427
  *
430
  public function getPartCount() {
431
  return count($this->_parts);
432
  }
 
433
  /**
434
  * Encode header fields
435
  *
441
  */
442
  protected function _encodeHeader($value) {
443
  if (mail_bank_Zend_Mime::isPrintable($value) === false) {
444
+ if ($this->getHeaderEncoding() === mail_bank_Zend_Mime::ENCODING_QUOTEDPRINTABLE) {
445
+ $value = mail_bank_Zend_Mime::encodeQuotedPrintableHeader($value, $this->getCharset(), mail_bank_Zend_Mime::LINELENGTH, mail_bank_Zend_Mime::LINEEND);
446
+ } else {
447
+ $value = mail_bank_Zend_Mime::encodeBase64Header($value, $this->getCharset(), mail_bank_Zend_Mime::LINELENGTH, mail_bank_Zend_Mime::LINEEND);
448
+ }
449
  }
450
 
451
  return $value;
452
  }
 
453
  /**
454
  * Add a header to the message
455
  *
462
  */
463
  protected function _storeHeader($headerName, $value, $append = false) {
464
  if (isset($this->_headers[$headerName])) {
465
+ $this->_headers[$headerName][] = $value;
466
  } else {
467
+ $this->_headers[$headerName] = array($value);
468
  }
469
 
470
  if ($append) {
471
+ $this->_headers[$headerName]['append'] = true;
472
  }
473
  }
 
474
  /**
475
  * Clear header from the message
476
  *
480
  protected function _clearHeader($headerName) {
481
  $this->clearHeader($headerName);
482
  }
 
483
  /**
484
  * Helper function for adding a recipient and the corresponding header
485
  *
494
  $this->_recipients[$email] = 1;
495
  $this->_storeHeader($headerName, $this->_formatAddress($email, $name), true);
496
  }
 
497
  /**
498
  * Adds To-header and recipient, $email can be an array, or a single string
499
  * address
504
  */
505
  public function addTo($email, $name = '') {
506
  if (!is_array($email)) {
507
+ $email = array($name => $email);
508
  }
509
 
510
  foreach ($email as $n => $recipient) {
511
+ $this->_addRecipientAndHeader('To', $recipient, is_int($n) ? '' : $n);
512
+ $this->_to[] = $recipient;
513
  }
514
 
515
  return $this;
516
  }
 
517
  /**
518
  * Adds Cc-header and recipient, $email can be an array, or a single string
519
  * address
524
  */
525
  public function addCc($email, $name = '') {
526
  if (!is_array($email)) {
527
+ $email = array($name => $email);
528
  }
529
 
530
  foreach ($email as $n => $recipient) {
531
+ $this->_addRecipientAndHeader('Cc', $recipient, is_int($n) ? '' : $n);
532
  }
533
 
534
  return $this;
535
  }
 
536
  /**
537
  * Adds Bcc recipient, $email can be an array, or a single string address
538
  *
541
  */
542
  public function addBcc($email) {
543
  if (!is_array($email)) {
544
+ $email = array($email);
545
  }
546
 
547
  foreach ($email as $recipient) {
548
+ $this->_addRecipientAndHeader('Bcc', $recipient, '');
549
  }
550
 
551
  return $this;
552
  }
 
553
  /**
554
  * Return list of recipient email addresses
555
  *
558
  public function getRecipients() {
559
  return array_keys($this->_recipients);
560
  }
 
561
  /**
562
  * Clear header from the message
563
  *
566
  */
567
  public function clearHeader($headerName) {
568
  if (isset($this->_headers[$headerName])) {
569
+ unset($this->_headers[$headerName]);
570
  }
571
  return $this;
572
  }
 
573
  /**
574
  * Clears list of recipient email addresses
575
  *
585
 
586
  return $this;
587
  }
 
588
  /**
589
  * Sets From-header and sender of the message
590
  *
595
  */
596
  public function setFrom($email, $name = null) {
597
  if (null !== $this->_from) {
598
+ /**
599
+ * @see mail_bank_Zend_Mail_Exception
600
+ */
601
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
602
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
603
 
604
+ throw new mail_bank_Zend_Mail_Exception('From Header set twice');
605
  }
606
 
607
  $email = $this->_filterEmail($email);
611
 
612
  return $this;
613
  }
 
614
  /**
615
  * Set Reply-To Header
616
  *
621
  */
622
  public function setReplyTo($email, $name = null) {
623
  if (null !== $this->_replyTo) {
624
+ /**
625
+ * @see mail_bank_Zend_Mail_Exception
626
+ */
627
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
628
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
629
 
630
+ throw new mail_bank_Zend_Mail_Exception('Reply-To Header set twice');
631
  }
632
 
633
  $email = $this->_filterEmail($email);
637
 
638
  return $this;
639
  }
 
640
  /**
641
  * Returns the sender of the mail
642
  *
645
  public function getFrom() {
646
  return $this->_from;
647
  }
 
648
  /**
649
  * Returns the current Reply-To address of the message
650
  *
653
  public function getReplyTo() {
654
  return $this->_replyTo;
655
  }
 
656
  /**
657
  * Clears the sender from the mail
658
  *
664
 
665
  return $this;
666
  }
 
667
  /**
668
  * Clears the current Reply-To address from the message
669
  *
675
 
676
  return $this;
677
  }
 
678
  /**
679
  * Sets Default From-email and name of the message
680
  *
685
  public static function setDefaultFrom($email, $name = null) {
686
  self::$_defaultFrom = array('email' => $email, 'name' => $name);
687
  }
 
688
  /**
689
  * Returns the default sender of the mail
690
  *
693
  public static function getDefaultFrom() {
694
  return self::$_defaultFrom;
695
  }
 
696
  /**
697
  * Clears the default sender from the mail
698
  *
701
  public static function clearDefaultFrom() {
702
  self::$_defaultFrom = null;
703
  }
 
704
  /**
705
  * Sets From-name and -email based on the defaults
706
  *
710
  public function setFromToDefaultFrom() {
711
  $from = self::getDefaultFrom();
712
  if ($from === null) {
713
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
714
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
715
 
716
+ throw new mail_bank_Zend_Mail_Exception(
717
+ 'No default From Address set to use');
718
  }
719
 
720
  $this->setFrom($from['email'], $from['name']);
721
 
722
  return $this;
723
  }
 
724
  /**
725
  * Sets Default ReplyTo-address and -name of the message
726
  *
731
  public static function setDefaultReplyTo($email, $name = null) {
732
  self::$_defaultReplyTo = array('email' => $email, 'name' => $name);
733
  }
 
734
  /**
735
  * Returns the default Reply-To Address and Name of the mail
736
  *
739
  public static function getDefaultReplyTo() {
740
  return self::$_defaultReplyTo;
741
  }
 
742
  /**
743
  * Clears the default ReplyTo-address and -name from the mail
744
  *
747
  public static function clearDefaultReplyTo() {
748
  self::$_defaultReplyTo = null;
749
  }
 
750
  /**
751
  * Sets ReplyTo-name and -email based on the defaults
752
  *
756
  public function setReplyToFromDefault() {
757
  $replyTo = self::getDefaultReplyTo();
758
  if ($replyTo === null) {
759
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
760
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
761
 
762
+ throw new mail_bank_Zend_Mail_Exception(
763
+ 'No default Reply-To Address set to use');
764
  }
765
 
766
  $this->setReplyTo($replyTo['email'], $replyTo['name']);
767
 
768
  return $this;
769
  }
 
770
  /**
771
  * Sets the Return-Path header of the message
772
  *
776
  */
777
  public function setReturnPath($email) {
778
  if ($this->_returnPath === null) {
779
+ $email = $this->_filterEmail($email);
780
+ $this->_returnPath = $email;
781
+ $this->_storeHeader('Return-Path', $email, false);
782
  } else {
783
+ /**
784
+ * @see mail_bank_Zend_Mail_Exception
785
+ */
786
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
787
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
788
 
789
+ throw new mail_bank_Zend_Mail_Exception('Return-Path Header set twice');
790
  }
791
  return $this;
792
  }
 
793
  /**
794
  * Returns the current Return-Path address of the message
795
  *
799
  */
800
  public function getReturnPath() {
801
  if (null !== $this->_returnPath) {
802
+ return $this->_returnPath;
803
  }
804
 
805
  return $this->_from;
806
  }
 
807
  /**
808
  * Clears the current Return-Path address from the message
809
  *
815
 
816
  return $this;
817
  }
 
818
  /**
819
  * Sets the subject of the message
820
  *
824
  */
825
  public function setSubject($subject) {
826
  if ($this->_subject === null) {
827
+ $subject = $this->_filterOther($subject);
828
+ $this->_subject = $this->_encodeHeader($subject);
829
+ $this->_storeHeader('Subject', $this->_subject);
830
  } else {
831
+ /**
832
+ * @see mail_bank_Zend_Mail_Exception
833
+ */
834
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
835
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
836
 
837
+ throw new mail_bank_Zend_Mail_Exception('Subject set twice');
838
  }
839
  return $this;
840
  }
 
841
  /**
842
  * Returns the encoded subject of the message
843
  *
846
  public function getSubject() {
847
  return $this->_subject;
848
  }
 
849
  /**
850
  * Clears the encoded subject from the message
851
  *
857
 
858
  return $this;
859
  }
 
860
  /**
861
  * Sets Date-header
862
  *
867
  */
868
  public function setDate($date = null) {
869
  if ($this->_date === null) {
870
+ if ($date === null) {
871
+ $date = date('r');
872
+ } else if (is_int($date)) {
873
+ $date = date('r', $date);
874
+ } else if (is_string($date)) {
875
+ $date = strtotime($date);
876
+ if ($date === false || $date < 0) {
877
+ /**
878
+ * @see mail_bank_Zend_Mail_Exception
879
+ */
880
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
881
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
882
+
883
+ throw new mail_bank_Zend_Mail_Exception('String representations of Date Header must be ' .
884
+ 'strtotime()-compatible');
885
+ }
886
+ $date = date('r', $date);
887
+ }
888
+ else if ($date instanceof mail_bank_Zend_Date) {
889
+ $date = $date->get(mail_bank_Zend_Date::RFC_2822);
890
+ } else {
891
+ /**
892
+ * @see mail_bank_Zend_Mail_Exception
893
+ */
894
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
895
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
896
+
897
+ throw new mail_bank_Zend_Mail_Exception(__METHOD__ . ' only accepts UNIX timestamps, Zend_Date objects, ' .
898
+ ' and strtotime()-compatible strings');
899
+ }
900
+ $this->_date = $date;
901
+ $this->_storeHeader('Date', $date);
902
  }
903
  else {
904
+ /**
905
+ * @see mail_bank_Zend_Mail_Exception
906
+ */
907
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
908
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
909
 
910
+ throw new mail_bank_Zend_Mail_Exception('Date Header set twice');
911
  }
912
  return $this;
913
  }
 
914
  /**
915
  * Returns the formatted date of the message
916
  *
919
  public function getDate() {
920
  return $this->_date;
921
  }
 
922
  /**
923
  * Clears the formatted date from the message
924
  *
930
 
931
  return $this;
932
  }
 
933
  /**
934
  * Sets the Message-ID of the message
935
  *
943
  */
944
  public function setMessageId($id = true) {
945
  if ($id === null || $id === false) {
946
+ return $this;
947
  } elseif ($id === true) {
948
+ $id = $this->createMessageId();
949
  }
950
 
951
  if ($this->_messageId === null) {
952
+ $id = $this->_filterOther($id);
953
+ $this->_messageId = $id;
954
+ $this->_storeHeader('Message-Id', '<' . $this->_messageId . '>');
955
  } else {
956
+ /**
957
+ * @see mail_bank_Zend_Mail_Exception
958
+ */
959
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
960
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
961
 
962
+ throw new mail_bank_Zend_Mail_Exception('Message-ID set twice');
963
  }
964
 
965
  return $this;
966
  }
 
967
  /**
968
  * Returns the Message-ID of the message
969
  *
972
  public function getMessageId() {
973
  return $this->_messageId;
974
  }
 
975
  /**
976
  * Clears the Message-ID from the message
977
  *
983
 
984
  return $this;
985
  }
 
986
  /**
987
  * Creates the Message-ID
988
  *
992
  $time = time();
993
 
994
  if ($this->_from !== null) {
995
+ $user = $this->_from;
996
  } elseif (isset($_SERVER['REMOTE_ADDR'])) {
997
+ $user = $_SERVER['REMOTE_ADDR'];
998
  } else {
999
+ $user = getmypid();
1000
  }
1001
 
1002
  $rand = mt_rand();
1003
 
1004
  if ($this->_recipients !== array()) {
1005
+ $recipient = array_rand($this->_recipients);
1006
  } else {
1007
+ $recipient = 'unknown';
1008
  }
1009
 
1010
  if (isset($_SERVER["SERVER_NAME"])) {
1011
+ $hostName = $_SERVER["SERVER_NAME"];
1012
  } else {
1013
+ $hostName = php_uname('n');
1014
  }
1015
 
1016
  return sha1($time . $user . $rand . $recipient) . '@' . $hostName;
1017
  }
 
1018
  /**
1019
  * Add a custom header to the message
1020
  *
1026
  */
1027
  public function addHeader($name, $value, $append = false) {
1028
  $prohibit = array('to', 'cc', 'bcc', 'from', 'subject',
1029
+ 'reply-to', 'return-path',
1030
+ 'date', 'message-id',
1031
  );
1032
  if (in_array(strtolower($name), $prohibit)) {
1033
+ /**
1034
+ * @see mail_bank_Zend_Mail_Exception
1035
+ */
1036
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
1037
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
1038
 
1039
+ throw new mail_bank_Zend_Mail_Exception('Cannot set standard header from addHeader()');
1040
  }
1041
 
1042
  $value = $this->_filterOther($value);
1045
 
1046
  return $this;
1047
  }
 
1048
  /**
1049
  * Return mail headers
1050
  *
1053
  public function getHeaders() {
1054
  return $this->_headers;
1055
  }
 
1056
  /**
1057
  * Sends this email using the given transport or a previously
1058
  * set DefaultTransport or the internal mail function if no
1063
  */
1064
  public function send($transport = null) {
1065
  if ($transport === null) {
1066
+ if (!self::$_defaultTransport instanceof mail_bank_Zend_Mail_Transport_Abstract) {
1067
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/transport/sendmail.php'))
1068
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/transport/sendmail.php';
1069
+
1070
+ $transport = new mail_bank_Zend_Mail_Transport_Sendmail();
1071
+ }
1072
+ else {
1073
+ $transport = self::$_defaultTransport;
1074
+ }
1075
  }
1076
 
1077
  if ($this->_date === null) {
1078
+ $this->setDate();
1079
  }
1080
 
1081
  if (null === $this->_from && null !== self::getDefaultFrom()) {
1082
+ $this->setFromToDefaultFrom();
1083
  }
1084
 
1085
  if (null === $this->_replyTo && null !== self::getDefaultReplyTo()) {
1086
+ $this->setReplyToFromDefault();
1087
  }
1088
 
1089
  $transport->send($this);
1090
 
1091
  return $this;
1092
  }
 
1093
  /**
1094
  * Filter of email data
1095
  *
1098
  */
1099
  protected function _filterEmail($email) {
1100
  $rule = array("\r" => '',
1101
+ "\n" => '',
1102
+ "\t" => '',
1103
+ '"' => '',
1104
+ ',' => '',
1105
+ '<' => '',
1106
+ '>' => '',
1107
  );
1108
 
1109
  return strtr($email, $rule);
1110
  }
 
1111
  /**
1112
  * Filter of name data
1113
  *
1116
  */
1117
  protected function _filterName($name) {
1118
  $rule = array("\r" => '',
1119
+ "\n" => '',
1120
+ "\t" => '',
1121
+ '"' => "'",
1122
+ '<' => '[',
1123
+ '>' => ']',
1124
  );
1125
 
1126
  return trim(strtr($name, $rule));
1127
  }
 
1128
  /**
1129
  * Filter of other data
1130
  *
1133
  */
1134
  protected function _filterOther($data) {
1135
  $rule = array("\r" => '',
1136
+ "\n" => '',
1137
+ "\t" => '',
1138
  );
1139
 
1140
  return strtr($data, $rule);
1141
  }
 
1142
  /**
1143
  * Formats e-mail address
1144
  *
1148
  */
1149
  protected function _formatAddress($email, $name) {
1150
  if ($name === '' || $name === null || $name === $email) {
1151
+ return $email;
1152
  } else {
1153
+ $encodedName = $this->_encodeHeader($name);
1154
+ if ($encodedName === $name && strcspn($name, '()<>[]:;@\\,.') != strlen($name)) {
1155
+ $format = '"%s" <%s>';
1156
+ } else {
1157
+ $format = '%s <%s>';
1158
+ }
1159
+ return sprintf($format, $encodedName, $email);
1160
  }
1161
  }
1162
+ }
 
lib/zend/mail/exception.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -27,7 +26,6 @@ if (!defined("ABSPATH"))
27
  */
28
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
29
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
30
-
31
  /**
32
  * @category Zend
33
  * @package mail_bank_Zend_Mail
@@ -36,4 +34,4 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
36
  */
37
  class mail_bank_Zend_Mail_Exception extends mail_bank_Zend_Exception {
38
 
39
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
26
  */
27
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/exception.php'))
28
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/exception.php';
 
29
  /**
30
  * @category Zend
31
  * @package mail_bank_Zend_Mail
34
  */
35
  class mail_bank_Zend_Mail_Exception extends mail_bank_Zend_Exception {
36
 
37
+ }
lib/zend/mail/message.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -32,7 +31,6 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/part.php'))
32
  */
33
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php'))
34
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php';
35
-
36
  /**
37
  * @category Zend
38
  * @package mail_bank_Zend_Mail
@@ -40,13 +38,11 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php'))
40
  * @license http://framework.zend.com/license/new-bsd New BSD License
41
  */
42
  class mail_bank_Zend_Mail_Message extends mail_bank_Zend_Mail_Part implements mail_bank_Zend_Mail_Message_Interface {
43
-
44
  /**
45
  * flags for this message
46
  * @var array
47
  */
48
  protected $_flags = array();
49
-
50
  /**
51
  * Public constructor
52
  *
@@ -59,32 +55,31 @@ class mail_bank_Zend_Mail_Message extends mail_bank_Zend_Mail_Part implements ma
59
  */
60
  public function __construct(array $params) {
61
  if (isset($params['file'])) {
62
- if (!is_resource($params['file'])) {
63
- $params['raw'] = @file_get_contents($params['file']);
64
- if ($params['raw'] === false) {
65
- /**
66
- * @see mail_bank_Zend_Mail_Exception
67
- */
68
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
69
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
70
 
71
- throw new mail_bank_Zend_Mail_Exception('could not open file');
72
- }
73
- }
74
- else {
75
- $params['raw'] = stream_get_contents($params['file']);
76
- }
77
- $params['raw'] = preg_replace("/(?<!\r)\n/", "\r\n", $params['raw']);
78
  }
79
 
80
  if (!empty($params['flags'])) {
81
- // set key and value to the same value for easy lookup
82
- $this->_flags = array_merge($this->_flags, array_combine($params['flags'], $params['flags']));
83
  }
84
 
85
  parent::__construct($params);
86
  }
87
-
88
  /**
89
  * return toplines as found after headers
90
  *
@@ -93,7 +88,6 @@ class mail_bank_Zend_Mail_Message extends mail_bank_Zend_Mail_Part implements ma
93
  public function getTopLines() {
94
  return $this->_topLines;
95
  }
96
-
97
  /**
98
  * check if flag is set
99
  *
@@ -103,7 +97,6 @@ class mail_bank_Zend_Mail_Message extends mail_bank_Zend_Mail_Part implements ma
103
  public function hasFlag($flag) {
104
  return isset($this->_flags[$flag]);
105
  }
106
-
107
  /**
108
  * get all set flags
109
  *
@@ -112,5 +105,4 @@ class mail_bank_Zend_Mail_Message extends mail_bank_Zend_Mail_Part implements ma
112
  public function getFlags() {
113
  return $this->_flags;
114
  }
115
-
116
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
31
  */
32
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php'))
33
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php';
 
34
  /**
35
  * @category Zend
36
  * @package mail_bank_Zend_Mail
38
  * @license http://framework.zend.com/license/new-bsd New BSD License
39
  */
40
  class mail_bank_Zend_Mail_Message extends mail_bank_Zend_Mail_Part implements mail_bank_Zend_Mail_Message_Interface {
 
41
  /**
42
  * flags for this message
43
  * @var array
44
  */
45
  protected $_flags = array();
 
46
  /**
47
  * Public constructor
48
  *
55
  */
56
  public function __construct(array $params) {
57
  if (isset($params['file'])) {
58
+ if (!is_resource($params['file'])) {
59
+ $params['raw'] = @file_get_contents($params['file']);
60
+ if ($params['raw'] === false) {
61
+ /**
62
+ * @see mail_bank_Zend_Mail_Exception
63
+ */
64
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
65
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
66
 
67
+ throw new mail_bank_Zend_Mail_Exception('could not open file');
68
+ }
69
+ }
70
+ else {
71
+ $params['raw'] = stream_get_contents($params['file']);
72
+ }
73
+ $params['raw'] = preg_replace("/(?<!\r)\n/", "\r\n", $params['raw']);
74
  }
75
 
76
  if (!empty($params['flags'])) {
77
+ // set key and value to the same value for easy lookup
78
+ $this->_flags = array_merge($this->_flags, array_combine($params['flags'], $params['flags']));
79
  }
80
 
81
  parent::__construct($params);
82
  }
 
83
  /**
84
  * return toplines as found after headers
85
  *
88
  public function getTopLines() {
89
  return $this->_topLines;
90
  }
 
91
  /**
92
  * check if flag is set
93
  *
97
  public function hasFlag($flag) {
98
  return isset($this->_flags[$flag]);
99
  }
 
100
  /**
101
  * get all set flags
102
  *
105
  public function getFlags() {
106
  return $this->_flags;
107
  }
108
+ }
 
lib/zend/mail/message/file.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -33,7 +32,6 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/part/file.php'))
33
  */
34
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php'))
35
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php';
36
-
37
  /**
38
  * @category Zend
39
  * @package mail_bank_Zend_Mail
@@ -41,13 +39,11 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php'))
41
  * @license http://framework.zend.com/license/new-bsd New BSD License
42
  */
43
  class mail_bank_Zend_Mail_Message_File extends mail_bank_Zend_Mail_Part_File implements mail_bank_Zend_Mail_Message_Interface {
44
-
45
  /**
46
  * flags for this message
47
  * @var array
48
  */
49
  protected $_flags = array();
50
-
51
  /**
52
  * Public constructor
53
  *
@@ -59,13 +55,12 @@ class mail_bank_Zend_Mail_Message_File extends mail_bank_Zend_Mail_Part_File imp
59
  */
60
  public function __construct(array $params) {
61
  if (!empty($params['flags'])) {
62
- // set key and value to the same value for easy lookup
63
- $this->_flags = array_combine($params['flags'], $params['flags']);
64
  }
65
 
66
  parent::__construct($params);
67
  }
68
-
69
  /**
70
  * return toplines as found after headers
71
  *
@@ -74,7 +69,6 @@ class mail_bank_Zend_Mail_Message_File extends mail_bank_Zend_Mail_Part_File imp
74
  public function getTopLines() {
75
  return $this->_topLines;
76
  }
77
-
78
  /**
79
  * check if flag is set
80
  *
@@ -84,7 +78,6 @@ class mail_bank_Zend_Mail_Message_File extends mail_bank_Zend_Mail_Part_File imp
84
  public function hasFlag($flag) {
85
  return isset($this->_flags[$flag]);
86
  }
87
-
88
  /**
89
  * get all set flags
90
  *
@@ -93,5 +86,4 @@ class mail_bank_Zend_Mail_Message_File extends mail_bank_Zend_Mail_Part_File imp
93
  public function getFlags() {
94
  return $this->_flags;
95
  }
96
-
97
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
32
  */
33
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php'))
34
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/message/interface.php';
 
35
  /**
36
  * @category Zend
37
  * @package mail_bank_Zend_Mail
39
  * @license http://framework.zend.com/license/new-bsd New BSD License
40
  */
41
  class mail_bank_Zend_Mail_Message_File extends mail_bank_Zend_Mail_Part_File implements mail_bank_Zend_Mail_Message_Interface {
 
42
  /**
43
  * flags for this message
44
  * @var array
45
  */
46
  protected $_flags = array();
 
47
  /**
48
  * Public constructor
49
  *
55
  */
56
  public function __construct(array $params) {
57
  if (!empty($params['flags'])) {
58
+ // set key and value to the same value for easy lookup
59
+ $this->_flags = array_combine($params['flags'], $params['flags']);
60
  }
61
 
62
  parent::__construct($params);
63
  }
 
64
  /**
65
  * return toplines as found after headers
66
  *
69
  public function getTopLines() {
70
  return $this->_topLines;
71
  }
 
72
  /**
73
  * check if flag is set
74
  *
78
  public function hasFlag($flag) {
79
  return isset($this->_flags[$flag]);
80
  }
 
81
  /**
82
  * get all set flags
83
  *
86
  public function getFlags() {
87
  return $this->_flags;
88
  }
89
+ }
 
lib/zend/mail/message/interface.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -30,16 +29,13 @@
30
  if (!defined("ABSPATH")) {
31
  exit;
32
  } // Exit if accessed directly
33
-
34
  interface mail_bank_Zend_Mail_Message_Interface {
35
-
36
  /**
37
  * return toplines as found after headers
38
  *
39
  * @return string toplines
40
  */
41
  public function getTopLines();
42
-
43
  /**
44
  * check if flag is set
45
  *
@@ -47,11 +43,10 @@ interface mail_bank_Zend_Mail_Message_Interface {
47
  * @return bool true if set, otherwise false
48
  */
49
  public function hasFlag($flag);
50
-
51
  /**
52
  * get all set flags
53
  *
54
  * @return array array with flags, key and value are the same for easy lookup
55
  */
56
  public function getFlags();
57
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
29
  if (!defined("ABSPATH")) {
30
  exit;
31
  } // Exit if accessed directly
 
32
  interface mail_bank_Zend_Mail_Message_Interface {
 
33
  /**
34
  * return toplines as found after headers
35
  *
36
  * @return string toplines
37
  */
38
  public function getTopLines();
 
39
  /**
40
  * check if flag is set
41
  *
43
  * @return bool true if set, otherwise false
44
  */
45
  public function hasFlag($flag);
 
46
  /**
47
  * get all set flags
48
  *
49
  * @return array array with flags, key and value are the same for easy lookup
50
  */
51
  public function getFlags();
52
+ }
lib/zend/mail/part/file.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -33,7 +32,6 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mime/decode.php'))
33
  */
34
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/part.php'))
35
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/part.php';
36
-
37
  /**
38
  * @category Zend
39
  * @package mail_bank_Zend_Mail
@@ -41,11 +39,9 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/part.php'))
41
  * @license http://framework.zend.com/license/new-bsd New BSD License
42
  */
43
  class mail_bank_Zend_Mail_Part_File extends mail_bank_Zend_Mail_Part {
44
-
45
  protected $_contentPos = array();
46
  protected $_partPos = array();
47
  protected $_fh;
48
-
49
  /**
50
  * Public constructor
51
  *
@@ -59,100 +55,99 @@ class mail_bank_Zend_Mail_Part_File extends mail_bank_Zend_Mail_Part {
59
  */
60
  public function __construct(array $params) {
61
  if (empty($params['file'])) {
62
- /**
63
- * @see mail_bank_Zend_Mail_Exception
64
- */
65
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
66
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
67
 
68
- throw new mail_bank_Zend_Mail_Exception('no file given in params');
69
  }
70
 
71
  if (!is_resource($params['file'])) {
72
- $this->_fh = fopen($params['file'], 'r');
73
  } else {
74
- $this->_fh = $params['file'];
75
  }
76
  if (!$this->_fh) {
77
- /**
78
- * @see mail_bank_Zend_Mail_Exception
79
- */
80
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
81
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
82
 
83
- throw new mail_bank_Zend_Mail_Exception('could not open file');
84
  }
85
  if (isset($params['startPos'])) {
86
- fseek($this->_fh, $params['startPos']);
87
  }
88
  $header = '';
89
  $endPos = isset($params['endPos']) ? $params['endPos'] : null;
90
  while (($endPos === null || ftell($this->_fh) < $endPos) && trim($line = fgets($this->_fh))) {
91
- $header .= $line;
92
  }
93
 
94
  mail_bank_Zend_Mime_Decode::splitMessage($header, $this->_headers, $null);
95
 
96
  $this->_contentPos[0] = ftell($this->_fh);
97
  if ($endPos !== null) {
98
- $this->_contentPos[1] = $endPos;
99
  } else {
100
- fseek($this->_fh, 0, SEEK_END);
101
- $this->_contentPos[1] = ftell($this->_fh);
102
  }
103
  if (!$this->isMultipart()) {
104
- return;
105
  }
106
 
107
  $boundary = $this->getHeaderField('content-type', 'boundary');
108
  if (!$boundary) {
109
- /**
110
- * @see mail_bank_Zend_Mail_Exception
111
- */
112
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
113
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
114
 
115
- throw new mail_bank_Zend_Mail_Exception('no boundary found in content type to split message');
116
  }
117
 
118
  $part = array();
119
  $pos = $this->_contentPos[0];
120
  fseek($this->_fh, $pos);
121
  while (!feof($this->_fh) && ($endPos === null || $pos < $endPos)) {
122
- $line = fgets($this->_fh);
123
- if ($line === false) {
124
- if (feof($this->_fh)) {
125
- break;
126
- }
127
- /**
128
- * @see mail_bank_Zend_Mail_Exception
129
- */
130
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
131
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
132
-
133
- throw new mail_bank_Zend_Mail_Exception('error reading file');
134
- }
135
-
136
- $lastPos = $pos;
137
- $pos = ftell($this->_fh);
138
- $line = trim($line);
139
-
140
- if ($line == '--' . $boundary) {
141
- if ($part) {
142
- // not first part
143
- $part[1] = $lastPos;
144
- $this->_partPos[] = $part;
145
- }
146
- $part = array($pos);
147
- } else if ($line == '--' . $boundary . '--') {
148
- $part[1] = $lastPos;
149
- $this->_partPos[] = $part;
150
- break;
151
- }
152
  }
153
  $this->_countParts = count($this->_partPos);
154
  }
155
-
156
  /**
157
  * Body of part
158
  *
@@ -164,12 +159,11 @@ class mail_bank_Zend_Mail_Part_File extends mail_bank_Zend_Mail_Part {
164
  public function getContent($stream = null) {
165
  fseek($this->_fh, $this->_contentPos[0]);
166
  if ($stream !== null) {
167
- return stream_copy_to_stream($this->_fh, $stream, $this->_contentPos[1] - $this->_contentPos[0]);
168
  }
169
  $length = $this->_contentPos[1] - $this->_contentPos[0];
170
  return $length < 1 ? '' : fread($this->_fh, $length);
171
  }
172
-
173
  /**
174
  * Return size of part
175
  *
@@ -180,7 +174,6 @@ class mail_bank_Zend_Mail_Part_File extends mail_bank_Zend_Mail_Part {
180
  public function getSize() {
181
  return $this->_contentPos[1] - $this->_contentPos[0];
182
  }
183
-
184
  /**
185
  * Get part of multipart message
186
  *
@@ -191,17 +184,16 @@ class mail_bank_Zend_Mail_Part_File extends mail_bank_Zend_Mail_Part {
191
  public function getPart($num) {
192
  --$num;
193
  if (!isset($this->_partPos[$num])) {
194
- /**
195
- * @see mail_bank_Zend_Mail_Exception
196
- */
197
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
198
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
199
 
200
- throw new mail_bank_Zend_Mail_Exception('part not found');
201
  }
202
 
203
  return new self(array('file' => $this->_fh, 'startPos' => $this->_partPos[$num][0],
204
- 'endPos' => $this->_partPos[$num][1]));
205
  }
206
-
207
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
32
  */
33
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/part.php'))
34
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/part.php';
 
35
  /**
36
  * @category Zend
37
  * @package mail_bank_Zend_Mail
39
  * @license http://framework.zend.com/license/new-bsd New BSD License
40
  */
41
  class mail_bank_Zend_Mail_Part_File extends mail_bank_Zend_Mail_Part {
 
42
  protected $_contentPos = array();
43
  protected $_partPos = array();
44
  protected $_fh;
 
45
  /**
46
  * Public constructor
47
  *
55
  */
56
  public function __construct(array $params) {
57
  if (empty($params['file'])) {
58
+ /**
59
+ * @see mail_bank_Zend_Mail_Exception
60
+ */
61
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
62
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
63
 
64
+ throw new mail_bank_Zend_Mail_Exception('no file given in params');
65
  }
66
 
67
  if (!is_resource($params['file'])) {
68
+ $this->_fh = fopen($params['file'], 'r');
69
  } else {
70
+ $this->_fh = $params['file'];
71
  }
72
  if (!$this->_fh) {
73
+ /**
74
+ * @see mail_bank_Zend_Mail_Exception
75
+ */
76
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
77
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
78
 
79
+ throw new mail_bank_Zend_Mail_Exception('could not open file');
80
  }
81
  if (isset($params['startPos'])) {
82
+ fseek($this->_fh, $params['startPos']);
83
  }
84
  $header = '';
85
  $endPos = isset($params['endPos']) ? $params['endPos'] : null;
86
  while (($endPos === null || ftell($this->_fh) < $endPos) && trim($line = fgets($this->_fh))) {
87
+ $header .= $line;
88
  }
89
 
90
  mail_bank_Zend_Mime_Decode::splitMessage($header, $this->_headers, $null);
91
 
92
  $this->_contentPos[0] = ftell($this->_fh);
93
  if ($endPos !== null) {
94
+ $this->_contentPos[1] = $endPos;
95
  } else {
96
+ fseek($this->_fh, 0, SEEK_END);
97
+ $this->_contentPos[1] = ftell($this->_fh);
98
  }
99
  if (!$this->isMultipart()) {
100
+ return;
101
  }
102
 
103
  $boundary = $this->getHeaderField('content-type', 'boundary');
104
  if (!$boundary) {
105
+ /**
106
+ * @see mail_bank_Zend_Mail_Exception
107
+ */
108
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
109
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
110
 
111
+ throw new mail_bank_Zend_Mail_Exception('no boundary found in content type to split message');
112
  }
113
 
114
  $part = array();
115
  $pos = $this->_contentPos[0];
116
  fseek($this->_fh, $pos);
117
  while (!feof($this->_fh) && ($endPos === null || $pos < $endPos)) {
118
+ $line = fgets($this->_fh);
119
+ if ($line === false) {
120
+ if (feof($this->_fh)) {
121
+ break;
122
+ }
123
+ /**
124
+ * @see mail_bank_Zend_Mail_Exception
125
+ */
126
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
127
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
128
+
129
+ throw new mail_bank_Zend_Mail_Exception('error reading file');
130
+ }
131
+
132
+ $lastPos = $pos;
133
+ $pos = ftell($this->_fh);
134
+ $line = trim($line);
135
+
136
+ if ($line == '--' . $boundary) {
137
+ if ($part) {
138
+ // not first part
139
+ $part[1] = $lastPos;
140
+ $this->_partPos[] = $part;
141
+ }
142
+ $part = array($pos);
143
+ } else if ($line == '--' . $boundary . '--') {
144
+ $part[1] = $lastPos;
145
+ $this->_partPos[] = $part;
146
+ break;
147
+ }
148
  }
149
  $this->_countParts = count($this->_partPos);
150
  }
 
151
  /**
152
  * Body of part
153
  *
159
  public function getContent($stream = null) {
160
  fseek($this->_fh, $this->_contentPos[0]);
161
  if ($stream !== null) {
162
+ return stream_copy_to_stream($this->_fh, $stream, $this->_contentPos[1] - $this->_contentPos[0]);
163
  }
164
  $length = $this->_contentPos[1] - $this->_contentPos[0];
165
  return $length < 1 ? '' : fread($this->_fh, $length);
166
  }
 
167
  /**
168
  * Return size of part
169
  *
174
  public function getSize() {
175
  return $this->_contentPos[1] - $this->_contentPos[0];
176
  }
 
177
  /**
178
  * Get part of multipart message
179
  *
184
  public function getPart($num) {
185
  --$num;
186
  if (!isset($this->_partPos[$num])) {
187
+ /**
188
+ * @see mail_bank_Zend_Mail_Exception
189
+ */
190
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php'))
191
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/exception.php';
192
 
193
+ throw new mail_bank_Zend_Mail_Exception('part not found');
194
  }
195
 
196
  return new self(array('file' => $this->_fh, 'startPos' => $this->_partPos[$num][0],
197
+ 'endPos' => $this->_partPos[$num][1]));
198
  }
199
+ }
 
lib/zend/mail/part/interface.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -30,16 +29,13 @@
30
  if (!defined("ABSPATH")) {
31
  exit;
32
  } // Exit if accessed directly
33
-
34
  interface mail_bank_Zend_Mail_Part_Interface extends RecursiveIterator {
35
-
36
  /**
37
  * Check if part is a multipart message
38
  *
39
  * @return bool if part is multipart
40
  */
41
  public function isMultipart();
42
-
43
  /**
44
  * Body of part
45
  *
@@ -49,14 +45,12 @@ interface mail_bank_Zend_Mail_Part_Interface extends RecursiveIterator {
49
  * @throws mail_bank_Zend_Mail_Exception
50
  */
51
  public function getContent();
52
-
53
  /**
54
  * Return size of part
55
  *
56
  * @return int size
57
  */
58
  public function getSize();
59
-
60
  /**
61
  * Get part of multipart message
62
  *
@@ -65,14 +59,12 @@ interface mail_bank_Zend_Mail_Part_Interface extends RecursiveIterator {
65
  * @throws mail_bank_Zend_Mail_Exception
66
  */
67
  public function getPart($num);
68
-
69
  /**
70
  * Count parts of a multipart part
71
  *
72
  * @return int number of sub-parts
73
  */
74
  public function countParts();
75
-
76
  /**
77
  * Get all headers
78
  *
@@ -82,7 +74,6 @@ interface mail_bank_Zend_Mail_Part_Interface extends RecursiveIterator {
82
  * @return array headers as array(name => value)
83
  */
84
  public function getHeaders();
85
-
86
  /**
87
  * Get a header in specificed format
88
  *
@@ -95,7 +86,6 @@ interface mail_bank_Zend_Mail_Part_Interface extends RecursiveIterator {
95
  * @throws mail_bank_Zend_Mail_Exception
96
  */
97
  public function getHeader($name, $format = null);
98
-
99
  /**
100
  * Get a specific field from a header like content type or all fields as array
101
  *
@@ -112,7 +102,6 @@ interface mail_bank_Zend_Mail_Part_Interface extends RecursiveIterator {
112
  * @throws mail_bank_Zend_Exception, mail_bank_Zend_Mail_Exception
113
  */
114
  public function getHeaderField($name, $wantedPart = 0, $firstName = 0);
115
-
116
  /**
117
  * Getter for mail headers - name is matched in lowercase
118
  *
@@ -125,11 +114,10 @@ interface mail_bank_Zend_Mail_Part_Interface extends RecursiveIterator {
125
  * @throws mail_bank_Zend_Mail_Exception
126
  */
127
  public function __get($name);
128
-
129
  /**
130
  * magic method to get content of part
131
  *
132
  * @return string content
133
  */
134
  public function __toString();
135
- }
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
29
  if (!defined("ABSPATH")) {
30
  exit;
31
  } // Exit if accessed directly
 
32
  interface mail_bank_Zend_Mail_Part_Interface extends RecursiveIterator {
 
33
  /**
34
  * Check if part is a multipart message
35
  *
36
  * @return bool if part is multipart
37
  */
38
  public function isMultipart();
 
39
  /**
40
  * Body of part
41
  *
45
  * @throws mail_bank_Zend_Mail_Exception
46
  */
47
  public function getContent();
 
48
  /**
49
  * Return size of part
50
  *
51
  * @return int size
52
  */
53
  public function getSize();
 
54
  /**
55
  * Get part of multipart message
56
  *
59
  * @throws mail_bank_Zend_Mail_Exception
60
  */
61
  public function getPart($num);
 
62
  /**
63
  * Count parts of a multipart part
64
  *
65
  * @return int number of sub-parts
66
  */
67
  public function countParts();
 
68
  /**
69
  * Get all headers
70
  *
74
  * @return array headers as array(name => value)
75
  */
76
  public function getHeaders();
 
77
  /**
78
  * Get a header in specificed format
79
  *
86
  * @throws mail_bank_Zend_Mail_Exception
87
  */
88
  public function getHeader($name, $format = null);
 
89
  /**
90
  * Get a specific field from a header like content type or all fields as array
91
  *
102
  * @throws mail_bank_Zend_Exception, mail_bank_Zend_Mail_Exception
103
  */
104
  public function getHeaderField($name, $wantedPart = 0, $firstName = 0);
 
105
  /**
106
  * Getter for mail headers - name is matched in lowercase
107
  *
114
  * @throws mail_bank_Zend_Mail_Exception
115
  */
116
  public function __get($name);
 
117
  /**
118
  * magic method to get content of part
119
  *
120
  * @return string content
121
  */
122
  public function __toString();
123
+ }
lib/zend/mail/protocol/abstract.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Zend Framework
5
  *
@@ -35,7 +34,6 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/validate.php'))
35
  */
36
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/validate/hostname.php'))
37
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/validate/hostname.php';
38
-
39
  /**
40
  * mail_bank_Zend_Mail_Protocol_Abstract
41
  *
@@ -50,72 +48,60 @@ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/validate/hostname.php'))
50
  * @todo Implement proxy settings
51
  */
52
  abstract class mail_bank_Zend_Mail_Protocol_Abstract {
53
-
54
  /**
55
  * Mail default EOL string
56
  */
57
  const EOL = "\r\n";
58
-
59
  /**
60
  * Default timeout in seconds for initiating session
61
  */
62
  const TIMEOUT_CONNECTION = 30;
63
-
64
  /**
65
  * Maximum of the transaction log
66
  * @var integer
67
  */
68
  protected $_maximumLog = 64;
69
-
70
  /**
71
  * Hostname or IP address of remote server
72
  * @var string
73
  */
74
  protected $_host;
75
-
76
  /**
77
  * Port number of connection
78
  * @var integer
79
  */
80
  protected $_port;
81
-
82
  /**
83
  * Instance of mail_bank_Zend_Validate to check hostnames
84
  * @var mail_bank_Zend_Validate
85
  */
86
  protected $_validHost;
87
-
88
  /**
89
  * Socket connection resource
90
  * @var resource
91
  */
92
  protected $_socket;
93
-
94
  /**
95
  * Last request sent to server
96
  * @var string
97
  */
98
  protected $_request;
99
-
100
  /**
101
  * Array of server responses to last request
102
  * @var array
103
  */
104
  protected $_response;
105
-
106
  /**
107
  * String template for parsing server responses using sscanf (default: 3 digit code and response string)
108
  * @var resource
109
  * @deprecated Since 1.10.3
110
  */
111
  protected $_template = '%d%s';
112
-
113
  /**
114
  * Log of mail requests and server responses for a session
115
  * @var array
116
  */
117
  private $_log = array();
118
-
119
  /**
120
  * Constructor.
121
  *
@@ -129,19 +115,18 @@ abstract class mail_bank_Zend_Mail_Protocol_Abstract {
129
  $this->_validHost->addValidator(new mail_bank_Zend_Validate_Hostname(mail_bank_Zend_Validate_Hostname::ALLOW_ALL));
130
 
131
  if (!$this->_validHost->isValid($host)) {
132
- /**
133
- * @see mail_bank_Zend_Mail_Protocol_Exception
134
- */
135
- if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/protocol/exception.php'))
136
- require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/protocol/exception.php';
137
 
138
- throw new mail_bank_Zend_Mail_Protocol_Exception(join(', ', $this->_validHost->getMessages()));
139
  }
140
 
141
  $this->_host = $host;
142
  $this->_port = $port;
143
  }
144
-
145
  /**
146
  * Class destructor to cleanup open resources
147
  *
@@ -150,7 +135,6 @@ abstract class mail_bank_Zend_Mail_Protocol_Abstract {
150
  public function __destruct() {
151
  $this->_disconnect();
152
  }
153
-
154
  /**
155
  * Set the maximum log size
156
  *
@@ -160,7 +144,6 @@ abstract class mail_bank_Zend_Mail_Protocol_Abstract {
160
  public function setMaximumLog($maximumLog) {
161
  $this->_maximumLog = (int) $maximumLog;
162
  }
163
-
164
  /**
165
  * Get the maximum log size
166
  *
@@ -169,14 +152,12 @@ abstract class mail_bank_Zend_Mail_Protocol_Abstract {
169
  public function getMaximumLog() {
170
  return $this->_maximumLog;
171
  }
172
-
173
  /**
174
  * Create a connection to the remote host
175
  *
176
  * Concrete adapters for thi
1
  <?php
 
2
  /**
3
  * Zend Framework
4
  *
34
  */
35
  if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/validate/hostname.php'))
36
  require_once MAIL_BANK_DIR_PATH . 'lib/zend/validate/hostname.php';
 
37
  /**
38
  * mail_bank_Zend_Mail_Protocol_Abstract
39
  *
48
  * @todo Implement proxy settings
49
  */
50
  abstract class mail_bank_Zend_Mail_Protocol_Abstract {
 
51
  /**
52
  * Mail default EOL string
53
  */
54
  const EOL = "\r\n";
 
55
  /**
56
  * Default timeout in seconds for initiating session
57
  */
58
  const TIMEOUT_CONNECTION = 30;
 
59
  /**
60
  * Maximum of the transaction log
61
  * @var integer
62
  */
63
  protected $_maximumLog = 64;
 
64
  /**
65
  * Hostname or IP address of remote server
66
  * @var string
67
  */
68
  protected $_host;
 
69
  /**
70
  * Port number of connection
71
  * @var integer
72
  */
73
  protected $_port;
 
74
  /**
75
  * Instance of mail_bank_Zend_Validate to check hostnames
76
  * @var mail_bank_Zend_Validate
77
  */
78
  protected $_validHost;
 
79
  /**
80
  * Socket connection resource
81
  * @var resource
82
  */
83
  protected $_socket;
 
84
  /**
85
  * Last request sent to server
86
  * @var string
87
  */
88
  protected $_request;
 
89
  /**
90
  * Array of server responses to last request
91
  * @var array
92
  */
93
  protected $_response;
 
94
  /**
95
  * String template for parsing server responses using sscanf (default: 3 digit code and response string)
96
  * @var resource
97
  * @deprecated Since 1.10.3
98
  */
99
  protected $_template = '%d%s';
 
100
  /**
101
  * Log of mail requests and server responses for a session
102
  * @var array
103
  */
104
  private $_log = array();
 
105
  /**
106
  * Constructor.
107
  *
115
  $this->_validHost->addValidator(new mail_bank_Zend_Validate_Hostname(mail_bank_Zend_Validate_Hostname::ALLOW_ALL));
116
 
117
  if (!$this->_validHost->isValid($host)) {
118
+ /**
119
+ * @see mail_bank_Zend_Mail_Protocol_Exception
120
+ */
121
+ if (file_exists(MAIL_BANK_DIR_PATH . 'lib/zend/mail/protocol/exception.php'))
122
+ require_once MAIL_BANK_DIR_PATH . 'lib/zend/mail/protocol/exception.php';
123
 
124
+ throw new mail_bank_Zend_Mail_Protocol_Exception(join(', ', $this->_validHost->getMessages()));
125
  }
126
 
127
  $this->_host = $host;
128
  $this->_port = $port;
129
  }
 
130
  /**
131
  * Class destructor to cleanup open resources
132
  *
135
  public function __destruct() {
136
  $this->_disconnect();
137
  }
 
138
  /**
139
  * Set the maximum log size
140
  *
144
  public function setMaximumLog($maximumLog) {
145
  $this->_maximumLog = (int) $maximumLog;
146
  }
 
147
  /**
148
  * Get the maximum log size
149
  *
152
  public function getMaximumLog() {
153
  return $this->_maximumLog;
154
  }
 
155
  /**
156
  * Create a connection to the remote host
157
  *
158
  * Concrete adapters for thi