haraka 0.0.32 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/.claude/settings.local.json +28 -0
  2. package/.githooks/pre-commit +41 -0
  3. package/.prettierignore +6 -0
  4. package/.qlty/.gitignore +7 -0
  5. package/.qlty/configs/.shellcheckrc +1 -0
  6. package/.qlty/qlty.toml +15 -0
  7. package/CHANGELOG.md +1872 -62
  8. package/CLAUDE.md +40 -0
  9. package/CONTRIBUTORS.md +34 -0
  10. package/Dockerfile +50 -0
  11. package/GEMINI.md +38 -0
  12. package/LICENSE +2 -1
  13. package/Plugins.md +227 -0
  14. package/README.md +100 -115
  15. package/SECURITY.md +178 -0
  16. package/TODO +22 -0
  17. package/address.js +53 -0
  18. package/bin/haraka +593 -0
  19. package/bin/haraka_grep +32 -0
  20. package/config/aliases +2 -0
  21. package/config/auth_flat_file.ini +7 -0
  22. package/config/auth_vpopmaild.ini +9 -0
  23. package/config/connection.ini +79 -0
  24. package/config/delay_deny.ini +7 -0
  25. package/config/dhparams.pem +8 -0
  26. package/config/host_list +3 -0
  27. package/config/host_list_regex +6 -0
  28. package/config/http.ini +11 -0
  29. package/config/lmtp.ini +7 -0
  30. package/config/log.ini +11 -0
  31. package/config/me +1 -0
  32. package/config/outbound.bounce_message +18 -0
  33. package/config/outbound.bounce_message_html +36 -0
  34. package/config/outbound.bounce_message_image +106 -0
  35. package/config/outbound.ini +24 -0
  36. package/config/plugins +67 -0
  37. package/config/smtp.ini +37 -0
  38. package/config/smtp_bridge.ini +4 -0
  39. package/config/smtp_forward.ini +31 -0
  40. package/config/smtp_proxy.ini +27 -0
  41. package/config/tarpit.timeout +1 -0
  42. package/config/tls.ini +83 -0
  43. package/config/tls_cert.pem +23 -0
  44. package/config/tls_key.pem +28 -0
  45. package/config/watch.ini +12 -0
  46. package/config/xclient.hosts +2 -0
  47. package/connection.js +1863 -0
  48. package/contrib/Haraka.cf +6 -0
  49. package/contrib/Haraka.pm +35 -0
  50. package/contrib/bad_smtp_server.pl +25 -0
  51. package/contrib/bsd-rc.d/haraka +61 -0
  52. package/contrib/debian-init.d/haraka +87 -0
  53. package/contrib/haraka.init +96 -0
  54. package/contrib/haraka.service +23 -0
  55. package/contrib/plugin2npm.sh +81 -0
  56. package/contrib/ubuntu-upstart/haraka.conf +27 -0
  57. package/coverage/coverage-final.json +2 -0
  58. package/coverage/coverage-summary.json +33 -0
  59. package/coverage/tmp/coverage-79131-1779241025146-0.json +1 -0
  60. package/coverage/tmp/coverage-79132-1779240999690-0.json +1 -0
  61. package/coverage/tmp/coverage-79172-1779241000095-0.json +1 -0
  62. package/coverage/tmp/coverage-79210-1779241000156-0.json +1 -0
  63. package/coverage/tmp/coverage-79211-1779241000209-0.json +1 -0
  64. package/coverage/tmp/coverage-79212-1779241000266-0.json +1 -0
  65. package/coverage/tmp/coverage-79213-1779241000441-0.json +1 -0
  66. package/coverage/tmp/coverage-79214-1779241000626-0.json +1 -0
  67. package/coverage/tmp/coverage-79215-1779241000795-0.json +1 -0
  68. package/coverage/tmp/coverage-79216-1779241000965-0.json +1 -0
  69. package/coverage/tmp/coverage-79218-1779241001013-0.json +1 -0
  70. package/coverage/tmp/coverage-79219-1779241001179-0.json +1 -0
  71. package/coverage/tmp/coverage-79220-1779241006249-0.json +1 -0
  72. package/coverage/tmp/coverage-79227-1779241011453-0.json +1 -0
  73. package/coverage/tmp/coverage-79229-1779241011537-0.json +1 -0
  74. package/coverage/tmp/coverage-79230-1779241011647-0.json +1 -0
  75. package/coverage/tmp/coverage-79231-1779241011765-0.json +1 -0
  76. package/coverage/tmp/coverage-79232-1779241011841-0.json +1 -0
  77. package/coverage/tmp/coverage-79233-1779241011909-0.json +1 -0
  78. package/coverage/tmp/coverage-79234-1779241011984-0.json +1 -0
  79. package/coverage/tmp/coverage-79235-1779241012055-0.json +1 -0
  80. package/coverage/tmp/coverage-79236-1779241012230-0.json +1 -0
  81. package/coverage/tmp/coverage-79237-1779241012300-0.json +1 -0
  82. package/coverage/tmp/coverage-79238-1779241012368-0.json +1 -0
  83. package/coverage/tmp/coverage-79239-1779241012438-0.json +1 -0
  84. package/coverage/tmp/coverage-79240-1779241012511-0.json +1 -0
  85. package/coverage/tmp/coverage-79241-1779241012582-0.json +1 -0
  86. package/coverage/tmp/coverage-79242-1779241012652-0.json +1 -0
  87. package/coverage/tmp/coverage-79243-1779241012814-0.json +1 -0
  88. package/coverage/tmp/coverage-79244-1779241012931-0.json +1 -0
  89. package/coverage/tmp/coverage-79245-1779241013007-0.json +1 -0
  90. package/coverage/tmp/coverage-79246-1779241013106-0.json +1 -0
  91. package/coverage/tmp/coverage-79247-1779241013178-0.json +1 -0
  92. package/coverage/tmp/coverage-79248-1779241013244-0.json +1 -0
  93. package/coverage/tmp/coverage-79249-1779241013409-0.json +1 -0
  94. package/coverage/tmp/coverage-79250-1779241013697-0.json +1 -0
  95. package/coverage/tmp/coverage-79251-1779241013847-0.json +1 -0
  96. package/coverage/tmp/coverage-79252-1779241014288-0.json +1 -0
  97. package/coverage/tmp/coverage-79253-1779241014378-0.json +1 -0
  98. package/coverage/tmp/coverage-79254-1779241014428-0.json +1 -0
  99. package/coverage/tmp/coverage-79255-1779241021774-0.json +1 -0
  100. package/coverage/tmp/coverage-80382-1779241021949-0.json +1 -0
  101. package/coverage/tmp/coverage-80383-1779241025019-0.json +1 -0
  102. package/coverage/tmp/coverage-80384-1779241025133-0.json +1 -0
  103. package/docs/Body.md +1 -0
  104. package/docs/Config.md +1 -0
  105. package/docs/Connection.md +153 -0
  106. package/docs/CoreConfig.md +96 -0
  107. package/docs/CustomReturnCodes.md +3 -0
  108. package/docs/HAProxy.md +62 -0
  109. package/docs/Header.md +1 -0
  110. package/docs/Logging.md +129 -0
  111. package/docs/Outbound.md +210 -0
  112. package/docs/Plugins.md +372 -0
  113. package/docs/Results.md +7 -0
  114. package/docs/Transaction.md +135 -0
  115. package/docs/Tutorial.md +183 -0
  116. package/docs/deprecated/access.md +3 -0
  117. package/docs/deprecated/backscatterer.md +9 -0
  118. package/docs/deprecated/connect.rdns_access.md +53 -0
  119. package/docs/deprecated/data.headers.md +3 -0
  120. package/docs/deprecated/data.nomsgid.md +7 -0
  121. package/docs/deprecated/data.noreceived.md +11 -0
  122. package/docs/deprecated/data.rfc5322_header_checks.md +11 -0
  123. package/docs/deprecated/dkim_sign.md +97 -0
  124. package/docs/deprecated/dkim_verify.md +28 -0
  125. package/docs/deprecated/dnsbl.md +80 -0
  126. package/docs/deprecated/dnswl.md +73 -0
  127. package/docs/deprecated/lookup_rdns.strict.md +67 -0
  128. package/docs/deprecated/mail_from.access.md +52 -0
  129. package/docs/deprecated/mail_from.blocklist.md +18 -0
  130. package/docs/deprecated/mail_from.nobounces.md +8 -0
  131. package/docs/deprecated/rcpt_to.access.md +53 -0
  132. package/docs/deprecated/rcpt_to.blocklist.md +18 -0
  133. package/docs/deprecated/rcpt_to.routes.md +3 -0
  134. package/docs/deprecated/rdns.regexp.md +30 -0
  135. package/docs/plugins/aliases.md +3 -0
  136. package/docs/plugins/auth/auth_bridge.md +34 -0
  137. package/docs/plugins/auth/auth_ldap.md +4 -0
  138. package/docs/plugins/auth/auth_proxy.md +36 -0
  139. package/docs/plugins/auth/auth_vpopmaild.md +33 -0
  140. package/docs/plugins/auth/flat_file.md +40 -0
  141. package/docs/plugins/block_me.md +18 -0
  142. package/docs/plugins/data.signatures.md +11 -0
  143. package/docs/plugins/delay_deny.md +23 -0
  144. package/docs/plugins/max_unrecognized_commands.md +6 -0
  145. package/docs/plugins/prevent_credential_leaks.md +22 -0
  146. package/docs/plugins/process_title.md +42 -0
  147. package/docs/plugins/queue/deliver.md +3 -0
  148. package/docs/plugins/queue/discard.md +32 -0
  149. package/docs/plugins/queue/lmtp.md +24 -0
  150. package/docs/plugins/queue/qmail-queue.md +16 -0
  151. package/docs/plugins/queue/quarantine.md +87 -0
  152. package/docs/plugins/queue/smtp_bridge.md +32 -0
  153. package/docs/plugins/queue/smtp_forward.md +127 -0
  154. package/docs/plugins/queue/smtp_proxy.md +68 -0
  155. package/docs/plugins/queue/test.md +7 -0
  156. package/docs/plugins/rcpt_to.in_host_list.md +34 -0
  157. package/docs/plugins/rcpt_to.max_count.md +3 -0
  158. package/docs/plugins/record_envelope_addresses.md +20 -0
  159. package/docs/plugins/relay.md +3 -0
  160. package/docs/plugins/reseed_rng.md +16 -0
  161. package/docs/plugins/status.md +41 -0
  162. package/docs/plugins/tarpit.md +50 -0
  163. package/docs/plugins/tls.md +235 -0
  164. package/docs/plugins/toobusy.md +27 -0
  165. package/docs/plugins/xclient.md +10 -0
  166. package/docs/tutorials/Migrating_from_v1_to_v2.md +96 -0
  167. package/docs/tutorials/SettingUpOutbound.md +62 -0
  168. package/eslint.config.mjs +2 -0
  169. package/haraka.js +74 -0
  170. package/haraka.sh +2 -0
  171. package/http/html/404.html +58 -0
  172. package/http/html/index.html +47 -0
  173. package/http/package.json +21 -0
  174. package/line_socket.js +24 -0
  175. package/logger.js +322 -0
  176. package/outbound/client_pool.js +59 -0
  177. package/outbound/config.js +134 -0
  178. package/outbound/hmail.js +1504 -0
  179. package/outbound/index.js +349 -0
  180. package/outbound/qfile.js +93 -0
  181. package/outbound/queue.js +399 -0
  182. package/outbound/tls.js +85 -0
  183. package/outbound/todo.js +17 -0
  184. package/package.json +91 -29
  185. package/plugins/.eslintrc.yaml +3 -0
  186. package/plugins/auth/auth_base.js +261 -0
  187. package/plugins/auth/auth_bridge.js +20 -0
  188. package/plugins/auth/auth_proxy.js +227 -0
  189. package/plugins/auth/auth_vpopmaild.js +162 -0
  190. package/plugins/auth/flat_file.js +44 -0
  191. package/plugins/block_me.js +88 -0
  192. package/plugins/data.signatures.js +30 -0
  193. package/plugins/delay_deny.js +153 -0
  194. package/plugins/prevent_credential_leaks.js +61 -0
  195. package/plugins/process_title.js +197 -0
  196. package/plugins/profile.js +11 -0
  197. package/plugins/queue/deliver.js +12 -0
  198. package/plugins/queue/discard.js +27 -0
  199. package/plugins/queue/lmtp.js +45 -0
  200. package/plugins/queue/qmail-queue.js +93 -0
  201. package/plugins/queue/quarantine.js +133 -0
  202. package/plugins/queue/smtp_bridge.js +45 -0
  203. package/plugins/queue/smtp_forward.js +371 -0
  204. package/plugins/queue/smtp_proxy.js +142 -0
  205. package/plugins/queue/test.js +15 -0
  206. package/plugins/rcpt_to.host_list_base.js +65 -0
  207. package/plugins/rcpt_to.in_host_list.js +56 -0
  208. package/plugins/record_envelope_addresses.js +17 -0
  209. package/plugins/reseed_rng.js +7 -0
  210. package/plugins/status.js +274 -0
  211. package/plugins/tarpit.js +45 -0
  212. package/plugins/tls.js +164 -0
  213. package/plugins/toobusy.js +47 -0
  214. package/plugins/xclient.js +124 -0
  215. package/plugins.js +604 -0
  216. package/queue/1772642154987_1775581346001_4_82235_TGwgfd_2_mattbook-m3.home.simerson.net +0 -0
  217. package/run_tests +11 -0
  218. package/server.js +827 -0
  219. package/smtp_client.js +504 -0
  220. package/test/.eslintrc.yaml +11 -0
  221. package/test/config/auth_flat_file.ini +5 -0
  222. package/test/config/block_me.recipient +1 -0
  223. package/test/config/block_me.senders +1 -0
  224. package/test/config/dhparams.pem +8 -0
  225. package/test/config/host_list +2 -0
  226. package/test/config/outbound_tls_cert.pem +1 -0
  227. package/test/config/outbound_tls_key.pem +1 -0
  228. package/test/config/plugins +7 -0
  229. package/test/config/smtp.ini +11 -0
  230. package/test/config/smtp_forward.ini +30 -0
  231. package/test/config/tls/example.com/_.example.com.key +28 -0
  232. package/test/config/tls/example.com/example.com.crt +25 -0
  233. package/test/config/tls/haraka.local.pem +51 -0
  234. package/test/config/tls.ini +45 -0
  235. package/test/config/tls_cert.pem +21 -0
  236. package/test/config/tls_key.pem +28 -0
  237. package/test/connection.js +817 -0
  238. package/test/fixtures/haproxy_allowed/config/connection.ini +3 -0
  239. package/test/fixtures/haproxy_disabled/config/connection.ini +3 -0
  240. package/test/fixtures/haproxy_untrusted/config/connection.ini +3 -0
  241. package/test/fixtures/line_socket.js +21 -0
  242. package/test/fixtures/todo_qfile.txt +0 -0
  243. package/test/fixtures/util_hmailitem.js +156 -0
  244. package/test/installation/config/test-plugin-flat +1 -0
  245. package/test/installation/config/test-plugin.ini +10 -0
  246. package/test/installation/config/tls.ini +1 -0
  247. package/test/installation/node_modules/load_first/index.js +5 -0
  248. package/test/installation/node_modules/load_first/package.json +11 -0
  249. package/test/installation/node_modules/test-plugin/config/test-plugin-flat +1 -0
  250. package/test/installation/node_modules/test-plugin/config/test-plugin.ini +9 -0
  251. package/test/installation/node_modules/test-plugin/package.json +5 -0
  252. package/test/installation/node_modules/test-plugin/test-plugin.js +5 -0
  253. package/test/installation/plugins/base_plugin.js +3 -0
  254. package/test/installation/plugins/folder_plugin/index.js +3 -0
  255. package/test/installation/plugins/folder_plugin/package.json +11 -0
  256. package/test/installation/plugins/inherits.js +7 -0
  257. package/test/installation/plugins/load_first.js +3 -0
  258. package/test/installation/plugins/plugin.js +1 -0
  259. package/test/installation/plugins/tls.js +3 -0
  260. package/test/logger.js +217 -0
  261. package/test/loud/config/dhparams.pem +0 -0
  262. package/test/loud/config/tls/goobered.pem +45 -0
  263. package/test/loud/config/tls.ini +43 -0
  264. package/test/mail_specimen/base64-root-part.txt +23 -0
  265. package/test/mail_specimen/varied-fold-lengths-preserve-data.txt +283 -0
  266. package/test/outbound/bounce_net_errors.js +133 -0
  267. package/test/outbound/bounce_rfc3464.js +226 -0
  268. package/test/outbound/hmail.js +210 -0
  269. package/test/outbound/index.js +385 -0
  270. package/test/outbound/qfile.js +124 -0
  271. package/test/outbound/queue.js +325 -0
  272. package/test/plugins/auth/auth_base.js +620 -0
  273. package/test/plugins/auth/auth_bridge.js +80 -0
  274. package/test/plugins/auth/auth_vpopmaild.js +81 -0
  275. package/test/plugins/auth/flat_file.js +123 -0
  276. package/test/plugins/block_me.js +141 -0
  277. package/test/plugins/data.signatures.js +111 -0
  278. package/test/plugins/delay_deny.js +262 -0
  279. package/test/plugins/prevent_credential_leaks.js +174 -0
  280. package/test/plugins/process_title.js +141 -0
  281. package/test/plugins/queue/deliver.js +98 -0
  282. package/test/plugins/queue/discard.js +78 -0
  283. package/test/plugins/queue/lmtp.js +137 -0
  284. package/test/plugins/queue/qmail-queue.js +98 -0
  285. package/test/plugins/queue/quarantine.js +80 -0
  286. package/test/plugins/queue/smtp_bridge.js +152 -0
  287. package/test/plugins/queue/smtp_forward.js +1023 -0
  288. package/test/plugins/queue/smtp_proxy.js +138 -0
  289. package/test/plugins/rcpt_to.host_list_base.js +102 -0
  290. package/test/plugins/rcpt_to.in_host_list.js +186 -0
  291. package/test/plugins/record_envelope_addresses.js +66 -0
  292. package/test/plugins/reseed_rng.js +34 -0
  293. package/test/plugins/status.js +207 -0
  294. package/test/plugins/tarpit.js +90 -0
  295. package/test/plugins/tls.js +86 -0
  296. package/test/plugins/toobusy.js +21 -0
  297. package/test/plugins/xclient.js +119 -0
  298. package/test/plugins.js +230 -0
  299. package/test/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
  300. package/test/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
  301. package/test/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
  302. package/test/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
  303. package/test/queue/zero-length +0 -0
  304. package/test/server.js +1012 -0
  305. package/test/smtp_client.js +1303 -0
  306. package/test/tls_socket.js +321 -0
  307. package/test/transaction.js +554 -0
  308. package/tls_socket.js +771 -0
  309. package/transaction.js +267 -0
  310. package/lib/index.js +0 -371
@@ -0,0 +1,6 @@
1
+ loadplugin Mail::SpamAssassin::Plugin::Haraka Haraka.pm
2
+
3
+ ifplugin Mail::SpamAssassin::Plugin::Haraka
4
+ header __HARAKA eval:get_haraka_uuid()
5
+ endif
6
+
@@ -0,0 +1,35 @@
1
+ package Mail::SpamAssassin::Plugin::Haraka;
2
+ my $VERSION = 0.1;
3
+
4
+ use warnings;
5
+ use strict;
6
+ use Mail::SpamAssassin::Plugin;
7
+ use vars qw(@ISA);
8
+ @ISA = qw(Mail::SpamAssassin::Plugin);
9
+
10
+ sub dbg {
11
+ Mail::SpamAssassin::Plugin::dbg ("Haraka: @_");
12
+ }
13
+
14
+ sub new {
15
+ my ($class, $mailsa) = @_;
16
+ $class = ref($class) || $class;
17
+ my $self = $class->SUPER::new($mailsa);
18
+ bless ($self, $class);
19
+ $self->register_eval_rule("get_haraka_uuid");
20
+ }
21
+
22
+ sub get_haraka_uuid {
23
+ my ($self, $pms) = @_;
24
+
25
+ # Add last external IP
26
+ my $le = $pms->get_tag('LASTEXTERNALIP');
27
+ if(defined($le) && $le) {
28
+ $pms->set_spamd_result_item( sub { return "last-external=$le"; } );
29
+ }
30
+ my $header = $pms->get("X-Haraka-UUID");
31
+ if(defined($header) && $header) {
32
+ $pms->set_spamd_result_item( sub { return "haraka-uuid=$header"; } );
33
+ }
34
+ return 0;
35
+ }
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/perl
2
+
3
+ use warnings;
4
+ use strict;
5
+
6
+ use IO::Socket;
7
+
8
+ my $server = IO::Socket::INET->new(Listen => 5, LocalPort => 2525, Proto => "tcp");
9
+ $server || die $!;
10
+
11
+ while (my $client = $server->accept()) {
12
+ print "Got connection\n";
13
+ $client->print("220 hostname\r\n");
14
+ my $helo = <$client>;
15
+ $client->print("250 hi\r\n");
16
+ my $mail = <$client>;
17
+ $client->print("250 ok\r\n");
18
+ my $rcpt = <$client>;
19
+ $client->print("250 ok\r\n");
20
+ my $data = <$client>;
21
+ $client->print("354 ok\r\n");
22
+ my $line = <$client>;
23
+ $client->close();
24
+ print "Closed client\n";
25
+ }
@@ -0,0 +1,61 @@
1
+ #!/bin/sh
2
+ # USAGE: rename this as 'haraka' and drop it in /usr/local/etc/rc.d
3
+ # tested on FreeBSD. Should work on NetBSD and Dragonfly
4
+
5
+ # PROVIDE: haraka
6
+ # REQUIRE: NETWORKING ldconfig
7
+ # KEYWORD: shutdown
8
+
9
+ . /etc/rc.subr
10
+
11
+ name="haraka"
12
+ rcvar="haraka_enable"
13
+
14
+ command="/usr/local/bin/haraka"
15
+ pidfile="/var/run/${name}.pid"
16
+
17
+ haraka_flags=${haraka_flags:="-c /data"}
18
+
19
+ start_cmd="start"
20
+ status_cmd="status"
21
+ stop_cmd="stop"
22
+
23
+ load_rc_config $name
24
+
25
+ start()
26
+ {
27
+ /usr/local/bin/node /usr/local/bin/haraka $haraka_flags
28
+ }
29
+
30
+ status()
31
+ {
32
+ if [ -f $pidfile ];
33
+ then
34
+ LPID=`cat $pidfile`
35
+ LPROC=`/bin/ps -p $PID`
36
+ if [ -n $LPROC ];
37
+ then
38
+ echo "$name is running as $LPID"
39
+ else
40
+ echo "$name is not running"
41
+ fi
42
+ else
43
+ echo "$name is not running"
44
+ fi
45
+ }
46
+
47
+ stop()
48
+ {
49
+ if [ -f $pidfile ];
50
+ then
51
+ kill `cat $pidfile`
52
+ if [ -f $pidfile ];
53
+ then
54
+ rm $pidfile
55
+ fi
56
+ else
57
+ echo "no PID file!"
58
+ fi
59
+ }
60
+
61
+ run_rc_command "$1"
@@ -0,0 +1,87 @@
1
+ #!/bin/sh
2
+ ### BEGIN INIT INFO
3
+ # Provides: haraka
4
+ # Required-Start: $local_fs $remote_fs $network $syslog $named
5
+ # Required-Stop: $local_fs $remote_fs $network $syslog $named
6
+ # Default-Start: 2 3 4 5
7
+ # Default-Stop: 0 1 6
8
+ # X-Interactive: true
9
+ # Short-Description: Start/stop haraka SMTP server
10
+ ### END INIT INFO
11
+ # Thx to author of http://www.thegeekstuff.com/2012/03/lsbinit-script/
12
+
13
+
14
+ DAEMON="/usr/local/bin/haraka"
15
+ NAME="haraka"
16
+ APP_DIR="/etc/haraka"
17
+ CONFIG="$APP_DIR/config/smtp.ini"
18
+ MAX_OPEN_FILES=65535
19
+ EXEC_OPTS="-c $APP_DIR"
20
+ PIDFILE="/var/run/$NAME/smtp.pid"
21
+
22
+ . /lib/lsb/init-functions
23
+
24
+
25
+ case "$1" in
26
+ start)
27
+ # Checked the PID file exists and check the actual status of process
28
+ if [ -e $PIDFILE ]; then
29
+ status_of_proc -p $PIDFILE $DAEMON "$NAME process" && status="0" || status="$?"
30
+ # If the status is SUCCESS then don't need to start again.
31
+ if [ $status = "0" ]; then
32
+ exit # Exit
33
+ fi
34
+ fi
35
+ # Start the daemon.
36
+ log_daemon_msg "Starting the process" "$NAME"
37
+ # Start the daemon with the help of start-stop-daemon
38
+ # Log the message appropriately
39
+ if start-stop-daemon --start --oknodo --pidfile $PIDFILE --exec $DAEMON -- $EXEC_OPTS; then
40
+ log_end_msg 0
41
+ else
42
+ log_end_msg 1
43
+ fi
44
+ ;;
45
+ stop)
46
+ # Stop the daemon.
47
+ if [ -e $PIDFILE ]; then
48
+ status_of_proc -p $PIDFILE $DAEMON "Stoppping the $NAME process" && status="0" || status="$?"
49
+ if [ "$status" = 0 ]; then
50
+ start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
51
+ /bin/rm -rf $PIDFILE
52
+ fi
53
+ else
54
+ log_daemon_msg "$NAME process is not running"
55
+ log_end_msg 0
56
+ fi
57
+ ;;
58
+ restart)
59
+ # Restart the daemon.
60
+ $0 stop && sleep 2 && $0 start
61
+ ;;
62
+ status)
63
+ # Check the status of the process.
64
+ if [ -e $PIDFILE ]; then
65
+ status_of_proc -p $PIDFILE $DAEMON "$NAME process" && exit 0 || exit $?
66
+ else
67
+ log_daemon_msg "$NAME Process is not running"
68
+ log_end_msg 0
69
+ fi
70
+ ;;
71
+ reload)
72
+ # Reload the process. Basically sending some signal to a daemon to reload
73
+ # it configurations.
74
+ if [ -e $PIDFILE ]; then
75
+ start-stop-daemon --stop --oknodo --signal 1 --quiet --pidfile $PIDFILE --name $NAME
76
+ log_success_msg "$NAME process reloaded successfully"
77
+ else
78
+ log_failure_msg "$PIDFILE does not exists"
79
+ fi
80
+ ;;
81
+ *)
82
+ # For invalid arguments, print the usage message.
83
+ echo "Usage: $0 {start|stop|restart|reload|status}"
84
+ exit 2
85
+ ;;
86
+ esac
87
+ exit $?
@@ -0,0 +1,96 @@
1
+ #!/bin/sh
2
+ #
3
+ # Haraka
4
+ #
5
+ # chkconfig: 2345 80 30
6
+ # description: Node.js Mail Server
7
+ #
8
+
9
+ # Source function library.
10
+ . /etc/rc.d/init.d/functions
11
+
12
+ exec="/usr/local/bin/haraka"
13
+ prog="haraka"
14
+ config="/etc/haraka/config/smtp.ini"
15
+
16
+ [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
17
+
18
+ [ -z "$max_open_files" ] && max_open_files=65535
19
+
20
+ lockfile=/var/lock/subsys/$prog
21
+
22
+ start() {
23
+ [ -x $exec ] || exit 5
24
+ [ -f $config ] || exit 6
25
+ echo -n $"Starting $prog: "
26
+ ulimit -n $max_open_files
27
+ daemon "$exec -c /etc/haraka 2>&1 >> /var/log/haraka.log"
28
+ retval=$?
29
+ echo
30
+ [ $retval -eq 0 ] && touch $lockfile
31
+ return $retval
32
+ }
33
+
34
+ stop() {
35
+ echo -n $"Stopping $prog: "
36
+ killproc $prog
37
+ retval=$?
38
+ echo
39
+ rm -f $lockfile
40
+ return $retval
41
+ }
42
+
43
+ restart() {
44
+ stop
45
+ start
46
+ }
47
+
48
+ reload() {
49
+ restart
50
+ }
51
+
52
+ force_reload() {
53
+ restart
54
+ }
55
+
56
+ rh_status() {
57
+ # run checks to determine if the service is running or use generic status
58
+ status $prog
59
+ }
60
+
61
+ rh_status_q() {
62
+ rh_status >/dev/null 2>&1
63
+ }
64
+
65
+
66
+ case "$1" in
67
+ start)
68
+ rh_status_q && exit 0
69
+ $1
70
+ ;;
71
+ stop)
72
+ rh_status_q || exit 0
73
+ $1
74
+ ;;
75
+ restart)
76
+ $1
77
+ ;;
78
+ reload)
79
+ rh_status_q || exit 7
80
+ $1
81
+ ;;
82
+ force-reload)
83
+ force_reload
84
+ ;;
85
+ status)
86
+ rh_status
87
+ ;;
88
+ condrestart|try-restart)
89
+ rh_status_q || exit 0
90
+ restart
91
+ ;;
92
+ *)
93
+ echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
94
+ exit 2
95
+ esac
96
+ exit $?
@@ -0,0 +1,23 @@
1
+ #
2
+ # systemd service file for Haraka
3
+ #
4
+ # Ensure that `daemonize` in `smtp.ini` is set to `false` (which is the default value).
5
+ #
6
+ # Put this file in /etc/systemd/system, modify the paths to suit, then run:
7
+ # sudo systemctl enable haraka
8
+ # sudo systemctl start haraka
9
+ #
10
+
11
+ [Unit]
12
+ Description=Haraka MTA
13
+ After=syslog.target network.target remote-fs.target nss-lookup.target
14
+
15
+ [Service]
16
+ Type=simple
17
+ PIDFile=/var/run/haraka.pid
18
+ ExecStart=/usr/bin/haraka -c /path/to/your/config
19
+ KillMode=process
20
+ PrivateTmp=true
21
+
22
+ [Install]
23
+ WantedBy=multi-user.target
@@ -0,0 +1,81 @@
1
+ #!/bin/sh
2
+
3
+ usage()
4
+ {
5
+ echo "$0 \$plugin_name"
6
+ exit
7
+ }
8
+
9
+ if [ -z "$1" ]; then
10
+ usage
11
+ fi
12
+
13
+ export GITHUB_ORG="haraka"
14
+ export PLUGIN_NAME="haraka-plugin-$1"
15
+ export PLUGIN_REPO="../$PLUGIN_NAME"
16
+ export GIT_CMD="git -C $PLUGIN_REPO"
17
+
18
+ if [ -d "$PLUGIN_REPO" ]; then
19
+ echo "repo exists at $PLUGIN_REPO"
20
+ else
21
+ git clone git@github.com:haraka/haraka-plugin-template.git "$PLUGIN_REPO" || exit
22
+ $GIT_CMD remote rm origin || exit
23
+ $GIT_CMD remote add origin "git@github.com:$GITHUB_ORG/$PLUGIN_NAME.git" || exit
24
+ fi
25
+
26
+ if grep template "$PLUGIN_REPO/README.md"; then
27
+ echo "redressing as $PLUGIN_NAME"
28
+ sed -i '' -e "s/template/${1}/g" "$PLUGIN_REPO/README.md"
29
+
30
+ sed -i '' \
31
+ -e "s/template/${1}/g" \
32
+ -e "s/template\.ini/$1.ini/" \
33
+ "$PLUGIN_REPO/test/index.js"
34
+
35
+ sed -i '' -e "s/template/${1}/g" "$PLUGIN_REPO/package.json"
36
+
37
+ sed -i '' \
38
+ -e "s/_template/_${1}/g" \
39
+ -e "s/template\.ini/$1.ini/" \
40
+ "$PLUGIN_REPO/index.js"
41
+
42
+ $GIT_CMD mv config/template.ini "config/$1.ini"
43
+
44
+ $GIT_CMD add package.json README.md index.js test config
45
+ $GIT_CMD commit -m "publish $1 as NPM module"
46
+
47
+ $GIT_CMD rm redress.sh
48
+ fi
49
+
50
+ if [ -f "docs/plugins/$1.md" ]; then
51
+ echo "copying docs/plugin/$1.md to $PLUGIN_REPO/README.md"
52
+ head -n8 "$PLUGIN_REPO/README.md" > foo.md
53
+ cat "docs/plugins/$1.md" >> foo.md
54
+ tail -n14 "$PLUGIN_REPO/README.md" >> foo.md
55
+ mv foo.md "$PLUGIN_REPO/README.md"
56
+ git rm "docs/plugins/$1.md" || exit
57
+ fi
58
+
59
+ if [ -f "config/$1.ini" ]; then
60
+ echo "copying $1.ini"
61
+ cp "config/$1.ini" "$PLUGIN_REPO/config/$1.ini"
62
+ git rm "config/$1.ini"
63
+ $GIT_CMD add "config/$1.ini"
64
+ fi
65
+
66
+ if [ -f "plugins/$1.js" ]; then
67
+ echo "copying plugins/$1.js"
68
+ cp "plugins/$1.js" "$PLUGIN_REPO/index.js"
69
+ tee "plugins/$1.js" <<DEPRECATED
70
+ exports.register = function () {
71
+ this.logerror('This plugin has moved. See https://github.com/haraka/haraka-plugin-$1');
72
+ }
73
+ DEPRECATED
74
+ $GIT_CMD add index.js
75
+ fi
76
+
77
+ if [ -f "test/plugins/$1.js" ]; then
78
+ echo "copying test/plugins/$1.js"
79
+ cp "test/plugins/$1.js" "$PLUGIN_REPO/test/index.js"
80
+ git rm "test/plugins/$1.js"
81
+ fi
@@ -0,0 +1,27 @@
1
+ # haraka - nodejs email server
2
+ #
3
+ # Ubuntu Upstart script (place in /etc/init and run "initctl start haraka")
4
+ # (Assumes running w/the daemonize plugin)
5
+ #
6
+ # Contributed by "David Weekly" <david@weekly.org>
7
+ #
8
+
9
+ description "Haraka Email Server"
10
+
11
+ start on (local-filesystems and net-device-up IFACE=eth0)
12
+ stop on shutdown
13
+
14
+ respawn
15
+ respawn limit 10 5
16
+ umask 022
17
+ limit nofile 65535 65535
18
+
19
+ console none
20
+
21
+ pre-start script
22
+ test -x /usr/local/bin/haraka || { stop; exit 0; }
23
+ test -c /dev/null || { stop; exit 0; }
24
+ end script
25
+
26
+ expect fork
27
+ exec /usr/local/bin/haraka -c /etc/haraka
@@ -0,0 +1,2 @@
1
+ {"/Users/matt/git/haraka/Haraka/plugins/queue/smtp_forward.js": {"path":"/Users/matt/git/haraka/Haraka/plugins/queue/smtp_forward.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":64}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":63}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":31}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":52}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":32}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":23}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":32}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":41}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":37}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":50}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":5}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":40}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":53}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":5}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":48}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":40}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":68}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":61}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":5}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":61}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":42}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":45}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":31}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":27}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":9}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":23}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":35}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":40}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":44}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":37}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":40}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":36}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":14}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":10}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":15}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":40}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":10}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":5}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":1}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":38}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":47}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":20}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":56}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":61}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":45}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":54}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":12}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":62}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":46}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":5}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":62}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":34}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":65}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":0}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":24}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":1}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":50}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":87}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":75}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":60}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":39}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":20}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":37}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":17}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":69}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":21}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":5}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":47}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":40}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":44}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":33}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":31}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":58}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":46}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":5}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":48}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":10}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":65}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":34}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":43}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":74}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":34}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":53}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":49}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":0}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":48}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":28}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":36}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":46}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":59}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":19}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":5}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":0}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":48}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":52}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":34}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":52}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":34}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":46}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":5}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":0}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":65}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":16}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":1}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":63}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":39}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":20}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":0}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":26}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":21}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":54}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":21}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":5}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":0}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":56}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":46}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":64}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":23}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":5}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":42}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":41}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":65}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":54}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":27}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":9}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":56}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":62}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":5}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":0}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":67}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":56}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":48}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":10}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":1}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":0}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":56}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":98}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":42}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":57}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":0}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":39}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":58}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":48}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":92}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":22}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":13}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":9}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":0}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":30}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":52}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":44}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":9}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":0}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":40}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":87}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":103}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":18}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":9}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":40}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":45}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":45}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":87}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":53}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":42}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":29}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":14}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":51}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":63}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":14}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":51}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":63}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":14}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":9}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":6}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":1}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":0}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":52}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":61}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":48}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":62}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":20}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":5}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":0}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":62}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":58}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":20}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":5}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":0}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":15}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":1}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":53}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":23}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":40}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":39}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":0}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":45}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":63}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":0}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":86}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":31}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":0}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":20}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":0}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":68}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":0}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":27}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":19}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":98}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":9}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":0}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":27}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":53}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":9}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":0}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":32}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":65}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":60}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":27}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":13}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":24}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":9}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":0}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":30}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":45}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":46}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":48}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":22}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":13}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":102}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":18}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":9}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":0}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":41}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":0}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":39}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":42}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":48}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":14}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":16}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":45}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":9}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":0}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":38}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":37}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":54}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":10}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":0}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":37}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":45}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":0}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":64}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":44}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":48}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":22}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":13}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":59}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":33}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":10}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":0}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":38}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":45}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":69}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":10}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":0}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":51}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":45}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":81}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":33}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":10}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":6}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":1}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":0}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":41}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":80}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":80}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":82}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":62}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":38}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":16}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":20}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":65}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":32}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":5}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":55}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":20}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":30}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":46}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":46}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":5}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":13}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":1}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":0}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":49}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":50}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":71}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":0}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":74}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":85}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":5}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":0}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":15}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":118}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":29}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":0}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":28}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":52}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":21}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":5}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":0}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":94}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":0}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":16}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":20}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":49}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":51}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":5}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":0}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":28}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":28}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":40}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":32}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":6}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":0}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":16}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":1}}},"s":{"0":19,"1":19,"2":19,"3":19,"4":19,"5":19,"6":19,"7":19,"8":19,"9":19,"10":19,"11":20,"12":20,"13":20,"14":20,"15":20,"16":20,"17":20,"18":20,"19":0,"20":0,"21":20,"22":20,"23":0,"24":0,"25":20,"26":20,"27":20,"28":20,"29":0,"30":0,"31":0,"32":20,"33":20,"34":20,"35":20,"36":19,"37":20,"38":20,"39":20,"40":20,"41":20,"42":20,"43":20,"44":20,"45":20,"46":20,"47":20,"48":20,"49":20,"50":20,"51":20,"52":0,"53":0,"54":0,"55":0,"56":19,"57":11,"58":0,"59":11,"60":11,"61":11,"62":2,"63":2,"64":2,"65":11,"66":9,"67":8,"68":8,"69":11,"70":11,"71":11,"72":7,"73":7,"74":7,"75":7,"76":19,"77":4,"78":2,"79":2,"80":2,"81":2,"82":19,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":19,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":19,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":19,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":19,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":19,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":19,"311":2,"312":2,"313":2,"314":2,"315":2,"316":2,"317":2,"318":2,"319":2,"320":2,"321":2,"322":2,"323":2,"324":0,"325":0,"326":0,"327":2,"328":2,"329":2,"330":19,"331":5,"332":5,"333":0,"334":5,"335":5,"336":2,"337":2,"338":5,"339":5,"340":5,"341":5,"342":5,"343":5,"344":2,"345":2,"346":2,"347":5,"348":1,"349":1,"350":1,"351":5,"352":5,"353":1,"354":5,"355":5,"356":5,"357":5,"358":6,"359":2,"360":2,"361":5,"362":5},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":363,"column":1}},"locations":[{"start":{"line":1,"column":0},"end":{"line":363,"column":1}}]},"1":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":-1},"end":{"line":37,"column":11}},"locations":[{"start":{"line":12,"column":-1},"end":{"line":37,"column":11}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":5},"end":{"line":18,"column":11}},"locations":[{"start":{"line":18,"column":5},"end":{"line":18,"column":11}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":11},"end":{"line":22,"column":11}},"locations":[{"start":{"line":19,"column":11},"end":{"line":22,"column":11}}]},"4":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":11},"end":{"line":26,"column":11}},"locations":[{"start":{"line":23,"column":11},"end":{"line":26,"column":11}}]},"5":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":11},"end":{"line":33,"column":11}},"locations":[{"start":{"line":29,"column":11},"end":{"line":33,"column":11}}]},"6":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":-1},"end":{"line":57,"column":11}},"locations":[{"start":{"line":38,"column":-1},"end":{"line":57,"column":11}}]},"7":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":34},"end":{"line":77,"column":11}},"locations":[{"start":{"line":57,"column":34},"end":{"line":77,"column":11}}]},"8":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":40},"end":{"line":60,"column":11}},"locations":[{"start":{"line":58,"column":40},"end":{"line":60,"column":11}}]},"9":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":11},"end":{"line":66,"column":5}},"locations":[{"start":{"line":62,"column":11},"end":{"line":66,"column":5}}]},"10":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":54},"end":{"line":63,"column":12}},"locations":[{"start":{"line":62,"column":54},"end":{"line":63,"column":12}}]},"11":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":5},"end":{"line":70,"column":11}},"locations":[{"start":{"line":66,"column":5},"end":{"line":70,"column":11}}]},"12":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":55},"end":{"line":67,"column":12}},"locations":[{"start":{"line":66,"column":55},"end":{"line":67,"column":12}}]},"13":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":12},"end":{"line":70,"column":11}},"locations":[{"start":{"line":67,"column":12},"end":{"line":70,"column":11}}]},"14":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":11},"end":{"line":70,"column":29}},"locations":[{"start":{"line":70,"column":11},"end":{"line":70,"column":29}}]},"15":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":29},"end":{"line":70,"column":49}},"locations":[{"start":{"line":70,"column":29},"end":{"line":70,"column":49}}]},"16":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":51},"end":{"line":71,"column":12}},"locations":[{"start":{"line":70,"column":51},"end":{"line":71,"column":12}}]},"17":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":12},"end":{"line":71,"column":27}},"locations":[{"start":{"line":71,"column":12},"end":{"line":71,"column":27}}]},"18":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":27},"end":{"line":72,"column":12}},"locations":[{"start":{"line":71,"column":27},"end":{"line":72,"column":12}}]},"19":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":12},"end":{"line":72,"column":37}},"locations":[{"start":{"line":72,"column":12},"end":{"line":72,"column":37}}]},"20":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":37},"end":{"line":72,"column":57}},"locations":[{"start":{"line":72,"column":37},"end":{"line":72,"column":57}}]},"21":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":57},"end":{"line":77,"column":10}},"locations":[{"start":{"line":72,"column":57},"end":{"line":77,"column":10}}]},"22":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":43},"end":{"line":83,"column":11}},"locations":[{"start":{"line":77,"column":43},"end":{"line":83,"column":11}}]},"23":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":51},"end":{"line":83,"column":10}},"locations":[{"start":{"line":78,"column":51},"end":{"line":83,"column":10}}]},"24":{"type":"branch","line":311,"loc":{"start":{"line":311,"column":39},"end":{"line":331,"column":11}},"locations":[{"start":{"line":311,"column":39},"end":{"line":331,"column":11}}]},"25":{"type":"branch","line":319,"loc":{"start":{"line":319,"column":37},"end":{"line":320,"column":11}},"locations":[{"start":{"line":319,"column":37},"end":{"line":320,"column":11}}]},"26":{"type":"branch","line":320,"loc":{"start":{"line":320,"column":6},"end":{"line":320,"column":10}},"locations":[{"start":{"line":320,"column":6},"end":{"line":320,"column":10}}]},"27":{"type":"branch","line":322,"loc":{"start":{"line":322,"column":48},"end":{"line":323,"column":12}},"locations":[{"start":{"line":322,"column":48},"end":{"line":323,"column":12}}]},"28":{"type":"branch","line":324,"loc":{"start":{"line":324,"column":11},"end":{"line":328,"column":12}},"locations":[{"start":{"line":324,"column":11},"end":{"line":328,"column":12}}]},"29":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":30},"end":{"line":363,"column":1}},"locations":[{"start":{"line":331,"column":30},"end":{"line":363,"column":1}}]},"30":{"type":"branch","line":333,"loc":{"start":{"line":333,"column":24},"end":{"line":333,"column":69}},"locations":[{"start":{"line":333,"column":24},"end":{"line":333,"column":69}}]},"31":{"type":"branch","line":334,"loc":{"start":{"line":334,"column":-1},"end":{"line":335,"column":11}},"locations":[{"start":{"line":334,"column":-1},"end":{"line":335,"column":11}}]},"32":{"type":"branch","line":335,"loc":{"start":{"line":335,"column":43},"end":{"line":336,"column":9}},"locations":[{"start":{"line":335,"column":43},"end":{"line":336,"column":9}}]},"33":{"type":"branch","line":336,"loc":{"start":{"line":336,"column":11},"end":{"line":339,"column":11}},"locations":[{"start":{"line":336,"column":11},"end":{"line":339,"column":11}}]},"34":{"type":"branch","line":339,"loc":{"start":{"line":339,"column":11},"end":{"line":340,"column":67}},"locations":[{"start":{"line":339,"column":11},"end":{"line":340,"column":67}}]},"35":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":67},"end":{"line":340,"column":108}},"locations":[{"start":{"line":340,"column":67},"end":{"line":340,"column":108}}]},"36":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":109},"end":{"line":341,"column":12}},"locations":[{"start":{"line":340,"column":109},"end":{"line":341,"column":12}}]},"37":{"type":"branch","line":344,"loc":{"start":{"line":344,"column":11},"end":{"line":348,"column":11}},"locations":[{"start":{"line":344,"column":11},"end":{"line":348,"column":11}}]},"38":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":11},"end":{"line":352,"column":40}},"locations":[{"start":{"line":348,"column":11},"end":{"line":352,"column":40}}]},"39":{"type":"branch","line":352,"loc":{"start":{"line":352,"column":40},"end":{"line":353,"column":11}},"locations":[{"start":{"line":352,"column":40},"end":{"line":353,"column":11}}]},"40":{"type":"branch","line":353,"loc":{"start":{"line":353,"column":36},"end":{"line":354,"column":5}},"locations":[{"start":{"line":353,"column":36},"end":{"line":354,"column":5}}]},"41":{"type":"branch","line":356,"loc":{"start":{"line":356,"column":-1},"end":{"line":356,"column":4}},"locations":[{"start":{"line":356,"column":-1},"end":{"line":356,"column":4}}]},"42":{"type":"branch","line":358,"loc":{"start":{"line":358,"column":4},"end":{"line":362,"column":10}},"locations":[{"start":{"line":358,"column":4},"end":{"line":362,"column":10}}]},"43":{"type":"branch","line":359,"loc":{"start":{"line":359,"column":6},"end":{"line":359,"column":12}},"locations":[{"start":{"line":359,"column":6},"end":{"line":359,"column":12}}]},"44":{"type":"branch","line":359,"loc":{"start":{"line":359,"column":12},"end":{"line":362,"column":9}},"locations":[{"start":{"line":359,"column":12},"end":{"line":362,"column":9}}]}},"b":{"0":[19],"1":[20],"2":[0],"3":[0],"4":[0],"5":[0],"6":[20],"7":[11],"8":[0],"9":[2],"10":[0],"11":[9],"12":[1],"13":[8],"14":[10],"15":[1],"16":[0],"17":[10],"18":[2],"19":[8],"20":[1],"21":[7],"22":[4],"23":[2],"24":[2],"25":[1],"26":[0],"27":[1],"28":[0],"29":[5],"30":[3],"31":[0],"32":[2],"33":[2],"34":[3],"35":[0],"36":[3],"37":[2],"38":[1],"39":[0],"40":[1],"41":[0],"42":[6],"43":[4],"44":[2]},"fnMap":{"0":{"name":"exports.register","decl":{"start":{"line":12,"column":-1},"end":{"line":37,"column":11}},"loc":{"start":{"line":12,"column":-1},"end":{"line":37,"column":11}},"line":12},"1":{"name":"exports.load_smtp_forward_ini","decl":{"start":{"line":38,"column":-1},"end":{"line":57,"column":11}},"loc":{"start":{"line":38,"column":-1},"end":{"line":57,"column":11}},"line":38},"2":{"name":"exports.get_config","decl":{"start":{"line":57,"column":34},"end":{"line":77,"column":11}},"loc":{"start":{"line":57,"column":34},"end":{"line":77,"column":11}},"line":57},"3":{"name":"exports.is_outbound_enabled","decl":{"start":{"line":77,"column":43},"end":{"line":83,"column":11}},"loc":{"start":{"line":77,"column":43},"end":{"line":83,"column":11}},"line":77},"4":{"name":"exports.check_sender","decl":{"start":{"line":83,"column":36},"end":{"line":108,"column":11}},"loc":{"start":{"line":83,"column":36},"end":{"line":108,"column":11}},"line":83},"5":{"name":"exports.set_queue","decl":{"start":{"line":108,"column":33},"end":{"line":139,"column":11}},"loc":{"start":{"line":108,"column":33},"end":{"line":139,"column":11}},"line":108},"6":{"name":"exports.check_recipient","decl":{"start":{"line":139,"column":39},"end":{"line":171,"column":11}},"loc":{"start":{"line":139,"column":39},"end":{"line":171,"column":11}},"line":139},"7":{"name":"exports.auth","decl":{"start":{"line":171,"column":28},"end":{"line":214,"column":11}},"loc":{"start":{"line":171,"column":28},"end":{"line":214,"column":11}},"line":171},"8":{"name":"exports.forward_enabled","decl":{"start":{"line":214,"column":39},"end":{"line":229,"column":11}},"loc":{"start":{"line":214,"column":39},"end":{"line":229,"column":11}},"line":214},"9":{"name":"exports.queue_forward","decl":{"start":{"line":229,"column":37},"end":{"line":311,"column":11}},"loc":{"start":{"line":229,"column":37},"end":{"line":311,"column":11}},"line":229},"10":{"name":"exports.get_mx_next_hop","decl":{"start":{"line":311,"column":39},"end":{"line":331,"column":11}},"loc":{"start":{"line":311,"column":39},"end":{"line":331,"column":11}},"line":311},"11":{"name":"exports.get_mx","decl":{"start":{"line":331,"column":30},"end":{"line":363,"column":1}},"loc":{"start":{"line":331,"column":30},"end":{"line":363,"column":1}},"line":331}},"f":{"0":20,"1":20,"2":11,"3":4,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":2,"11":5}}
2
+ }