From 691cdc659c608a40c7e3db456bfb9c06a8b3143d Mon Sep 17 00:00:00 2001 From: bossiel Date: Sun, 30 May 2010 23:45:31 +0000 Subject: [PATCH] General update. --- trunk/bindings/_common/SipSession.cxx | 8 + trunk/bindings/_common/SipSession.h | 1 + trunk/bindings/_common/SipStack.i | 40 +- trunk/bindings/_common/tinyWRAP.i | 3 + trunk/bindings/csharp/MessagingEvent.cs | 2 +- trunk/bindings/csharp/SipSession.cs | 5 + trunk/bindings/csharp/test/Program.cs | 2 - trunk/bindings/csharp/tinyWRAP.cs | 10 + trunk/bindings/csharp/tinyWRAP.suo | Bin 124416 -> 127488 bytes trunk/bindings/csharp/tinyWRAPPINVOKE.cs | 33 + trunk/bindings/csharp/tinyWRAP_wrap.cxx | 114 + .../csharp/tsip_message_event_type_t.cs | 2 - .../csharp/tsip_options_event_type_t.cs | 2 - .../csharp/tsip_publish_event_type_t.cs | 4 - .../csharp/tsip_register_event_type_t.cs | 4 - .../csharp/tsip_subscribe_event_type_t.cs | 6 - trunk/bindings/java/MessagingEvent.java | 2 +- trunk/bindings/java/SipSession.java | 4 + .../bindings/java/android/MessagingEvent.java | 2 +- trunk/bindings/java/android/SipSession.java | 4 + trunk/bindings/java/android/tinyWRAP.java | 2 +- .../java/android/tinyWRAPConstants.java | 22 + trunk/bindings/java/android/tinyWRAPJNI.java | 1 + trunk/bindings/java/android/tinyWRAP_wrap.cxx | 17 + .../android/tsip_message_event_type_t.java | 2 - .../android/tsip_options_event_type_t.java | 2 - .../android/tsip_publish_event_type_t.java | 4 - .../android/tsip_register_event_type_t.java | 4 - .../android/tsip_subscribe_event_type_t.java | 6 - trunk/bindings/java/tinyWRAP.java | 2 +- trunk/bindings/java/tinyWRAPConstants.java | 22 + trunk/bindings/java/tinyWRAPJNI.java | 1 + trunk/bindings/java/tinyWRAP_wrap.cxx | 17 + .../java/tsip_message_event_type_t.java | 2 - .../java/tsip_options_event_type_t.java | 2 - .../java/tsip_publish_event_type_t.java | 4 - .../java/tsip_register_event_type_t.java | 4 - .../java/tsip_subscribe_event_type_t.java | 6 - trunk/bindings/perl/tinyWRAP.pm | 29 +- trunk/bindings/perl/tinyWRAP_wrap.cxx | 181 +- trunk/bindings/python/tinyWRAP.py | 29 +- trunk/bindings/python/tinyWRAP_wrap.cxx | 84 +- trunk/tinyDEMO/cmd.h | 1 + trunk/tinyDEMO/common.c | 73 +- trunk/tinyDEMO/core-ericsson.sn | 8 +- trunk/tinyDEMO/dssl.c | 4523 +++++++++-------- trunk/tinyDEMO/dssl.rl | 1 + trunk/tinyDEMO/invite.c | 2 +- trunk/tinyDEMO/message.c | 35 +- trunk/tinyDEMO/message.h | 2 +- trunk/tinyDEMO/options.c | 12 +- trunk/tinyDEMO/publish.c | 39 +- trunk/tinyDEMO/publish.h | 2 +- trunk/tinyDEMO/register.c | 42 +- trunk/tinyDEMO/register.h | 2 +- trunk/tinyDEMO/subscribe.c | 45 +- trunk/tinyDEMO/subscribe.h | 2 +- trunk/tinyHTTP/src/thttp_session.c | 5 +- trunk/tinySAK/src/tsk_list.c | 43 + trunk/tinySAK/src/tsk_list.h | 6 + trunk/tinySAK/src/tsk_object.c | 9 +- trunk/tinySAK/src/tsk_runnable.c | 26 +- trunk/tinySAK/src/tsk_runnable.h | 40 +- trunk/tinySAK/src/tsk_timer.c | 12 +- .../include/tinysip/api/tsip_api_invite.h | 2 - .../include/tinysip/api/tsip_api_message.h | 2 - .../include/tinysip/api/tsip_api_options.h | 2 - .../include/tinysip/api/tsip_api_publish.h | 4 - .../include/tinysip/api/tsip_api_register.h | 6 +- .../include/tinysip/api/tsip_api_subscribe.h | 6 - .../include/tinysip/dialogs/tsip_dialog.h | 6 +- trunk/tinySIP/include/tinysip/tsip_event.h | 44 +- trunk/tinySIP/include/tinysip/tsip_ssession.h | 5 +- trunk/tinySIP/src/dialogs/tsip_dialog.c | 12 +- .../tinySIP/src/dialogs/tsip_dialog_invite.c | 3 +- trunk/tinySIP/src/dialogs/tsip_dialog_layer.c | 55 +- .../tinySIP/src/dialogs/tsip_dialog_message.c | 5 +- .../tinySIP/src/dialogs/tsip_dialog_options.c | 5 +- .../src/dialogs/tsip_dialog_publish.client.c | 89 +- .../src/dialogs/tsip_dialog_register.client.c | 68 +- .../dialogs/tsip_dialog_subscribe.client.c | 72 +- trunk/tinySIP/src/tsip.c | 30 + trunk/tinySIP/src/tsip_event.c | 21 +- trunk/tinySIP/src/tsip_ssession.c | 6 + 84 files changed, 3309 insertions(+), 2755 deletions(-) create mode 100644 trunk/bindings/java/android/tinyWRAPConstants.java create mode 100644 trunk/bindings/java/tinyWRAPConstants.java diff --git a/trunk/bindings/_common/SipSession.cxx b/trunk/bindings/_common/SipSession.cxx index 61bbd3f4..ae4a5519 100644 --- a/trunk/bindings/_common/SipSession.cxx +++ b/trunk/bindings/_common/SipSession.cxx @@ -135,6 +135,14 @@ bool SipSession::setToUri(const char* toUri) return (ret == 0); } +bool SipSession::setSilentHangup(bool silent) +{ + int ret = tsip_ssession_set(this->handle, + TSIP_SSESSION_SET_SILENT_HANGUP(silent ? tsk_true : tsk_false), + TSIP_SSESSION_SET_NULL()); + return (ret == 0); +} + unsigned SipSession::getId() { return (unsigned)tsip_ssession_get_id(this->handle); diff --git a/trunk/bindings/_common/SipSession.h b/trunk/bindings/_common/SipSession.h index 7f003cdb..6f27258e 100644 --- a/trunk/bindings/_common/SipSession.h +++ b/trunk/bindings/_common/SipSession.h @@ -47,6 +47,7 @@ public: bool setExpires(unsigned expires); bool setFromUri(const char* fromUri); bool setToUri(const char* toUri); + bool setSilentHangup(bool silent); unsigned getId(); #if !defined(SWIG) diff --git a/trunk/bindings/_common/SipStack.i b/trunk/bindings/_common/SipStack.i index 0b5a8b4b..8638e39c 100644 --- a/trunk/bindings/_common/SipStack.i +++ b/trunk/bindings/_common/SipStack.i @@ -46,17 +46,33 @@ typedef enum tsip_event_type_e } tsip_event_type_t; +// 7xx ==> errors +#define tsip_event_code_dialog_transport_error 702 +#define tsip_event_code_dialog_global_error 703 +#define tsip_event_code_dialog_message_error 704 + +// 8xx ==> success +#define tsip_event_code_dialog_request_incoming 800 +#define tsip_event_code_dialog_request_cancelled 801 +#define tsip_event_code_dialog_request_sent 802 + +// 9xx ==> Informational +#define tsip_event_code_dialog_connecting 900 +#define tsip_event_code_dialog_connected 901 +#define tsip_event_code_dialog_terminating 902 +#define tsip_event_code_dialog_terminated 903 +#define tsip_event_code_stack_started 950 +#define tsip_event_code_stack_stopped 951 +#define tsip_event_code_stack_failed_to_start 952 +#define tsip_event_code_stack_failed_to_stop 953 + /* ====== From "tinySIP\include\tinysip\tsip_api_register.h" ====== */ typedef enum tsip_register_event_type_e { tsip_i_register, - tsip_ai_register, - tsip_o_register, tsip_ao_register, - + tsip_i_unregister, - tsip_ai_unregister, - tsip_o_unregister, tsip_ao_unregister, } tsip_register_event_type_t; @@ -65,18 +81,12 @@ tsip_register_event_type_t; typedef enum tsip_subscribe_event_type_e { tsip_i_subscribe, - tsip_ai_subscribe, - tsip_o_subscribe, tsip_ao_subscribe, tsip_i_unsubscribe, - tsip_ai_unsubscribe, - tsip_o_unsubscribe, tsip_ao_unsubscribe, tsip_i_notify, - tsip_ai_notify, - tsip_o_notify, tsip_ao_notify } tsip_subscribe_event_type_t; @@ -85,13 +95,9 @@ tsip_subscribe_event_type_t; typedef enum tsip_publish_event_type_e { tsip_i_publish, - tsip_ai_publish, - tsip_o_publish, tsip_ao_publish, tsip_i_unpublish, - tsip_ai_unpublish, - tsip_o_unpublish, tsip_ao_unpublish } tsip_publish_event_type_t; @@ -100,8 +106,6 @@ tsip_publish_event_type_t; typedef enum tsip_message_event_type_e { tsip_i_message, - tsip_ai_message, - tsip_o_message, tsip_ao_message, } tsip_message_event_type_t; @@ -110,8 +114,6 @@ tsip_message_event_type_t; typedef enum tsip_options_event_type_e { tsip_i_options, - tsip_ai_options, - tsip_o_options, tsip_ao_options, } tsip_options_event_type_t; \ No newline at end of file diff --git a/trunk/bindings/_common/tinyWRAP.i b/trunk/bindings/_common/tinyWRAP.i index fab6a7ad..1f687ec1 100644 --- a/trunk/bindings/_common/tinyWRAP.i +++ b/trunk/bindings/_common/tinyWRAP.i @@ -3,6 +3,9 @@ %newobject getSipHeaderValue; %newobject getSipHeaderParamValue; +// don't seem to work +%newobject takeSessionOwnership; + /* Sip Stack */ %include SipStack.i diff --git a/trunk/bindings/csharp/MessagingEvent.cs b/trunk/bindings/csharp/MessagingEvent.cs index 51f2b8d3..b4a52054 100644 --- a/trunk/bindings/csharp/MessagingEvent.cs +++ b/trunk/bindings/csharp/MessagingEvent.cs @@ -50,7 +50,7 @@ public class MessagingEvent : SipEvent { public MessagingSession takeSessionOwnership() { IntPtr cPtr = tinyWRAPPINVOKE.MessagingEvent_takeSessionOwnership(swigCPtr); - MessagingSession ret = (cPtr == IntPtr.Zero) ? null : new MessagingSession(cPtr, false); + MessagingSession ret = (cPtr == IntPtr.Zero) ? null : new MessagingSession(cPtr, true); return ret; } diff --git a/trunk/bindings/csharp/SipSession.cs b/trunk/bindings/csharp/SipSession.cs index 9b9760c4..aa902516 100644 --- a/trunk/bindings/csharp/SipSession.cs +++ b/trunk/bindings/csharp/SipSession.cs @@ -86,6 +86,11 @@ public class SipSession : IDisposable { return ret; } + public bool setSilentHangup(bool silent) { + bool ret = tinyWRAPPINVOKE.SipSession_setSilentHangup(swigCPtr, silent); + return ret; + } + public uint getId() { uint ret = tinyWRAPPINVOKE.SipSession_getId(swigCPtr); return ret; diff --git a/trunk/bindings/csharp/test/Program.cs b/trunk/bindings/csharp/test/Program.cs index cff86d62..101af9a9 100644 --- a/trunk/bindings/csharp/test/Program.cs +++ b/trunk/bindings/csharp/test/Program.cs @@ -237,9 +237,7 @@ namespace test session.Reject(); } break; - case tsip_message_event_type_t.tsip_ai_message: case tsip_message_event_type_t.tsip_ao_message: - case tsip_message_event_type_t.tsip_o_message: break; } diff --git a/trunk/bindings/csharp/tinyWRAP.cs b/trunk/bindings/csharp/tinyWRAP.cs index b8ef1af9..c5cca38c 100644 --- a/trunk/bindings/csharp/tinyWRAP.cs +++ b/trunk/bindings/csharp/tinyWRAP.cs @@ -11,4 +11,14 @@ using System; using System.Runtime.InteropServices; public class tinyWRAP { + public static readonly int tsip_event_code_dialog_transport_error = tinyWRAPPINVOKE.tsip_event_code_dialog_transport_error_get(); + public static readonly int tsip_event_code_global_error = tinyWRAPPINVOKE.tsip_event_code_global_error_get(); + public static readonly int tsip_event_code_dialog_message_error = tinyWRAPPINVOKE.tsip_event_code_dialog_message_error_get(); + public static readonly int tsip_event_code_dialog_request_incoming = tinyWRAPPINVOKE.tsip_event_code_dialog_request_incoming_get(); + public static readonly int tsip_event_code_dialog_request_cancelled = tinyWRAPPINVOKE.tsip_event_code_dialog_request_cancelled_get(); + public static readonly int tsip_event_code_dialog_request_sent = tinyWRAPPINVOKE.tsip_event_code_dialog_request_sent_get(); + public static readonly int tsip_event_code_dialog_connecting = tinyWRAPPINVOKE.tsip_event_code_dialog_connecting_get(); + public static readonly int tsip_event_code_dialog_connected = tinyWRAPPINVOKE.tsip_event_code_dialog_connected_get(); + public static readonly int tsip_event_code_dialog_terminating = tinyWRAPPINVOKE.tsip_event_code_dialog_terminating_get(); + public static readonly int tsip_event_code_dialog_terminated = tinyWRAPPINVOKE.tsip_event_code_dialog_terminated_get(); } diff --git a/trunk/bindings/csharp/tinyWRAP.suo b/trunk/bindings/csharp/tinyWRAP.suo index 11a79be0c507c4876c372226830a0c6398f21468..0126ea535fbc9d5e4e42ae0f04cb65fc9369d1f9 100644 GIT binary patch delta 13885 zcmb_j2Y6If+P>dpW)dJk2qc7-gcL#vDG;g{CJCWLln98FPyz`_kP?%jh)RMYAfjT9 z=DL7L5v(XMETgCpfmKmfVp%MU3fRlP%ew5k_^;%D-#cf9vF)<%|2@2OzWbi&oA|Hw8zCg;4csv@0=jMn+ zkqIg%rkAR0lPZSifi|JGx^{UgFE-P$9~KkT4ehRQbc2?1v7+bN9e0WcoGrk$h{EFx zzNKNP;^-dgSlcY+YMZJW);QI==vY-4J-)8}ks)0WAD1_{sIY3moYGnD>Y|Ey)g@I6 zDoTo$%$qyCtaN@_bvg5J4w=7j?%ZsuhSA-ZU{B0hv0JTsu0x|b(qc$mC$}>P@#UjD zOFJF4nTIo_k7r@*tKsT+`%LBPb$4BAp3~|NXP}}^HpCO5YH4agSTm@B-a41s7}oL! zMDJbpy%%=Zs7KN!s^h&fRYR}V+g#~3)jA!SXAW0KGZ#m?Z>TJtS6o?LG^^TORWZLT zt=i-2(_ptPE;H{=kbY{^fRu5%`agQ#>RIJTSzT0BT2_H#f6!@ZcpgL&65N?R@H`ag ztacArYz;q^I&hdzaStpHPr{%LN2hZXsm})vw3URYgh5x?%fT!6pd{aj-8g8n&EEPu z*LL;YWqYg!_3Rqr6noEivhP<7Z+Gqyiz2!M$jKTz3@QBq4nJ0nTqjS{bx>K{LJKSJ3v`^c@~Y_6Jr1N_wUts zQb+&8ZlAL1>lajZL5#zO9vyE^JuH!! zr#r?!d%&MR!#V2a{wYHZ(LZJrpWc4ndjCg%0{*_nn}R$5i;E-fi4Ug%!nn{#UVfDRtlq_Z|( zURgyMKBc_qYo9W4>LWYu5}UcXQo5;DHBN8p)AE+o%{;6Q+cO=1#A_T<=Vul;jU=eO z0xz%Jv&J}uz0xDVHTw-rtX@#kZKxVjGAyjBcwYSMin*n#HrHi-nIQ2hF5RI%n>bFn zx2LN3HQAoWN((}qJ@C%U4E0@Ak|(xevdy;0r*FD$rcK%I%~Gq=W7OJJZgW?>badQ} zQpPLk+##_7-CJ#x7*)msba)8{Pnl6_%m=EBV#AHFL|t~egKSVQG+wO=A9b4NUyyJW zf3@9n%lu_xp1NNqs)?)bs;kQ5+bVa}3R@M6KI&Utas#i{Vhaj=1%RmCx2H3sR-T00 z582hZ1EW>!>gFo@$?&LIs7MKlosPoOj9I9hVQlrBzVi;-o||gL>6;&_wq&qsxY=bc z+AkB#_@R6mq%{-kVIjZv3&gxVbyE?gIg^Xp(UiQg)tEcv;{a}DiB6%Jw}He5q1JP1HFJ)U?30=Fiir& zL?9VR0lESCKq?T6_wR|2cKs3d)_OX^44aW)WNM->!YrVlejcF19CdnYN_Pjc8KxOF zDgBF)c%BFp09OFt0V-o##%Pu`84pu{B48>o4VVth0E&T`z$~ByCaIoW^vuxiU#L4)12Vc1!MMzNI-G z9Zy$;@&dr+ItDldP+kPc(F1u2pd3@zZ%=5pn=H`5?f16&5R4Wd|%NivyL(NnZVXH!hu?hLkK{kUi ziwjlL>p3;!Ee6vDVX#|*&C}p&%U%fP={FM?Xg}cbXmsKaB-lP2&)iBW!94vD@ao_j z%T>W~m(1kcmrDND7{;fFWyzG!08A|7OMo2pvp`qiuYjLB4?Pa}XAnoniC#}zgnqk@ zP-xdhbC*N^3ZV2Shw?2MfCs+j5N$XN`sL6mS80y=7;RUmIhu^a&y@(rYmS9n%?QXu z%~78Oon=hcTn==ZVz#c3#2Od$3h=lJ)a9KSW&Z7 zYTvCLdeN9W3ggnWF`^9aE|fuC4D@hQ4RFIb{K!-2wMQxla~4xF9UPNS!-5 z#^&RBLcavQ8y$ct4$vy)7^270<*`VzWZR5&-?jst+_Q{ zI;*00qg$sO`O7n$%3LO!n(nfecXeP>^d_hEJPhk-DKG*|X`hnc`v_cLT21sTU$-;Rvt<`by-A^hVmN z>?a6606qjx0c_JV0F#_U$i+MqO^X`%_$-7f8EYGQTh%5Q$yu8eH>z+dHx_{6|-cpCewX}{D=IThf zDV&u*jILtnjc6-p#b#tENsqP8F$txeym?V_bBJ?ZQR$N6dG%2;ct-~bRl^$5RVNlH z=lpi|9dG{TBXw+2XYNVM18=!8TE|06RK~&{|Fm?7ZyBVG&bHqj8 zy~j^`cL}`qxj2;gPDg2U&5-4Km3}LHsq5p-V-6fY-bs=bJ95ZFjD{gBJ^zr{JMGfEO^*b(n;(kJbn1Fb-iCfWj8DvR1OZ zef?Fk#{NwA{te8|>hCCjKCD9^AG5_$>C%D45R(CVhg@^`Z23K%f64D@$QX5w*^gyS z{k8SyoD8m?&StO<;}QC6n-AUB5bWhVfHDeT!RG!1nQP8Skajx;ic_7b?de^aEGMKs zQ{uhxE_p|6OAYULIpVZuvt5FFJt_p}4It-7JRS`Pz!$t|@68@Aha{>@`*I)I>ffQE zRW)zaNcqZvVah5E#XyQin1hhdtm+Wxl;N7AJ_0&vo>^$;0=O|ycvK-r;gJQkw2ma? za)D}ac7zMH9h+u0k06v; zP;*S%pgG%dTm2Y0S$Yb!^jH2g6h?ofxvQbmpP=}6|6J(bYR;kaodC|M^KGs$Z^hQ zq|jGqEoT7N0F>zfxf1jB0n)anBh=ZNq7$HB%2*7YYs(Fq>ws{n)@yZ$z*r8jXYK%) zmR(#AIDz{CKetnJPibxy!nGJ>2n>UZoWI~#pfkfp&9QQ?1C-MM?XCsR7>4)zDRQGt zs?75ll45S2CgUBSAZC&G{4@y-nG}j_xTAz1v}>KuL>Qi%0nLFHKseA6Xa%$eB7inP zB+wRM8cx1w>bQl=kJBW0OA_^SGQw^^3eX+s0rUiV0jWT5APqA%3vQU0t@SZD^a5$4s^;g+-qiRjP26G1PAEDiFK3aIWkUHG6%kn)XmPGq#7E zsaq9hhMkdAvriRL9IF)fj&)*F5l<$m(c4>j``jz9i8XQ8VPtb1d{U2gRNB}Doh#Aa zAZ{OYj)!M7mkXV5j72kC`gxwW(%9zS!e%c{pU$c~;tI#2S}jT`9thpJiCPeZNcH?K`cA zTN$Xm>bfSgzMnMI4;NR>a?+6109&s&a63R*2axLw+yhYV1IYCPxGYdM0Oa}t4*--c z068w$TLH=rfLt>0FaW7B9>Xt5u1${vl>GoXw1MSpBM4j)kvl{J;$LRyExc+mK7W~M zy8>KtC~pGfIstD1lv4nYxCY&mGXUjNfQCJQ&j5=5)*%o2R~CaiJ%qGN0{&NXb`azS z0ZuBA=9*(`wa{EE%`t838cjxPvKz?unv2sMGwiClWX&dc&QL$R&ncFlSBCxh$j^Sd> zaewu<2AkDiBen)7wOey`geb~dPnQRA^?uU7>E4RSg#g9B=~CYXFheiELRje20Ocq^ zjKU=!8$Tub4)W_+l|m1O$r6&^NsxXckJ7djDb{YL+aNt2wsT zSB!xCO>@-Ymxo%l`BuEOw@CwggJ$f7e`xz3`{Zm%elub;kp!I_zUNraJ)!gFjWf== zZ9~ZIj^CIlJPhfqtpgF$j@DdG4j!)5hO>eUOQ4gUtvMbp%1A(N&|Dt$rM7*m#bpog zF=N9`jN_W-9lchvM1Kuik)5=4hHc0FV)II!;IBNIcB~g$UB7rUz8+rNk$QX|bk_^6 z{Tlk%k@5ZJ`Fbg!E9q#*M|D06F0+Y+Y)@bvYcU+}u-^Ah>h&wr&Dssp+py7jeT2RheKxj+x%i;r+k+=t`E!Bh@=6&GuuLww6SPiia+KKs2ZUZ;YYeWr{@rE) zbiZLGboS=Wn&Svq1vr7*gSZDY_n_u(L%0l}>;wGyaj9i~FKDg=;UVq92F^L$9^U{c zCjfuqx1lrfdzzzu3P=V%0%%9>3xKWvHQ?vC)b{5y2tP-^gLa|*1%vbPj{wE*Lr{;0 zA^RX%C(ec5jk!Sn)w0Rq;9oX5R&)|07YbW^nC3zdnp^TE5w-cL>x%nl*k%I1ynVNf zO`B5(3*Y!q%gv}U=L@Sg1sM1$6#sT+n%eLWu~nYXhBh@B+Q3nsWXF&7q_Z@~O7p`#<;SZ#X={iH;35FwCkkOTbV8EB=FZBUi`Jk0a42?WJ|1i zet(|#gA|#}Grze&+la zaR<`nq%=>tgt~G8@LqLN@@4QPS_hU4t6}gnL(KULWVCtTUVOJYyD}bM-jhP`@zI=f zSSFcqCnfCvEo*aQJZ@_i9G3C+zFGbHo6Gme5RB0%&Cp~qZW&C#Z5IA{R9dg``uGRWf9U`y}Y7A%8;D?5Eb8ZBZfSUkvw*tigj82ESAC{^P(O2)Zv_&7?Lpj5=v@IG(wOcV8a@y702%<2C*QHHHfhyc40s z1R3(94h=hMjwbx;3>Ffrxlz!0T%;suj(Q?=rcKfuUxY3Wg{MNT;u-{ z!!2l_=JKHPSV_4|bJT}GXIlRC2croWey%|1_lejQ*^Gd2ht}%Fk(xoK&}hG0x0BsFIEosphF+0brdi@XRlnEJM6`-ogkm220WZpUYrh@z zYj>dpbH+(|-rSrh&d|m9gSKL$(#$?6lX5fr^hK}y=iWSDnlk$0_QtJw;6(?)mDz_G z|JoW)`(eiM{F_yC9`n_upcH`yz5 zeznW-6OTYWksWFNZl8?Bg7E8K?I+ndnLWy!@pXm4GIoRW#QyL@i2x%rfI_x$G?M(RgK#t%{Px+;(-CnQ1p&Uv8yxgNc_(u t*TwIk_~YUM=BGWRqyEC#lYfsN{7Ka5>~6K1`TBf`@_X(rcPtXy{{brReboQ} delta 13508 zcmbuG34Bf0+Q#=fIp-iEl87K8LJUEWkP`EWL~5#eDykw>C=qeYa9gs-?u3*| zXH9c@d+0z)YpQD~Ev*jf;&!_Iv~_z+TfXPnd3SnlfA@FmyWgu%)>{Al?zQ(`^IrS3 z=zNW$!!^pw9crI`+0j~M>JJ@FBR3g_;ej%szEBr)c%JI$PY+2`;SoQ~9`v_g52+Av z&k4Q6dC2uFqAv6EajL0Kafa!lnoj>BSC(?7ISj*J=}uQF(SN1JK!@7^Flzqh=?xv` ziUV^0hAsnLht;S?esArg4!0r=x)N;Y-~gB9otE^pd&*YdR67ua5XR z$sLKrN~L$ziPdLa(Uwx2&YEr`!cfXEOi!X}*km`HjzhG+Jf9ZzKi9s!&ZC`?9^_vZ zk;rGAs9%ohY?gkjLj66X-d4J_UXo6VNh^-d)O($&t`6`$tQSWQvTnZhZ})jQ`l#D@ z5l5q|S?&5r?&5tKh8|wj*_^Xi#p&l_#+bg-s^&m8`cs;INBkkSb@p~GUD<>Y*(3cw> zbG1UGPW4Ud%dti7u0Uy7{w0kMI&@}qs^1%bI84uN_i%B?)Z*k!B6n-JTy*Ot$pdRX zhNxZg`f~EInk@a_K>KoM_{L+$^)nsDsSehC3`=dc)zi_T=cZ;mQgijg%bJ)8^;J#1 zd0dq33uhS0%l|~T@eb#cWBb0SulA_WeFsMC%AP+u&lG<*R9BvgYZH&$k{}js zCkYu(hgkRBg~j`?_i7VTe?wxADaS##79ZU&c(;2c}c4OQr0gH=gD^6^7N&f(;7E9 zyR#+zm?zspuEb}cBvyFq>yOvRgq<6|wG7zu@h|9K5#oGq?U%Lv$%B7#hQ0e!SF0L$ z4S&k;dWs!Gdq)g&vDIb=wX6}NbpPmNzjx$e<>MuJ#fA{CS_^6ikmH;#Xv(Ln*HQG5Fc$3!3dpc6puNdvkUe8I`jtgCdB&Qjj$4W z3)%zih2DnVf%ZZBp~KKY=n(WS#Pj}w@CbAiItCqwuIYYbH#@H)roR~bNQjXV)ZEXF zi!+lGRkT^zT-DZJP95uZ_spL^YnI=0>m`SCGw(8OVv2JFBY6|QakgMC<8FJVY=Lr^ zpM9u81ECM8AC)c|5wGK?Y^$Z(;@MaW90FZukSNqwI=9sExh>tQ1(NN4s|#=LP*zi| zM}ZGOhE}cm=$=!v^y+2Zi@*1j)K{6#_PO2j^@`Io^pG;QzkFI&i2FP|FGl#U<}G(P z`a1ke?p*EAmHF{z^VVvJUh8%1OZSB7gyByA6LXd;^_X9+ysnBb;Pwh}3%s?yLAOx2 z(ov!G)w~uue%>~>8jQUAR3EPWB$9_9m|jh`9ABUC4fv-QA;bU8iLR+W@MMF%-AZ!3Nlyoe@ z#!#H3<0VXxusOn(P!iM{Y6UT$ehAw@ZJ~C;+9T`$r9+(@Msp(-k=vloP%VtCHzDi- zb%ipZar*Nut&=7omIX1}T!c46{h?T#F%aP(h{trw)|A1wA~7DC1Wkl$z^OKLJK~d} z9B2x}6Q)XdhlF_&&P3Q0=ja!WA(8Op?b);2!GluZiSII&!6|)BO&_SqiO#9Ki{v+J$+EaMPBEY za;M&t-QDkgV_%4mRmN7!`sxL3foRV{WbL8nAll0i8Hctm0!3XE@|oDN;| zLcBk|a*Vqcv#?C(Y#(b5Y@s4z^N=nZ^*SHhx`K5We;kJY+P*!?%x*>L=guV#QQw++odlhJlt~S@1Goh?$Y78r;eS3MZht5D(i0@lT|A zQ=G7Wf@t9YWP_l(a>osX^#*H*IG1YHqD%KVkzp1+ui|bE|Cf~-{KN{au&rdkOxsDO zorRTyr3o7)Y#`X^DyHW?-6QZwE45D*zvn4gq>9vd{noTWI_yMR@7u+F4BRJ67Bhw2 z3U;TkwZedmb%>*1U;;2pTd8cb&nGI$oYhQ4`>ydY%pu-vt09tuTNtO68p7<7;&lG| zlIjN5Nc@_}xy&zKSTkX)mF86}-bfP2wPqV}tZtI}la+}+LYCorIr@T}(G%=NVU@y$ zfxRW{U131RVPPi`vKNpM{c(X|r5P>GQ3&H9E;X78i$E9)(b!j+DHmnz%QUj83wF@^ zFZJkW=f#_6H>R;?@jSLz=1b!>$apEgZD> zlc7~JdSTG9PllSAuc@0Hu@1fD(*bT(fOF?nAFn+C?Q9beOkY3KRL6fNs{(JekM@4{ zpfv>X0c}e~go7v92#60$vsc1w?(DL(zIyl?U1!KYwk&0;sz@SziTb_G9XJ!~h^J!w zqdvbB;!45cjOy$9y%(IyF)74aj%>R4k>eazH-B5LdU4{tlUc#ocXRNP zE{X7NVKa5JzV-aWzPzkloq^JWuJ-kVZoO_rjv{&tx@Kk|IqmO=egu62eN2qAc=^wuv(V?zIq0v@Y3KrU5&9eS z1@tBK74$Xq4aD=mmGC3w@8{zj+ILr1<@x98V%8=KuYg^ zIJ3m1JT0@4$|Z)ebT{`Y=!4;cSR;R<+fTtW*gQrg^h&7N~q%}6Ay%j6o1@DB?ob9W+MxF;oH#O$;#Sr@HJFb}&_jCofZwNf8` zxGmod0(djP-cOM?A`mfCWh-;cPPN*cm9GwzwN;@$d*g@;nh3~+e1lgVwUA~}5BeS7 zjr4Jd7VOV@Wh)8$9cSG#4;~NlA7Io3U;|)d2s&WxWDN)F{X5Qq>;Z`NZTlnIz2vk? zFIlQ8d$XRRAl^0A1|kcG*nnv1knP7In~jJUQigf$m}>6hkk=eavlvPSA=^651KH=Y zOJ_ni3yVR>20Pft#z@`Y95zQ`@)`;I^k*dDS zlUXhHld&Z1i?Ebv10b@l5ZeQ7C`86)z)~~Jjq_D*S-NuT5tC+`!@g1OK*1|&tul*J zR6-!ZqfRTwauv9mq1;Zha;fqJJlU#J)#os?6=KzuLCiEHP`|(W+Eul#h+PovY_}tN zPxa`Q%9^HIB4m$hJ%q7f?9q)iZFOzEc~t{Po>4MXeLU@RoXL}E=MZrqJTHuG_ktY! zr!W@CPr}@AW^@cxgD1jj3u8P?Sacv`nA%=b*s`UW2cor9}0^%Xovmc`EglzVjMX(AL#&)q+*nV@_B6W|CZFPj8 z+Y$0qcJ~}%vxGH5m@jN`5Tk!H=ztu1SB|k+92Rz37@N;W!al8Hy{$I;nZR>Z(CVFk z752Tb76^Y3_KUD?fnO)6r4C1o!(1{+EphF^-R#2_RO>*(?dq(<$Nh8%6aqOR7vzSb zpqdcZ51|q=UI+1TNk<@zgc?HiplFC~H3n(`(Z7*|jSA8lc7nxz_= z$MRK#Sw2uX1H)#ia%H~vifR>TbwGWj%(e$q|3Lq*)Q%9Hvayr1`S@)O%%Z1NoNo*A zWCNqwBLG{FJpxQYoK;B6HMn=d6txC%JchLrV4Ab&CNSC#@gw8rBkgNpY%tvapeY}6 zursWSI5T9SlF^3+>qN*xwf)*6j{l5gVeD(HL|Q*#k0G8d>>*(ff;}wE6y{@x#xAI3 zPYLXg)HY!+3*#7GA#A5G4zsTb+a-+S{%&D^5ytX8BJ6vFtV3)nVIh;NyRK@YXMGf1 zc1bzVyZFfVK+iGr4v5B%#mCQpxa6TNgvdC7EP`lvL1eULRe`Yzp>;)_6WPpqKkW;W zDM#%&t`*WO3)(n{x#U3{*=e^yWb`Aa6+&cet&<>{eOH`CN+3S=;}HG8eAa4;aJ#^s z2svKR?4fBM;`Y#V6>*+C3i=tM+3)Mjhnond9!tb_|lU`k;JkGGk69%vuT6Yr|{GduxJ~k3wn4>iN3*!?dL||1fLwkfz zMx2d_gDM*m{qKP$Lo`+`*+|HQXm&M|bEx9Er4Z8o>$fRKS%Go{aP#=2dELx7sbci7 z;&2_dBRtTlP#sYvrb;jqN>mG-6`f*wOB7z+OH`_hOZ6|zDy8xjq%t8~qk3UT#({y1ox=9xdm0(rvCY^; z$?RF3oTC((U2=$8Q#aX*5PW>r=)4~ZH*~NHTI0lfh;wLsUl>n11-T&3m%ISS->)Ga zv*$^2b}F*kNHCoQ)kB2m#tP%ekfhK(3EK%|hN(OQ#!XsAISi%?>m`hBtcS57T*YvN zukM_TPlgM#oGPwl(}m>;V=f?gm^viv-5~aXuv68{husW;pH@S| z_)*v|!dPJ35TJ$NjwEV05$A>33&?o0{FK6)Zz_z(TOiIS=4TW74Tkth#(GMAmmq8d z6(CN&P*{J&rxTdJE>fAVzM!&{^~-@Ls{57ceNkE8NzKcMs3(ICY*(`9w&gc?8PNJA z!U5!JbzJn+msAVaQ@BW3kl#yKtz<1$@hG8|IK&NHS{On`IfK*@HXm_Dqo5@ao7_@} ztO2wTqOm>Le)l6zzXycT?_P+eA^J6j>T?F75mrsj@rczYg0-#QM6)w*0%{*!Wj~Ko zh$MOzn>2D5a)mfJC z#_&LVrHWPk-PR97j4xQbxZX8aQpg{i$V{p;vU0;8zC!QSrHg9nxQ9dawH48(`a+HG zHpYGCkM85&W;ephZta>B?#PE%<@Mj*T7TsA%$CUxvwWe7xH$u}W;WiNyJ8*M4>i{w z@7#=cMl2Qovhb$b9xEUo%Rnpz|1zLV>@cO^O#aI>I-8Lds*Mg^K3IDur<<>Sr=s+* zNwciiO}!>(k&fIr)cn(aH6k;$Q|Gjsy8M5NHe1S~LkK2~k}uTAUd-*kE!hrc#QW;? zx^u9L$o--@)RnQ@D%XU^TDMxZ~`H)gy4uoakSKF7_1*7%Hn^bIvJ@di&h#V_UN zCuh{88#-gio9dMHfz15#J8H}g-y2WEg(A$GcA*j8Kxg>3jj)v&aYns`-+@G%OHWG4 z+(5AhDt4&>>PEVtX+2)86Kdv-dM`IUX{x~a&XX5^)CEI_`B%1l+c{todN?~d2lv~h zw@(pv6IiY=PJfJMK%4?;3xwT__(J{CmBv0!YCJdy!o+5oJ(t~rls#`%h##3>{P>xP z(Qf#&M;PZXM)}&uIgEBf*fhlX`H3cTna}8h#A$&ai(@7j=QrBdLF^l0SA}Ka_|L*> z$<#v@%Bcs&p9%2r38;}Udw%N%mf*lNL2E6J=xYXlBSqt9exA%1SNkIK4KWzrT*Awz(g&+25ON6nw_-;(QPZ(b}@m=4tCxmek zxKY@P!p4Ga7q(N_Jh0b<9TevC03H%}Twq_Y_k?{StRL8?!oCzX5bP^q{}9GkyB~#d zBZLpf>U3B$PSp=7$g&}9f>f2i{c=voT@o61HR#AS2X{AUZG^Gu^M##ulQ7nM7h%1E zSZ`qigz=^a3L71Q>+>R9uZ$6Rn>dn95;jBF5U`oT<_qH!FA%mYh%Fa(pD?zM`-N?= z{rLPP0yo+aY?H8Oh4JL)g#B4q2H2~@-V)XqY>%*m!uSS$NZ9+rW`KQwxK;ia1oCzJ zqB#B_Y!29EVIj_{(#ipIB2J4G#`nG`VNHci0ZS0pKFF_wupUlXNRNkOPk{r(k;OVt z*l1xKw#Ep{5yonoB5a1R0t<3j2pJp8KOP z<*KSCjsXtDX?27#zi?rV5L#O|%rI79GjU`WYc8z4FmB;=5Y|l?);dOaVVS}*!Lo!6 z62_YuEbLZc*nsjG;{{F^$hMFtY`(C$U<-uZBaAn*QrJ3SY^=q?HVb3JEEV>mFph-V zEr#-cUEpniZ;0bTVP3F9!cGPGofdW>$nT=CAB6E2Czpl&BCH4U`&F15@7{{_&lX$* z30gQILY6{ZVR6D1fHe`;Hps7?u=F6mZo;yKO~AP~3mYYDA((Hpz$rnFxxxy99OnvK zF0421(kJX*VVv#O2wNwN15&ZDM}_qPd#sB2jBNrl0L#SjWnmnpDunG7<^g+K*t^0w zE*utiO4wwu)50zYW1G1s><5dX{Mj-u3sg0Nx(?#By24n55yF}X<8&M^EL9k*u9L7n z!Z;Fogxw-62W*H>-~@rw0VfK(Qy5$DEMbd-*b-s)3gh6jMwk|s4Ypp`W?|fpC>7@0 zDv(9->16~-z0u&|@T_=bN>;>RTn1#83gAG;f2)mwViuH|deNB2v=s#oQ5C{g&#dZs@fS zZ&222UkrCMMmhNgt&h7BtN))C`~PkEPhpDFU7Qwg#-CN=9rruUt7la!v-B*sa_icg zDPd1vKC4viD-I0lRWqd-IY-sgrKjR_l(WPC>1zM!PJ)hEcXVF0setSilentHangup(arg2); + jresult = result; + return jresult; +} + + SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipSession_getId(void * jarg1) { unsigned int jresult ; SipSession *arg1 = (SipSession *) 0 ; @@ -1966,6 +1980,106 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_SipStack_stop(void * jarg1) { } +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_transport_error_get() { + int jresult ; + int result; + + result = (int) 702; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_global_error_get() { + int jresult ; + int result; + + result = (int) 703; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_message_error_get() { + int jresult ; + int result; + + result = (int) 704; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_request_incoming_get() { + int jresult ; + int result; + + result = (int) 800; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_request_cancelled_get() { + int jresult ; + int result; + + result = (int) 801; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_request_sent_get() { + int jresult ; + int result; + + result = (int) 802; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_connecting_get() { + int jresult ; + int result; + + result = (int) 900; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_connected_get() { + int jresult ; + int result; + + result = (int) 901; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_terminating_get() { + int jresult ; + int result; + + result = (int) 902; + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_tsip_event_code_dialog_terminated_get() { + int jresult ; + int result; + + result = (int) 903; + jresult = result; + return jresult; +} + + SWIGEXPORT SipEvent * SWIGSTDCALL CSharp_DialogEventUpcast(DialogEvent *objectRef) { return (SipEvent *)objectRef; } diff --git a/trunk/bindings/csharp/tsip_message_event_type_t.cs b/trunk/bindings/csharp/tsip_message_event_type_t.cs index 73d195be..8ff95512 100644 --- a/trunk/bindings/csharp/tsip_message_event_type_t.cs +++ b/trunk/bindings/csharp/tsip_message_event_type_t.cs @@ -9,7 +9,5 @@ public enum tsip_message_event_type_t { tsip_i_message, - tsip_ai_message, - tsip_o_message, tsip_ao_message } diff --git a/trunk/bindings/csharp/tsip_options_event_type_t.cs b/trunk/bindings/csharp/tsip_options_event_type_t.cs index 335d549f..56ff1a1f 100644 --- a/trunk/bindings/csharp/tsip_options_event_type_t.cs +++ b/trunk/bindings/csharp/tsip_options_event_type_t.cs @@ -9,7 +9,5 @@ public enum tsip_options_event_type_t { tsip_i_options, - tsip_ai_options, - tsip_o_options, tsip_ao_options } diff --git a/trunk/bindings/csharp/tsip_publish_event_type_t.cs b/trunk/bindings/csharp/tsip_publish_event_type_t.cs index 3bf092ff..cae8a599 100644 --- a/trunk/bindings/csharp/tsip_publish_event_type_t.cs +++ b/trunk/bindings/csharp/tsip_publish_event_type_t.cs @@ -9,11 +9,7 @@ public enum tsip_publish_event_type_t { tsip_i_publish, - tsip_ai_publish, - tsip_o_publish, tsip_ao_publish, tsip_i_unpublish, - tsip_ai_unpublish, - tsip_o_unpublish, tsip_ao_unpublish } diff --git a/trunk/bindings/csharp/tsip_register_event_type_t.cs b/trunk/bindings/csharp/tsip_register_event_type_t.cs index ab7187a2..a8992b94 100644 --- a/trunk/bindings/csharp/tsip_register_event_type_t.cs +++ b/trunk/bindings/csharp/tsip_register_event_type_t.cs @@ -9,11 +9,7 @@ public enum tsip_register_event_type_t { tsip_i_register, - tsip_ai_register, - tsip_o_register, tsip_ao_register, tsip_i_unregister, - tsip_ai_unregister, - tsip_o_unregister, tsip_ao_unregister } diff --git a/trunk/bindings/csharp/tsip_subscribe_event_type_t.cs b/trunk/bindings/csharp/tsip_subscribe_event_type_t.cs index f922d96a..a3b825f7 100644 --- a/trunk/bindings/csharp/tsip_subscribe_event_type_t.cs +++ b/trunk/bindings/csharp/tsip_subscribe_event_type_t.cs @@ -9,15 +9,9 @@ public enum tsip_subscribe_event_type_t { tsip_i_subscribe, - tsip_ai_subscribe, - tsip_o_subscribe, tsip_ao_subscribe, tsip_i_unsubscribe, - tsip_ai_unsubscribe, - tsip_o_unsubscribe, tsip_ao_unsubscribe, tsip_i_notify, - tsip_ai_notify, - tsip_o_notify, tsip_ao_notify } diff --git a/trunk/bindings/java/MessagingEvent.java b/trunk/bindings/java/MessagingEvent.java index 83a51ab8..c502d313 100644 --- a/trunk/bindings/java/MessagingEvent.java +++ b/trunk/bindings/java/MessagingEvent.java @@ -44,7 +44,7 @@ public class MessagingEvent extends SipEvent { public MessagingSession takeSessionOwnership() { long cPtr = tinyWRAPJNI.MessagingEvent_takeSessionOwnership(swigCPtr, this); - return (cPtr == 0) ? null : new MessagingSession(cPtr, false); + return (cPtr == 0) ? null : new MessagingSession(cPtr, true); } } diff --git a/trunk/bindings/java/SipSession.java b/trunk/bindings/java/SipSession.java index 6fba9b6c..c9f7e433 100644 --- a/trunk/bindings/java/SipSession.java +++ b/trunk/bindings/java/SipSession.java @@ -82,6 +82,10 @@ public class SipSession { return tinyWRAPJNI.SipSession_setToUri(swigCPtr, this, toUri); } + public boolean setSilentHangup(boolean silent) { + return tinyWRAPJNI.SipSession_setSilentHangup(swigCPtr, this, silent); + } + public long getId() { return tinyWRAPJNI.SipSession_getId(swigCPtr, this); } diff --git a/trunk/bindings/java/android/MessagingEvent.java b/trunk/bindings/java/android/MessagingEvent.java index 83a51ab8..c502d313 100644 --- a/trunk/bindings/java/android/MessagingEvent.java +++ b/trunk/bindings/java/android/MessagingEvent.java @@ -44,7 +44,7 @@ public class MessagingEvent extends SipEvent { public MessagingSession takeSessionOwnership() { long cPtr = tinyWRAPJNI.MessagingEvent_takeSessionOwnership(swigCPtr, this); - return (cPtr == 0) ? null : new MessagingSession(cPtr, false); + return (cPtr == 0) ? null : new MessagingSession(cPtr, true); } } diff --git a/trunk/bindings/java/android/SipSession.java b/trunk/bindings/java/android/SipSession.java index 6fba9b6c..c9f7e433 100644 --- a/trunk/bindings/java/android/SipSession.java +++ b/trunk/bindings/java/android/SipSession.java @@ -82,6 +82,10 @@ public class SipSession { return tinyWRAPJNI.SipSession_setToUri(swigCPtr, this, toUri); } + public boolean setSilentHangup(boolean silent) { + return tinyWRAPJNI.SipSession_setSilentHangup(swigCPtr, this, silent); + } + public long getId() { return tinyWRAPJNI.SipSession_getId(swigCPtr, this); } diff --git a/trunk/bindings/java/android/tinyWRAP.java b/trunk/bindings/java/android/tinyWRAP.java index b4149d69..d10c59ad 100644 --- a/trunk/bindings/java/android/tinyWRAP.java +++ b/trunk/bindings/java/android/tinyWRAP.java @@ -8,5 +8,5 @@ package org.doubango.tinyWRAP; -public class tinyWRAP { +public class tinyWRAP implements tinyWRAPConstants { } diff --git a/trunk/bindings/java/android/tinyWRAPConstants.java b/trunk/bindings/java/android/tinyWRAPConstants.java new file mode 100644 index 00000000..40444189 --- /dev/null +++ b/trunk/bindings/java/android/tinyWRAPConstants.java @@ -0,0 +1,22 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.39 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package org.doubango.tinyWRAP; + +public interface tinyWRAPConstants { + public final static int tsip_event_code_dialog_transport_error = 702; + public final static int tsip_event_code_global_error = 703; + public final static int tsip_event_code_dialog_message_error = 704; + public final static int tsip_event_code_dialog_request_incoming = 800; + public final static int tsip_event_code_dialog_request_cancelled = 801; + public final static int tsip_event_code_dialog_request_sent = 802; + public final static int tsip_event_code_dialog_connecting = 900; + public final static int tsip_event_code_dialog_connected = 901; + public final static int tsip_event_code_dialog_terminating = 902; + public final static int tsip_event_code_dialog_terminated = 903; +} diff --git a/trunk/bindings/java/android/tinyWRAPJNI.java b/trunk/bindings/java/android/tinyWRAPJNI.java index c6d4f41c..00d8f2dc 100644 --- a/trunk/bindings/java/android/tinyWRAPJNI.java +++ b/trunk/bindings/java/android/tinyWRAPJNI.java @@ -54,6 +54,7 @@ class tinyWRAPJNI { public final static native boolean SipSession_setExpires(long jarg1, SipSession jarg1_, long jarg2); public final static native boolean SipSession_setFromUri(long jarg1, SipSession jarg1_, String jarg2); public final static native boolean SipSession_setToUri(long jarg1, SipSession jarg1_, String jarg2); + public final static native boolean SipSession_setSilentHangup(long jarg1, SipSession jarg1_, boolean jarg2); public final static native long SipSession_getId(long jarg1, SipSession jarg1_); public final static native long new_MessagingSession(long jarg1, SipStack jarg1_); public final static native void delete_MessagingSession(long jarg1); diff --git a/trunk/bindings/java/android/tinyWRAP_wrap.cxx b/trunk/bindings/java/android/tinyWRAP_wrap.cxx index cc5515f2..db208a72 100644 --- a/trunk/bindings/java/android/tinyWRAP_wrap.cxx +++ b/trunk/bindings/java/android/tinyWRAP_wrap.cxx @@ -1548,6 +1548,23 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipSession_1s } +SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipSession_1setSilentHangup(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { + jboolean jresult = 0 ; + SipSession *arg1 = (SipSession *) 0 ; + bool arg2 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(SipSession **)&jarg1; + arg2 = jarg2 ? true : false; + result = (bool)(arg1)->setSilentHangup(arg2); + jresult = (jboolean)result; + return jresult; +} + + SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipSession_1getId(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jlong jresult = 0 ; SipSession *arg1 = (SipSession *) 0 ; diff --git a/trunk/bindings/java/android/tsip_message_event_type_t.java b/trunk/bindings/java/android/tsip_message_event_type_t.java index 93891d75..280845ac 100644 --- a/trunk/bindings/java/android/tsip_message_event_type_t.java +++ b/trunk/bindings/java/android/tsip_message_event_type_t.java @@ -10,8 +10,6 @@ package org.doubango.tinyWRAP; public enum tsip_message_event_type_t { tsip_i_message, - tsip_ai_message, - tsip_o_message, tsip_ao_message; public final int swigValue() { diff --git a/trunk/bindings/java/android/tsip_options_event_type_t.java b/trunk/bindings/java/android/tsip_options_event_type_t.java index 72fe6ac6..70166763 100644 --- a/trunk/bindings/java/android/tsip_options_event_type_t.java +++ b/trunk/bindings/java/android/tsip_options_event_type_t.java @@ -10,8 +10,6 @@ package org.doubango.tinyWRAP; public enum tsip_options_event_type_t { tsip_i_options, - tsip_ai_options, - tsip_o_options, tsip_ao_options; public final int swigValue() { diff --git a/trunk/bindings/java/android/tsip_publish_event_type_t.java b/trunk/bindings/java/android/tsip_publish_event_type_t.java index 639fa514..a9ec14a0 100644 --- a/trunk/bindings/java/android/tsip_publish_event_type_t.java +++ b/trunk/bindings/java/android/tsip_publish_event_type_t.java @@ -10,12 +10,8 @@ package org.doubango.tinyWRAP; public enum tsip_publish_event_type_t { tsip_i_publish, - tsip_ai_publish, - tsip_o_publish, tsip_ao_publish, tsip_i_unpublish, - tsip_ai_unpublish, - tsip_o_unpublish, tsip_ao_unpublish; public final int swigValue() { diff --git a/trunk/bindings/java/android/tsip_register_event_type_t.java b/trunk/bindings/java/android/tsip_register_event_type_t.java index 8e497d94..d8715ea9 100644 --- a/trunk/bindings/java/android/tsip_register_event_type_t.java +++ b/trunk/bindings/java/android/tsip_register_event_type_t.java @@ -10,12 +10,8 @@ package org.doubango.tinyWRAP; public enum tsip_register_event_type_t { tsip_i_register, - tsip_ai_register, - tsip_o_register, tsip_ao_register, tsip_i_unregister, - tsip_ai_unregister, - tsip_o_unregister, tsip_ao_unregister; public final int swigValue() { diff --git a/trunk/bindings/java/android/tsip_subscribe_event_type_t.java b/trunk/bindings/java/android/tsip_subscribe_event_type_t.java index ae77c65f..5091b658 100644 --- a/trunk/bindings/java/android/tsip_subscribe_event_type_t.java +++ b/trunk/bindings/java/android/tsip_subscribe_event_type_t.java @@ -10,16 +10,10 @@ package org.doubango.tinyWRAP; public enum tsip_subscribe_event_type_t { tsip_i_subscribe, - tsip_ai_subscribe, - tsip_o_subscribe, tsip_ao_subscribe, tsip_i_unsubscribe, - tsip_ai_unsubscribe, - tsip_o_unsubscribe, tsip_ao_unsubscribe, tsip_i_notify, - tsip_ai_notify, - tsip_o_notify, tsip_ao_notify; public final int swigValue() { diff --git a/trunk/bindings/java/tinyWRAP.java b/trunk/bindings/java/tinyWRAP.java index b4149d69..d10c59ad 100644 --- a/trunk/bindings/java/tinyWRAP.java +++ b/trunk/bindings/java/tinyWRAP.java @@ -8,5 +8,5 @@ package org.doubango.tinyWRAP; -public class tinyWRAP { +public class tinyWRAP implements tinyWRAPConstants { } diff --git a/trunk/bindings/java/tinyWRAPConstants.java b/trunk/bindings/java/tinyWRAPConstants.java new file mode 100644 index 00000000..40444189 --- /dev/null +++ b/trunk/bindings/java/tinyWRAPConstants.java @@ -0,0 +1,22 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.39 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package org.doubango.tinyWRAP; + +public interface tinyWRAPConstants { + public final static int tsip_event_code_dialog_transport_error = 702; + public final static int tsip_event_code_global_error = 703; + public final static int tsip_event_code_dialog_message_error = 704; + public final static int tsip_event_code_dialog_request_incoming = 800; + public final static int tsip_event_code_dialog_request_cancelled = 801; + public final static int tsip_event_code_dialog_request_sent = 802; + public final static int tsip_event_code_dialog_connecting = 900; + public final static int tsip_event_code_dialog_connected = 901; + public final static int tsip_event_code_dialog_terminating = 902; + public final static int tsip_event_code_dialog_terminated = 903; +} diff --git a/trunk/bindings/java/tinyWRAPJNI.java b/trunk/bindings/java/tinyWRAPJNI.java index c6d4f41c..00d8f2dc 100644 --- a/trunk/bindings/java/tinyWRAPJNI.java +++ b/trunk/bindings/java/tinyWRAPJNI.java @@ -54,6 +54,7 @@ class tinyWRAPJNI { public final static native boolean SipSession_setExpires(long jarg1, SipSession jarg1_, long jarg2); public final static native boolean SipSession_setFromUri(long jarg1, SipSession jarg1_, String jarg2); public final static native boolean SipSession_setToUri(long jarg1, SipSession jarg1_, String jarg2); + public final static native boolean SipSession_setSilentHangup(long jarg1, SipSession jarg1_, boolean jarg2); public final static native long SipSession_getId(long jarg1, SipSession jarg1_); public final static native long new_MessagingSession(long jarg1, SipStack jarg1_); public final static native void delete_MessagingSession(long jarg1); diff --git a/trunk/bindings/java/tinyWRAP_wrap.cxx b/trunk/bindings/java/tinyWRAP_wrap.cxx index 69b01ff5..bed9a76a 100644 --- a/trunk/bindings/java/tinyWRAP_wrap.cxx +++ b/trunk/bindings/java/tinyWRAP_wrap.cxx @@ -1548,6 +1548,23 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipSession_1s } +SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipSession_1setSilentHangup(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { + jboolean jresult = 0 ; + SipSession *arg1 = (SipSession *) 0 ; + bool arg2 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(SipSession **)&jarg1; + arg2 = jarg2 ? true : false; + result = (bool)(arg1)->setSilentHangup(arg2); + jresult = (jboolean)result; + return jresult; +} + + SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_SipSession_1getId(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jlong jresult = 0 ; SipSession *arg1 = (SipSession *) 0 ; diff --git a/trunk/bindings/java/tsip_message_event_type_t.java b/trunk/bindings/java/tsip_message_event_type_t.java index 93891d75..280845ac 100644 --- a/trunk/bindings/java/tsip_message_event_type_t.java +++ b/trunk/bindings/java/tsip_message_event_type_t.java @@ -10,8 +10,6 @@ package org.doubango.tinyWRAP; public enum tsip_message_event_type_t { tsip_i_message, - tsip_ai_message, - tsip_o_message, tsip_ao_message; public final int swigValue() { diff --git a/trunk/bindings/java/tsip_options_event_type_t.java b/trunk/bindings/java/tsip_options_event_type_t.java index 72fe6ac6..70166763 100644 --- a/trunk/bindings/java/tsip_options_event_type_t.java +++ b/trunk/bindings/java/tsip_options_event_type_t.java @@ -10,8 +10,6 @@ package org.doubango.tinyWRAP; public enum tsip_options_event_type_t { tsip_i_options, - tsip_ai_options, - tsip_o_options, tsip_ao_options; public final int swigValue() { diff --git a/trunk/bindings/java/tsip_publish_event_type_t.java b/trunk/bindings/java/tsip_publish_event_type_t.java index 639fa514..a9ec14a0 100644 --- a/trunk/bindings/java/tsip_publish_event_type_t.java +++ b/trunk/bindings/java/tsip_publish_event_type_t.java @@ -10,12 +10,8 @@ package org.doubango.tinyWRAP; public enum tsip_publish_event_type_t { tsip_i_publish, - tsip_ai_publish, - tsip_o_publish, tsip_ao_publish, tsip_i_unpublish, - tsip_ai_unpublish, - tsip_o_unpublish, tsip_ao_unpublish; public final int swigValue() { diff --git a/trunk/bindings/java/tsip_register_event_type_t.java b/trunk/bindings/java/tsip_register_event_type_t.java index 8e497d94..d8715ea9 100644 --- a/trunk/bindings/java/tsip_register_event_type_t.java +++ b/trunk/bindings/java/tsip_register_event_type_t.java @@ -10,12 +10,8 @@ package org.doubango.tinyWRAP; public enum tsip_register_event_type_t { tsip_i_register, - tsip_ai_register, - tsip_o_register, tsip_ao_register, tsip_i_unregister, - tsip_ai_unregister, - tsip_o_unregister, tsip_ao_unregister; public final int swigValue() { diff --git a/trunk/bindings/java/tsip_subscribe_event_type_t.java b/trunk/bindings/java/tsip_subscribe_event_type_t.java index ae77c65f..5091b658 100644 --- a/trunk/bindings/java/tsip_subscribe_event_type_t.java +++ b/trunk/bindings/java/tsip_subscribe_event_type_t.java @@ -10,16 +10,10 @@ package org.doubango.tinyWRAP; public enum tsip_subscribe_event_type_t { tsip_i_subscribe, - tsip_ai_subscribe, - tsip_o_subscribe, tsip_ao_subscribe, tsip_i_unsubscribe, - tsip_ai_unsubscribe, - tsip_o_unsubscribe, tsip_ao_unsubscribe, tsip_i_notify, - tsip_ai_notify, - tsip_o_notify, tsip_ao_notify; public final int swigValue() { diff --git a/trunk/bindings/perl/tinyWRAP.pm b/trunk/bindings/perl/tinyWRAP.pm index 9b8d6700..741251ae 100644 --- a/trunk/bindings/perl/tinyWRAP.pm +++ b/trunk/bindings/perl/tinyWRAP.pm @@ -393,6 +393,7 @@ sub DESTROY { *setExpires = *tinyWRAPc::SipSession_setExpires; *setFromUri = *tinyWRAPc::SipSession_setFromUri; *setToUri = *tinyWRAPc::SipSession_setToUri; +*setSilentHangup = *tinyWRAPc::SipSession_setSilentHangup; *getId = *tinyWRAPc::SipSession_getId; sub DISOWN { my $self = shift; @@ -789,40 +790,32 @@ package tinyWRAP; *tsip_event_register = *tinyWRAPc::tsip_event_register; *tsip_event_subscribe = *tinyWRAPc::tsip_event_subscribe; *tsip_event_dialog = *tinyWRAPc::tsip_event_dialog; +*tsip_event_code_dialog_transport_error = *tinyWRAPc::tsip_event_code_dialog_transport_error; +*tsip_event_code_global_error = *tinyWRAPc::tsip_event_code_global_error; +*tsip_event_code_dialog_message_error = *tinyWRAPc::tsip_event_code_dialog_message_error; +*tsip_event_code_dialog_request_incoming = *tinyWRAPc::tsip_event_code_dialog_request_incoming; +*tsip_event_code_dialog_request_cancelled = *tinyWRAPc::tsip_event_code_dialog_request_cancelled; +*tsip_event_code_dialog_request_sent = *tinyWRAPc::tsip_event_code_dialog_request_sent; +*tsip_event_code_dialog_connecting = *tinyWRAPc::tsip_event_code_dialog_connecting; +*tsip_event_code_dialog_connected = *tinyWRAPc::tsip_event_code_dialog_connected; +*tsip_event_code_dialog_terminating = *tinyWRAPc::tsip_event_code_dialog_terminating; +*tsip_event_code_dialog_terminated = *tinyWRAPc::tsip_event_code_dialog_terminated; *tsip_i_register = *tinyWRAPc::tsip_i_register; -*tsip_ai_register = *tinyWRAPc::tsip_ai_register; -*tsip_o_register = *tinyWRAPc::tsip_o_register; *tsip_ao_register = *tinyWRAPc::tsip_ao_register; *tsip_i_unregister = *tinyWRAPc::tsip_i_unregister; -*tsip_ai_unregister = *tinyWRAPc::tsip_ai_unregister; -*tsip_o_unregister = *tinyWRAPc::tsip_o_unregister; *tsip_ao_unregister = *tinyWRAPc::tsip_ao_unregister; *tsip_i_subscribe = *tinyWRAPc::tsip_i_subscribe; -*tsip_ai_subscribe = *tinyWRAPc::tsip_ai_subscribe; -*tsip_o_subscribe = *tinyWRAPc::tsip_o_subscribe; *tsip_ao_subscribe = *tinyWRAPc::tsip_ao_subscribe; *tsip_i_unsubscribe = *tinyWRAPc::tsip_i_unsubscribe; -*tsip_ai_unsubscribe = *tinyWRAPc::tsip_ai_unsubscribe; -*tsip_o_unsubscribe = *tinyWRAPc::tsip_o_unsubscribe; *tsip_ao_unsubscribe = *tinyWRAPc::tsip_ao_unsubscribe; *tsip_i_notify = *tinyWRAPc::tsip_i_notify; -*tsip_ai_notify = *tinyWRAPc::tsip_ai_notify; -*tsip_o_notify = *tinyWRAPc::tsip_o_notify; *tsip_ao_notify = *tinyWRAPc::tsip_ao_notify; *tsip_i_publish = *tinyWRAPc::tsip_i_publish; -*tsip_ai_publish = *tinyWRAPc::tsip_ai_publish; -*tsip_o_publish = *tinyWRAPc::tsip_o_publish; *tsip_ao_publish = *tinyWRAPc::tsip_ao_publish; *tsip_i_unpublish = *tinyWRAPc::tsip_i_unpublish; -*tsip_ai_unpublish = *tinyWRAPc::tsip_ai_unpublish; -*tsip_o_unpublish = *tinyWRAPc::tsip_o_unpublish; *tsip_ao_unpublish = *tinyWRAPc::tsip_ao_unpublish; *tsip_i_message = *tinyWRAPc::tsip_i_message; -*tsip_ai_message = *tinyWRAPc::tsip_ai_message; -*tsip_o_message = *tinyWRAPc::tsip_o_message; *tsip_ao_message = *tinyWRAPc::tsip_ao_message; *tsip_i_options = *tinyWRAPc::tsip_i_options; -*tsip_ai_options = *tinyWRAPc::tsip_ai_options; -*tsip_o_options = *tinyWRAPc::tsip_o_options; *tsip_ao_options = *tinyWRAPc::tsip_ao_options; 1; diff --git a/trunk/bindings/perl/tinyWRAP_wrap.cxx b/trunk/bindings/perl/tinyWRAP_wrap.cxx index 3158eca2..6b5fd1be 100644 --- a/trunk/bindings/perl/tinyWRAP_wrap.cxx +++ b/trunk/bindings/perl/tinyWRAP_wrap.cxx @@ -2885,7 +2885,7 @@ XS(_wrap_MessagingEvent_takeSessionOwnership) { } arg1 = reinterpret_cast< MessagingEvent * >(argp1); result = (MessagingSession *)((MessagingEvent const *)arg1)->takeSessionOwnership(); - ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MessagingSession, 0 | SWIG_SHADOW); argvi++ ; + ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MessagingSession, SWIG_OWNER | SWIG_SHADOW); argvi++ ; XSRETURN(argvi); fail: @@ -3729,6 +3729,44 @@ XS(_wrap_SipSession_setToUri) { } +XS(_wrap_SipSession_setSilentHangup) { + { + SipSession *arg1 = (SipSession *) 0 ; + bool arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + bool val2 ; + int ecode2 = 0 ; + int argvi = 0; + bool result; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: SipSession_setSilentHangup(self,silent);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_SipSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SipSession_setSilentHangup" "', argument " "1"" of type '" "SipSession *""'"); + } + arg1 = reinterpret_cast< SipSession * >(argp1); + ecode2 = SWIG_AsVal_bool SWIG_PERL_CALL_ARGS_2(ST(1), &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SipSession_setSilentHangup" "', argument " "2"" of type '" "bool""'"); + } + arg2 = static_cast< bool >(val2); + result = (bool)(arg1)->setSilentHangup(arg2); + ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ; + + + XSRETURN(argvi); + fail: + + + SWIG_croak_null(); + } +} + + XS(_wrap_SipSession_getId) { { SipSession *arg1 = (SipSession *) 0 ; @@ -5857,6 +5895,7 @@ static swig_command_info swig_commands[] = { {"tinyWRAPc::SipSession_setExpires", _wrap_SipSession_setExpires}, {"tinyWRAPc::SipSession_setFromUri", _wrap_SipSession_setFromUri}, {"tinyWRAPc::SipSession_setToUri", _wrap_SipSession_setToUri}, +{"tinyWRAPc::SipSession_setSilentHangup", _wrap_SipSession_setSilentHangup}, {"tinyWRAPc::SipSession_getId", _wrap_SipSession_getId}, {"tinyWRAPc::new_MessagingSession", _wrap_new_MessagingSession}, {"tinyWRAPc::delete_MessagingSession", _wrap_delete_MessagingSession}, @@ -6262,21 +6301,61 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_event_dialog))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_transport_error", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(702))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_global_error", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(703))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_message_error", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(704))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_request_incoming", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(800))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_request_cancelled", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(801))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_request_sent", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(802))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_connecting", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(900))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_connected", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(901))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_terminating", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(902))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; + /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { + SV *sv = get_sv((char*) SWIG_prefix "tsip_event_code_dialog_terminated", TRUE | 0x2 | GV_ADDMULTI); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(903))); + SvREADONLY_on(sv); + } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_i_register", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_register))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_register", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_register))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_register", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_register))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_register", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_register))); @@ -6287,16 +6366,6 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_unregister))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_unregister", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_unregister))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_unregister", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_unregister))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_unregister", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_unregister))); @@ -6307,16 +6376,6 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_subscribe))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_subscribe", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_subscribe))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_subscribe", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_subscribe))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_subscribe", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_subscribe))); @@ -6327,16 +6386,6 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_unsubscribe))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_unsubscribe", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_unsubscribe))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_unsubscribe", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_unsubscribe))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_unsubscribe", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_unsubscribe))); @@ -6347,16 +6396,6 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_notify))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_notify", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_notify))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_notify", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_notify))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_notify", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_notify))); @@ -6367,16 +6406,6 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_publish))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_publish", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_publish))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_publish", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_publish))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_publish", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_publish))); @@ -6387,16 +6416,6 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_unpublish))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_unpublish", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_unpublish))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_unpublish", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_unpublish))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_unpublish", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_unpublish))); @@ -6407,16 +6426,6 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_message))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_message", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_message))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_message", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_message))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_message", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_message))); @@ -6427,16 +6436,6 @@ XS(SWIG_init) { sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_i_options))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_ai_options", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ai_options))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; - /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { - SV *sv = get_sv((char*) SWIG_prefix "tsip_o_options", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_o_options))); - SvREADONLY_on(sv); - } while(0) /*@SWIG@*/; /*@SWIG:/usr/local/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "tsip_ao_options", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(tsip_ao_options))); diff --git a/trunk/bindings/python/tinyWRAP.py b/trunk/bindings/python/tinyWRAP.py index c1bdf062..12e96f3c 100644 --- a/trunk/bindings/python/tinyWRAP.py +++ b/trunk/bindings/python/tinyWRAP.py @@ -233,6 +233,7 @@ class SipSession(_object): def setExpires(self, *args): return _tinyWRAP.SipSession_setExpires(self, *args) def setFromUri(self, *args): return _tinyWRAP.SipSession_setFromUri(self, *args) def setToUri(self, *args): return _tinyWRAP.SipSession_setToUri(self, *args) + def setSilentHangup(self, *args): return _tinyWRAP.SipSession_setSilentHangup(self, *args) def getId(self): return _tinyWRAP.SipSession_getId(self) SipSession_swigregister = _tinyWRAP.SipSession_swigregister SipSession_swigregister(SipSession) @@ -445,41 +446,33 @@ tsip_event_publish = _tinyWRAP.tsip_event_publish tsip_event_register = _tinyWRAP.tsip_event_register tsip_event_subscribe = _tinyWRAP.tsip_event_subscribe tsip_event_dialog = _tinyWRAP.tsip_event_dialog +tsip_event_code_dialog_transport_error = _tinyWRAP.tsip_event_code_dialog_transport_error +tsip_event_code_global_error = _tinyWRAP.tsip_event_code_global_error +tsip_event_code_dialog_message_error = _tinyWRAP.tsip_event_code_dialog_message_error +tsip_event_code_dialog_request_incoming = _tinyWRAP.tsip_event_code_dialog_request_incoming +tsip_event_code_dialog_request_cancelled = _tinyWRAP.tsip_event_code_dialog_request_cancelled +tsip_event_code_dialog_request_sent = _tinyWRAP.tsip_event_code_dialog_request_sent +tsip_event_code_dialog_connecting = _tinyWRAP.tsip_event_code_dialog_connecting +tsip_event_code_dialog_connected = _tinyWRAP.tsip_event_code_dialog_connected +tsip_event_code_dialog_terminating = _tinyWRAP.tsip_event_code_dialog_terminating +tsip_event_code_dialog_terminated = _tinyWRAP.tsip_event_code_dialog_terminated tsip_i_register = _tinyWRAP.tsip_i_register -tsip_ai_register = _tinyWRAP.tsip_ai_register -tsip_o_register = _tinyWRAP.tsip_o_register tsip_ao_register = _tinyWRAP.tsip_ao_register tsip_i_unregister = _tinyWRAP.tsip_i_unregister -tsip_ai_unregister = _tinyWRAP.tsip_ai_unregister -tsip_o_unregister = _tinyWRAP.tsip_o_unregister tsip_ao_unregister = _tinyWRAP.tsip_ao_unregister tsip_i_subscribe = _tinyWRAP.tsip_i_subscribe -tsip_ai_subscribe = _tinyWRAP.tsip_ai_subscribe -tsip_o_subscribe = _tinyWRAP.tsip_o_subscribe tsip_ao_subscribe = _tinyWRAP.tsip_ao_subscribe tsip_i_unsubscribe = _tinyWRAP.tsip_i_unsubscribe -tsip_ai_unsubscribe = _tinyWRAP.tsip_ai_unsubscribe -tsip_o_unsubscribe = _tinyWRAP.tsip_o_unsubscribe tsip_ao_unsubscribe = _tinyWRAP.tsip_ao_unsubscribe tsip_i_notify = _tinyWRAP.tsip_i_notify -tsip_ai_notify = _tinyWRAP.tsip_ai_notify -tsip_o_notify = _tinyWRAP.tsip_o_notify tsip_ao_notify = _tinyWRAP.tsip_ao_notify tsip_i_publish = _tinyWRAP.tsip_i_publish -tsip_ai_publish = _tinyWRAP.tsip_ai_publish -tsip_o_publish = _tinyWRAP.tsip_o_publish tsip_ao_publish = _tinyWRAP.tsip_ao_publish tsip_i_unpublish = _tinyWRAP.tsip_i_unpublish -tsip_ai_unpublish = _tinyWRAP.tsip_ai_unpublish -tsip_o_unpublish = _tinyWRAP.tsip_o_unpublish tsip_ao_unpublish = _tinyWRAP.tsip_ao_unpublish tsip_i_message = _tinyWRAP.tsip_i_message -tsip_ai_message = _tinyWRAP.tsip_ai_message -tsip_o_message = _tinyWRAP.tsip_o_message tsip_ao_message = _tinyWRAP.tsip_ao_message tsip_i_options = _tinyWRAP.tsip_i_options -tsip_ai_options = _tinyWRAP.tsip_ai_options -tsip_o_options = _tinyWRAP.tsip_o_options tsip_ao_options = _tinyWRAP.tsip_ao_options diff --git a/trunk/bindings/python/tinyWRAP_wrap.cxx b/trunk/bindings/python/tinyWRAP_wrap.cxx index e40e3bac..607a11e1 100644 --- a/trunk/bindings/python/tinyWRAP_wrap.cxx +++ b/trunk/bindings/python/tinyWRAP_wrap.cxx @@ -3590,6 +3590,17 @@ SWIG_AsVal_long (PyObject *obj, long* val) } +SWIGINTERN int +SWIG_AsVal_bool (PyObject *obj, bool *val) +{ + int r = PyObject_IsTrue(obj); + if (r == -1) + return SWIG_ERROR; + if (val) *val = r ? true : false; + return SWIG_OK; +} + + SWIGINTERN int SWIG_AsVal_int (PyObject * obj, int *val) { @@ -3606,17 +3617,6 @@ SWIG_AsVal_int (PyObject * obj, int *val) } -SWIGINTERN int -SWIG_AsVal_bool (PyObject *obj, bool *val) -{ - int r = PyObject_IsTrue(obj); - if (r == -1) - return SWIG_ERROR; - if (val) *val = r ? true : false; - return SWIG_OK; -} - - /* --------------------------------------------------- * C++ director class methods @@ -4713,7 +4713,7 @@ SWIGINTERN PyObject *_wrap_MessagingEvent_takeSessionOwnership(PyObject *SWIGUNU } arg1 = reinterpret_cast< MessagingEvent * >(argp1); result = (MessagingSession *)((MessagingEvent const *)arg1)->takeSessionOwnership(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MessagingSession, 0 | 0 ); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MessagingSession, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; @@ -5423,6 +5423,37 @@ fail: } +SWIGINTERN PyObject *_wrap_SipSession_setSilentHangup(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + SipSession *arg1 = (SipSession *) 0 ; + bool arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + bool val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SipSession_setSilentHangup",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SipSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SipSession_setSilentHangup" "', argument " "1"" of type '" "SipSession *""'"); + } + arg1 = reinterpret_cast< SipSession * >(argp1); + ecode2 = SWIG_AsVal_bool(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SipSession_setSilentHangup" "', argument " "2"" of type '" "bool""'"); + } + arg2 = static_cast< bool >(val2); + result = (bool)(arg1)->setSilentHangup(arg2); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_SipSession_getId(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; SipSession *arg1 = (SipSession *) 0 ; @@ -7322,6 +7353,7 @@ static PyMethodDef SwigMethods[] = { { (char *)"SipSession_setExpires", _wrap_SipSession_setExpires, METH_VARARGS, NULL}, { (char *)"SipSession_setFromUri", _wrap_SipSession_setFromUri, METH_VARARGS, NULL}, { (char *)"SipSession_setToUri", _wrap_SipSession_setToUri, METH_VARARGS, NULL}, + { (char *)"SipSession_setSilentHangup", _wrap_SipSession_setSilentHangup, METH_VARARGS, NULL}, { (char *)"SipSession_getId", _wrap_SipSession_getId, METH_VARARGS, NULL}, { (char *)"SipSession_swigregister", SipSession_swigregister, METH_VARARGS, NULL}, { (char *)"new_MessagingSession", _wrap_new_MessagingSession, METH_VARARGS, NULL}, @@ -8139,41 +8171,33 @@ SWIG_init(void) { SWIG_Python_SetConstant(d, "tsip_event_register",SWIG_From_int(static_cast< int >(tsip_event_register))); SWIG_Python_SetConstant(d, "tsip_event_subscribe",SWIG_From_int(static_cast< int >(tsip_event_subscribe))); SWIG_Python_SetConstant(d, "tsip_event_dialog",SWIG_From_int(static_cast< int >(tsip_event_dialog))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_transport_error",SWIG_From_int(static_cast< int >(702))); + SWIG_Python_SetConstant(d, "tsip_event_code_global_error",SWIG_From_int(static_cast< int >(703))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_message_error",SWIG_From_int(static_cast< int >(704))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_request_incoming",SWIG_From_int(static_cast< int >(800))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_request_cancelled",SWIG_From_int(static_cast< int >(801))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_request_sent",SWIG_From_int(static_cast< int >(802))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_connecting",SWIG_From_int(static_cast< int >(900))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_connected",SWIG_From_int(static_cast< int >(901))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_terminating",SWIG_From_int(static_cast< int >(902))); + SWIG_Python_SetConstant(d, "tsip_event_code_dialog_terminated",SWIG_From_int(static_cast< int >(903))); SWIG_Python_SetConstant(d, "tsip_i_register",SWIG_From_int(static_cast< int >(tsip_i_register))); - SWIG_Python_SetConstant(d, "tsip_ai_register",SWIG_From_int(static_cast< int >(tsip_ai_register))); - SWIG_Python_SetConstant(d, "tsip_o_register",SWIG_From_int(static_cast< int >(tsip_o_register))); SWIG_Python_SetConstant(d, "tsip_ao_register",SWIG_From_int(static_cast< int >(tsip_ao_register))); SWIG_Python_SetConstant(d, "tsip_i_unregister",SWIG_From_int(static_cast< int >(tsip_i_unregister))); - SWIG_Python_SetConstant(d, "tsip_ai_unregister",SWIG_From_int(static_cast< int >(tsip_ai_unregister))); - SWIG_Python_SetConstant(d, "tsip_o_unregister",SWIG_From_int(static_cast< int >(tsip_o_unregister))); SWIG_Python_SetConstant(d, "tsip_ao_unregister",SWIG_From_int(static_cast< int >(tsip_ao_unregister))); SWIG_Python_SetConstant(d, "tsip_i_subscribe",SWIG_From_int(static_cast< int >(tsip_i_subscribe))); - SWIG_Python_SetConstant(d, "tsip_ai_subscribe",SWIG_From_int(static_cast< int >(tsip_ai_subscribe))); - SWIG_Python_SetConstant(d, "tsip_o_subscribe",SWIG_From_int(static_cast< int >(tsip_o_subscribe))); SWIG_Python_SetConstant(d, "tsip_ao_subscribe",SWIG_From_int(static_cast< int >(tsip_ao_subscribe))); SWIG_Python_SetConstant(d, "tsip_i_unsubscribe",SWIG_From_int(static_cast< int >(tsip_i_unsubscribe))); - SWIG_Python_SetConstant(d, "tsip_ai_unsubscribe",SWIG_From_int(static_cast< int >(tsip_ai_unsubscribe))); - SWIG_Python_SetConstant(d, "tsip_o_unsubscribe",SWIG_From_int(static_cast< int >(tsip_o_unsubscribe))); SWIG_Python_SetConstant(d, "tsip_ao_unsubscribe",SWIG_From_int(static_cast< int >(tsip_ao_unsubscribe))); SWIG_Python_SetConstant(d, "tsip_i_notify",SWIG_From_int(static_cast< int >(tsip_i_notify))); - SWIG_Python_SetConstant(d, "tsip_ai_notify",SWIG_From_int(static_cast< int >(tsip_ai_notify))); - SWIG_Python_SetConstant(d, "tsip_o_notify",SWIG_From_int(static_cast< int >(tsip_o_notify))); SWIG_Python_SetConstant(d, "tsip_ao_notify",SWIG_From_int(static_cast< int >(tsip_ao_notify))); SWIG_Python_SetConstant(d, "tsip_i_publish",SWIG_From_int(static_cast< int >(tsip_i_publish))); - SWIG_Python_SetConstant(d, "tsip_ai_publish",SWIG_From_int(static_cast< int >(tsip_ai_publish))); - SWIG_Python_SetConstant(d, "tsip_o_publish",SWIG_From_int(static_cast< int >(tsip_o_publish))); SWIG_Python_SetConstant(d, "tsip_ao_publish",SWIG_From_int(static_cast< int >(tsip_ao_publish))); SWIG_Python_SetConstant(d, "tsip_i_unpublish",SWIG_From_int(static_cast< int >(tsip_i_unpublish))); - SWIG_Python_SetConstant(d, "tsip_ai_unpublish",SWIG_From_int(static_cast< int >(tsip_ai_unpublish))); - SWIG_Python_SetConstant(d, "tsip_o_unpublish",SWIG_From_int(static_cast< int >(tsip_o_unpublish))); SWIG_Python_SetConstant(d, "tsip_ao_unpublish",SWIG_From_int(static_cast< int >(tsip_ao_unpublish))); SWIG_Python_SetConstant(d, "tsip_i_message",SWIG_From_int(static_cast< int >(tsip_i_message))); - SWIG_Python_SetConstant(d, "tsip_ai_message",SWIG_From_int(static_cast< int >(tsip_ai_message))); - SWIG_Python_SetConstant(d, "tsip_o_message",SWIG_From_int(static_cast< int >(tsip_o_message))); SWIG_Python_SetConstant(d, "tsip_ao_message",SWIG_From_int(static_cast< int >(tsip_ao_message))); SWIG_Python_SetConstant(d, "tsip_i_options",SWIG_From_int(static_cast< int >(tsip_i_options))); - SWIG_Python_SetConstant(d, "tsip_ai_options",SWIG_From_int(static_cast< int >(tsip_ai_options))); - SWIG_Python_SetConstant(d, "tsip_o_options",SWIG_From_int(static_cast< int >(tsip_o_options))); SWIG_Python_SetConstant(d, "tsip_ao_options",SWIG_From_int(static_cast< int >(tsip_ao_options))); #if PY_VERSION_HEX >= 0x03000000 return m; diff --git a/trunk/tinyDEMO/cmd.h b/trunk/tinyDEMO/cmd.h index 58c530e2..72d727c6 100644 --- a/trunk/tinyDEMO/cmd.h +++ b/trunk/tinyDEMO/cmd.h @@ -85,6 +85,7 @@ typedef enum opt_type_e opt_sec, /* --sec 1800 */ opt_sid, /* --sid 1234 */ opt_sigcomp, /* --sigcomp */ + opt_silent, /* --silent */ opt_smsc, /* --smsc +3315245856 */ opt_to, /* --to sip:alice@open-ims.test */ } diff --git a/trunk/tinyDEMO/common.c b/trunk/tinyDEMO/common.c index e7631f41..7ac5a363 100644 --- a/trunk/tinyDEMO/common.c +++ b/trunk/tinyDEMO/common.c @@ -53,58 +53,77 @@ int session_handle_event(const tsip_event_t *sipevent); int session_tostring(const session_t* session); /* our SIP callback function */ -int stack_callback(const tsip_event_t *sipevent) +int stack_callback(const tsip_event_t *_event) { int ret = 0; - if(!sipevent){ /* should never happen ...but who know? */ + if(!_event){ /* should never happen ...but who know? */ TSK_DEBUG_WARN("Null SIP event."); return -1; } tsk_safeobj_lock(ctx); - switch(sipevent->type){ + switch(_event->type){ case tsip_event_register: { /* REGISTER */ - ret = register_handle_event(sipevent); + ret = register_handle_event(_event); break; } case tsip_event_invite: { /* INVITE */ - ret = invite_handle_event(sipevent); + ret = invite_handle_event(_event); break; } case tsip_event_message: { /* MESSAGE */ - ret = message_handle_event(sipevent); + ret = message_handle_event(_event); break; } case tsip_event_options: { /* OPTIONS */ - ret = options_handle_event(sipevent); + ret = options_handle_event(_event); break; } case tsip_event_publish: { /* PUBLISH */ - ret = publish_handle_event(sipevent); + ret = publish_handle_event(_event); break; } case tsip_event_subscribe: { /* SUBSCRIBE */ - ret = subscribe_handle_event(sipevent); + ret = subscribe_handle_event(_event); break; } case tsip_event_dialog: { /* Common to all dialogs */ - ret = session_handle_event(sipevent); + ret = session_handle_event(_event); + break; + } + + case tsip_event_stack: + { + switch(_event->code){ + case tsip_event_code_stack_started: + TSK_DEBUG_INFO("Stack started"); + break; + case tsip_event_code_stack_stopped: + TSK_DEBUG_INFO("Stack stopped"); + break; + case tsip_event_code_stack_failed_to_start: + TSK_DEBUG_INFO("Stack failed to start"); + break; + case tsip_event_code_stack_failed_to_stop: + TSK_DEBUG_INFO("Stack failed to stop"); + break; + } break; } default: { /* Unsupported */ - TSK_DEBUG_WARN("%d not supported as SIP event.", sipevent->type); + TSK_DEBUG_WARN("%d not supported as SIP event.", _event->type); ret = -3; break; } @@ -438,27 +457,28 @@ int session_tostring(const session_t* session) /* handle events -common to all sessions */ -int session_handle_event(const tsip_event_t *sipevent) +int session_handle_event(const tsip_event_t *_event) { const session_t* session; /* Find associated session */ - if(!(session = session_get_by_sid(ctx->sessions, tsip_ssession_get_id(sipevent->ss)))){ + if(!(session = session_get_by_sid(ctx->sessions, tsip_ssession_get_id(_event->ss)))){ TSK_DEBUG_WARN("Failed to match session event."); return -1; } - switch(sipevent->code) + switch(_event->code) { /* === 7xx ==> errors === */ - case tsip_event_code_transport_error: - case tsip_event_code_global_error: - case tsip_event_code_message_error: + case tsip_event_code_dialog_transport_error: + case tsip_event_code_dialog_global_error: + case tsip_event_code_dialog_message_error: + /* do not guess that the dialog is terminated, wait for "tsip_event_code_dialog_terminated" event */ break; /* === 8xx ==> success === */ - case tsip_event_code_request_incoming: - case tsip_event_code_request_cancelled: - case tsip_event_code_request_sent: + case tsip_event_code_dialog_request_incoming: + case tsip_event_code_dialog_request_cancelled: + case tsip_event_code_dialog_request_sent: break; /* === 9xx ==> Informational === */ @@ -468,6 +488,12 @@ int session_handle_event(const tsip_event_t *sipevent) tsk_list_remove_item_by_data(ctx->sessions, session); break; } + + case tsip_event_code_dialog_connected: + ((session_t*)session)->connected = tsk_true; + break; + case tsip_event_code_dialog_terminating: + break; } return 0; } @@ -576,6 +602,13 @@ const session_t* session_handle_cmd(cmd_type_t cmd, const opts_L_t* opts) { /* Will be handled by the caller */ break; } + case opt_silent: + { /* valueless option */ + ret = tsip_ssession_set(session->handle, + TSIP_SSESSION_SET_SILENT_HANGUP(tsk_true), + TSIP_SSESSION_SET_NULL()); + break; + } case opt_to: { /* You should use TSIP_SSESSION_SET_OPTION(TSIP_SSESSION_OPTION_TO, value) instead of TSIP_SSESSION_SET_HEADER() to set the destination URI. */ diff --git a/trunk/tinyDEMO/core-ericsson.sn b/trunk/tinyDEMO/core-ericsson.sn index 0484b68f..1fb25ca9 100644 --- a/trunk/tinyDEMO/core-ericsson.sn +++ b/trunk/tinyDEMO/core-ericsson.sn @@ -7,7 +7,7 @@ %%proxy_ip 192.168.0.13 # IP address or FQDN %%proxy_port 5081 %%proxy_trans tcp # udp, tcp, tls or sctp -%%expires 100 # expires used by all dialogs +%%expires 36 # expires used by all dialogs %%sleep-sec 1.0 # number of seconds to wait before sending next sip message %%reg-sid @@ -41,9 +41,9 @@ # sleep #++sleep --sec $$(sleep-sec) -# subscribe to reg event package -#++sub --to sip:$$(user)@$$(domain) --xp $$(expires) --header Event=reg --header Accept=application/reginfo+xml \ -# --header Allow-Events=refer, presence, presence.winfo, xcap-diff, conference >>(sub-reg-sid) +# subscribe to reg event package (silent hangup) +++sub --to sip:$$(user)@$$(domain) --xp $$(expires) --silent --header Event=reg --header Accept=application/reginfo+xml \ + --header Allow-Events=refer, presence, presence.winfo, xcap-diff, conference >>(sub-reg-sid) #subscribe to presence event package (alice) #++sub --to sip:alice@$$(domain) --xp $$(expires) --header Event=presence --header Supported=eventlist\ diff --git a/trunk/tinyDEMO/dssl.c b/trunk/tinyDEMO/dssl.c index 7f98a44b..340eec57 100644 --- a/trunk/tinyDEMO/dssl.c +++ b/trunk/tinyDEMO/dssl.c @@ -83,7 +83,7 @@ tsk_bool_t next_not_(const char* p, const char* pe, char c) * Ragel state machine. */ -/* #line 301 "./dssl.rl" */ +/* #line 302 "./dssl.rl" */ cmd_t* dssl_parse(const char *buffer, tsk_size_t size, tsk_bool_t *comment, tsk_params_L_t* params) @@ -121,191 +121,196 @@ static const char _demo_machine_parser_cmd_actions[] = { 52, 1, 53, 1, 54, 1, 55, 1, 56, 1, 57, 1, 58, 1, 59, 1, 60, 1, 61, 1, 62, 1, 63, 1, - 64, 1, 65, 1, 66, 1, 68, 1, - 74, 1, 75, 2, 0, 3, 2, 0, - 12, 2, 1, 0, 2, 2, 70, 2, - 3, 0, 2, 4, 67, 2, 4, 72, - 2, 5, 0, 2, 9, 73, 2, 11, - 69, 2, 13, 69, 2, 14, 69, 2, - 15, 69, 2, 16, 69, 2, 17, 69, - 2, 18, 69, 2, 19, 69, 2, 20, - 69, 2, 21, 69, 2, 22, 69, 2, - 23, 69, 2, 24, 69, 2, 25, 69, - 2, 26, 69, 2, 27, 69, 2, 28, - 69, 2, 29, 69, 2, 30, 69, 2, - 31, 69, 2, 32, 69, 2, 33, 69, - 2, 61, 12, 2, 62, 12, 2, 63, - 12, 2, 66, 0, 2, 66, 3, 2, - 66, 10, 2, 66, 12, 2, 66, 13, - 2, 66, 14, 2, 66, 15, 2, 66, - 16, 2, 66, 17, 2, 66, 18, 2, - 66, 19, 2, 66, 20, 2, 66, 21, - 2, 66, 22, 2, 66, 23, 2, 66, - 24, 2, 66, 25, 2, 66, 26, 2, - 66, 27, 2, 66, 28, 2, 66, 29, - 2, 66, 30, 2, 66, 31, 2, 66, - 32, 2, 66, 33, 2, 66, 34, 2, - 66, 35, 2, 66, 36, 2, 66, 37, - 2, 66, 38, 2, 66, 39, 2, 66, - 40, 2, 66, 41, 2, 66, 42, 2, - 66, 43, 2, 66, 44, 2, 66, 45, - 2, 66, 46, 2, 66, 47, 2, 66, - 48, 2, 66, 49, 2, 66, 50, 2, - 66, 51, 2, 66, 52, 2, 66, 53, - 2, 66, 54, 2, 66, 55, 2, 66, - 56, 2, 66, 57, 2, 66, 58, 2, - 66, 59, 2, 66, 60, 2, 66, 61, - 2, 66, 62, 2, 66, 63, 3, 0, - 4, 67, 3, 0, 4, 72, 3, 0, - 9, 73, 3, 0, 11, 69, 3, 3, - 2, 70, 3, 5, 0, 8, 3, 7, - 6, 71, 3, 10, 0, 3, 3, 12, - 2, 70, 3, 13, 11, 69, 3, 14, - 11, 69, 3, 15, 11, 69, 3, 16, - 11, 69, 3, 17, 11, 69, 3, 18, - 11, 69, 3, 19, 11, 69, 3, 20, - 11, 69, 3, 21, 11, 69, 3, 22, - 11, 69, 3, 23, 11, 69, 3, 24, - 11, 69, 3, 25, 11, 69, 3, 26, - 11, 69, 3, 27, 11, 69, 3, 28, - 11, 69, 3, 29, 11, 69, 3, 30, - 11, 69, 3, 31, 11, 69, 3, 32, - 11, 69, 3, 33, 11, 69, 3, 34, - 0, 3, 3, 35, 0, 3, 3, 36, - 0, 3, 3, 37, 0, 3, 3, 38, - 0, 3, 3, 39, 0, 3, 3, 40, - 0, 3, 3, 41, 0, 3, 3, 42, - 0, 3, 3, 43, 0, 3, 3, 44, - 0, 3, 3, 45, 0, 3, 3, 46, - 0, 3, 3, 47, 0, 3, 3, 48, - 0, 3, 3, 49, 0, 3, 3, 50, - 0, 3, 3, 51, 0, 3, 3, 52, - 0, 3, 3, 53, 0, 3, 3, 54, - 0, 3, 3, 55, 0, 3, 3, 56, - 0, 3, 3, 57, 0, 3, 3, 58, - 0, 3, 3, 59, 0, 3, 3, 60, - 0, 3, 3, 61, 2, 70, 3, 62, - 2, 70, 3, 63, 2, 70, 3, 66, - 0, 12, 3, 66, 1, 0, 3, 66, - 10, 0, 3, 66, 34, 0, 3, 66, - 34, 10, 3, 66, 35, 0, 3, 66, - 35, 10, 3, 66, 36, 0, 3, 66, - 36, 10, 3, 66, 37, 0, 3, 66, - 37, 10, 3, 66, 38, 0, 3, 66, - 38, 10, 3, 66, 39, 0, 3, 66, - 39, 10, 3, 66, 40, 0, 3, 66, - 40, 10, 3, 66, 41, 0, 3, 66, - 41, 10, 3, 66, 42, 0, 3, 66, - 42, 10, 3, 66, 43, 0, 3, 66, - 43, 10, 3, 66, 44, 0, 3, 66, - 44, 10, 3, 66, 45, 0, 3, 66, - 45, 10, 3, 66, 46, 0, 3, 66, - 46, 10, 3, 66, 47, 0, 3, 66, - 47, 10, 3, 66, 48, 0, 3, 66, - 48, 10, 3, 66, 49, 0, 3, 66, - 49, 10, 3, 66, 50, 0, 3, 66, - 50, 10, 3, 66, 51, 0, 3, 66, - 51, 10, 3, 66, 52, 0, 3, 66, - 52, 10, 3, 66, 53, 0, 3, 66, - 53, 10, 3, 66, 54, 0, 3, 66, - 54, 10, 3, 66, 55, 0, 3, 66, - 55, 10, 3, 66, 56, 0, 3, 66, - 56, 10, 3, 66, 57, 0, 3, 66, - 57, 10, 3, 66, 58, 0, 3, 66, - 58, 10, 3, 66, 59, 0, 3, 66, - 59, 10, 3, 66, 60, 0, 3, 66, - 60, 10, 3, 66, 61, 12, 3, 66, - 62, 12, 3, 66, 63, 12, 4, 0, - 3, 2, 70, 4, 0, 7, 6, 71, - 4, 0, 12, 2, 70, 4, 1, 0, - 10, 3, 4, 3, 12, 2, 70, 4, - 3, 61, 2, 70, 4, 3, 62, 2, - 70, 4, 3, 63, 2, 70, 4, 34, - 10, 0, 3, 4, 35, 10, 0, 3, - 4, 36, 10, 0, 3, 4, 37, 10, - 0, 3, 4, 38, 10, 0, 3, 4, - 39, 10, 0, 3, 4, 40, 10, 0, - 3, 4, 41, 10, 0, 3, 4, 42, - 10, 0, 3, 4, 43, 10, 0, 3, - 4, 44, 10, 0, 3, 4, 45, 10, - 0, 3, 4, 46, 10, 0, 3, 4, - 47, 10, 0, 3, 4, 48, 10, 0, - 3, 4, 49, 10, 0, 3, 4, 50, - 10, 0, 3, 4, 51, 10, 0, 3, - 4, 52, 10, 0, 3, 4, 53, 10, - 0, 3, 4, 54, 10, 0, 3, 4, - 55, 10, 0, 3, 4, 56, 10, 0, - 3, 4, 57, 10, 0, 3, 4, 58, - 10, 0, 3, 4, 59, 10, 0, 3, - 4, 60, 10, 0, 3, 4, 61, 12, - 2, 70, 4, 62, 12, 2, 70, 4, - 63, 12, 2, 70, 4, 66, 1, 0, - 10, 4, 66, 34, 10, 0, 4, 66, - 35, 10, 0, 4, 66, 36, 10, 0, - 4, 66, 37, 10, 0, 4, 66, 38, - 10, 0, 4, 66, 39, 10, 0, 4, - 66, 40, 10, 0, 4, 66, 41, 10, - 0, 4, 66, 42, 10, 0, 4, 66, - 43, 10, 0, 4, 66, 44, 10, 0, - 4, 66, 45, 10, 0, 4, 66, 46, - 10, 0, 4, 66, 47, 10, 0, 4, - 66, 48, 10, 0, 4, 66, 49, 10, - 0, 4, 66, 50, 10, 0, 4, 66, - 51, 10, 0, 4, 66, 52, 10, 0, - 4, 66, 53, 10, 0, 4, 66, 54, - 10, 0, 4, 66, 55, 10, 0, 4, - 66, 56, 10, 0, 4, 66, 57, 10, - 0, 4, 66, 58, 10, 0, 4, 66, - 59, 10, 0, 4, 66, 60, 10, 0, - 5, 3, 0, 12, 2, 70, 5, 3, - 61, 12, 2, 70, 5, 3, 62, 12, - 2, 70, 5, 3, 63, 12, 2, 70, - 5, 10, 0, 3, 2, 70, 5, 34, - 0, 3, 2, 70, 5, 35, 0, 3, - 2, 70, 5, 36, 0, 3, 2, 70, - 5, 37, 0, 3, 2, 70, 5, 38, - 0, 3, 2, 70, 5, 39, 0, 3, - 2, 70, 5, 40, 0, 3, 2, 70, - 5, 41, 0, 3, 2, 70, 5, 42, - 0, 3, 2, 70, 5, 43, 0, 3, - 2, 70, 5, 44, 0, 3, 2, 70, - 5, 45, 0, 3, 2, 70, 5, 46, - 0, 3, 2, 70, 5, 47, 0, 3, - 2, 70, 5, 48, 0, 3, 2, 70, - 5, 49, 0, 3, 2, 70, 5, 50, - 0, 3, 2, 70, 5, 51, 0, 3, - 2, 70, 5, 52, 0, 3, 2, 70, - 5, 53, 0, 3, 2, 70, 5, 54, - 0, 3, 2, 70, 5, 55, 0, 3, - 2, 70, 5, 56, 0, 3, 2, 70, - 5, 57, 0, 3, 2, 70, 5, 58, - 0, 3, 2, 70, 5, 59, 0, 3, - 2, 70, 5, 60, 0, 3, 2, 70, - 6, 1, 0, 10, 3, 2, 70, 6, - 34, 10, 0, 3, 2, 70, 6, 35, - 10, 0, 3, 2, 70, 6, 36, 10, - 0, 3, 2, 70, 6, 37, 10, 0, - 3, 2, 70, 6, 38, 10, 0, 3, - 2, 70, 6, 39, 10, 0, 3, 2, - 70, 6, 40, 10, 0, 3, 2, 70, - 6, 41, 10, 0, 3, 2, 70, 6, - 42, 10, 0, 3, 2, 70, 6, 43, - 10, 0, 3, 2, 70, 6, 44, 10, - 0, 3, 2, 70, 6, 45, 10, 0, - 3, 2, 70, 6, 46, 10, 0, 3, - 2, 70, 6, 47, 10, 0, 3, 2, - 70, 6, 48, 10, 0, 3, 2, 70, - 6, 49, 10, 0, 3, 2, 70, 6, - 50, 10, 0, 3, 2, 70, 6, 51, - 10, 0, 3, 2, 70, 6, 52, 10, - 0, 3, 2, 70, 6, 53, 10, 0, - 3, 2, 70, 6, 54, 10, 0, 3, - 2, 70, 6, 55, 10, 0, 3, 2, - 70, 6, 56, 10, 0, 3, 2, 70, - 6, 57, 10, 0, 3, 2, 70, 6, - 58, 10, 0, 3, 2, 70, 6, 59, - 10, 0, 3, 2, 70, 6, 60, 10, - 0, 3, 2, 70 + 64, 1, 65, 1, 66, 1, 67, 1, + 69, 1, 75, 1, 76, 2, 0, 3, + 2, 0, 12, 2, 1, 0, 2, 2, + 71, 2, 3, 0, 2, 4, 68, 2, + 4, 73, 2, 5, 0, 2, 9, 74, + 2, 11, 70, 2, 13, 70, 2, 14, + 70, 2, 15, 70, 2, 16, 70, 2, + 17, 70, 2, 18, 70, 2, 19, 70, + 2, 20, 70, 2, 21, 70, 2, 22, + 70, 2, 23, 70, 2, 24, 70, 2, + 25, 70, 2, 26, 70, 2, 27, 70, + 2, 28, 70, 2, 29, 70, 2, 30, + 70, 2, 31, 70, 2, 32, 70, 2, + 33, 70, 2, 62, 12, 2, 63, 12, + 2, 64, 12, 2, 67, 0, 2, 67, + 3, 2, 67, 10, 2, 67, 12, 2, + 67, 13, 2, 67, 14, 2, 67, 15, + 2, 67, 16, 2, 67, 17, 2, 67, + 18, 2, 67, 19, 2, 67, 20, 2, + 67, 21, 2, 67, 22, 2, 67, 23, + 2, 67, 24, 2, 67, 25, 2, 67, + 26, 2, 67, 27, 2, 67, 28, 2, + 67, 29, 2, 67, 30, 2, 67, 31, + 2, 67, 32, 2, 67, 33, 2, 67, + 34, 2, 67, 35, 2, 67, 36, 2, + 67, 37, 2, 67, 38, 2, 67, 39, + 2, 67, 40, 2, 67, 41, 2, 67, + 42, 2, 67, 43, 2, 67, 44, 2, + 67, 45, 2, 67, 46, 2, 67, 47, + 2, 67, 48, 2, 67, 49, 2, 67, + 50, 2, 67, 51, 2, 67, 52, 2, + 67, 53, 2, 67, 54, 2, 67, 55, + 2, 67, 56, 2, 67, 57, 2, 67, + 58, 2, 67, 59, 2, 67, 60, 2, + 67, 61, 2, 67, 62, 2, 67, 63, + 2, 67, 64, 3, 0, 4, 68, 3, + 0, 4, 73, 3, 0, 9, 74, 3, + 0, 11, 70, 3, 3, 2, 71, 3, + 5, 0, 8, 3, 7, 6, 72, 3, + 10, 0, 3, 3, 12, 2, 71, 3, + 13, 11, 70, 3, 14, 11, 70, 3, + 15, 11, 70, 3, 16, 11, 70, 3, + 17, 11, 70, 3, 18, 11, 70, 3, + 19, 11, 70, 3, 20, 11, 70, 3, + 21, 11, 70, 3, 22, 11, 70, 3, + 23, 11, 70, 3, 24, 11, 70, 3, + 25, 11, 70, 3, 26, 11, 70, 3, + 27, 11, 70, 3, 28, 11, 70, 3, + 29, 11, 70, 3, 30, 11, 70, 3, + 31, 11, 70, 3, 32, 11, 70, 3, + 33, 11, 70, 3, 34, 0, 3, 3, + 35, 0, 3, 3, 36, 0, 3, 3, + 37, 0, 3, 3, 38, 0, 3, 3, + 39, 0, 3, 3, 40, 0, 3, 3, + 41, 0, 3, 3, 42, 0, 3, 3, + 43, 0, 3, 3, 44, 0, 3, 3, + 45, 0, 3, 3, 46, 0, 3, 3, + 47, 0, 3, 3, 48, 0, 3, 3, + 49, 0, 3, 3, 50, 0, 3, 3, + 51, 0, 3, 3, 52, 0, 3, 3, + 53, 0, 3, 3, 54, 0, 3, 3, + 55, 0, 3, 3, 56, 0, 3, 3, + 57, 0, 3, 3, 58, 0, 3, 3, + 59, 0, 3, 3, 60, 0, 3, 3, + 61, 0, 3, 3, 62, 2, 71, 3, + 63, 2, 71, 3, 64, 2, 71, 3, + 67, 0, 12, 3, 67, 1, 0, 3, + 67, 10, 0, 3, 67, 34, 0, 3, + 67, 34, 10, 3, 67, 35, 0, 3, + 67, 35, 10, 3, 67, 36, 0, 3, + 67, 36, 10, 3, 67, 37, 0, 3, + 67, 37, 10, 3, 67, 38, 0, 3, + 67, 38, 10, 3, 67, 39, 0, 3, + 67, 39, 10, 3, 67, 40, 0, 3, + 67, 40, 10, 3, 67, 41, 0, 3, + 67, 41, 10, 3, 67, 42, 0, 3, + 67, 42, 10, 3, 67, 43, 0, 3, + 67, 43, 10, 3, 67, 44, 0, 3, + 67, 44, 10, 3, 67, 45, 0, 3, + 67, 45, 10, 3, 67, 46, 0, 3, + 67, 46, 10, 3, 67, 47, 0, 3, + 67, 47, 10, 3, 67, 48, 0, 3, + 67, 48, 10, 3, 67, 49, 0, 3, + 67, 49, 10, 3, 67, 50, 0, 3, + 67, 50, 10, 3, 67, 51, 0, 3, + 67, 51, 10, 3, 67, 52, 0, 3, + 67, 52, 10, 3, 67, 53, 0, 3, + 67, 53, 10, 3, 67, 54, 0, 3, + 67, 54, 10, 3, 67, 55, 0, 3, + 67, 55, 10, 3, 67, 56, 0, 3, + 67, 56, 10, 3, 67, 57, 0, 3, + 67, 57, 10, 3, 67, 58, 0, 3, + 67, 58, 10, 3, 67, 59, 0, 3, + 67, 59, 10, 3, 67, 60, 0, 3, + 67, 60, 10, 3, 67, 61, 0, 3, + 67, 61, 10, 3, 67, 62, 12, 3, + 67, 63, 12, 3, 67, 64, 12, 4, + 0, 3, 2, 71, 4, 0, 7, 6, + 72, 4, 0, 12, 2, 71, 4, 1, + 0, 10, 3, 4, 3, 12, 2, 71, + 4, 3, 62, 2, 71, 4, 3, 63, + 2, 71, 4, 3, 64, 2, 71, 4, + 34, 10, 0, 3, 4, 35, 10, 0, + 3, 4, 36, 10, 0, 3, 4, 37, + 10, 0, 3, 4, 38, 10, 0, 3, + 4, 39, 10, 0, 3, 4, 40, 10, + 0, 3, 4, 41, 10, 0, 3, 4, + 42, 10, 0, 3, 4, 43, 10, 0, + 3, 4, 44, 10, 0, 3, 4, 45, + 10, 0, 3, 4, 46, 10, 0, 3, + 4, 47, 10, 0, 3, 4, 48, 10, + 0, 3, 4, 49, 10, 0, 3, 4, + 50, 10, 0, 3, 4, 51, 10, 0, + 3, 4, 52, 10, 0, 3, 4, 53, + 10, 0, 3, 4, 54, 10, 0, 3, + 4, 55, 10, 0, 3, 4, 56, 10, + 0, 3, 4, 57, 10, 0, 3, 4, + 58, 10, 0, 3, 4, 59, 10, 0, + 3, 4, 60, 10, 0, 3, 4, 61, + 10, 0, 3, 4, 62, 12, 2, 71, + 4, 63, 12, 2, 71, 4, 64, 12, + 2, 71, 4, 67, 1, 0, 10, 4, + 67, 34, 10, 0, 4, 67, 35, 10, + 0, 4, 67, 36, 10, 0, 4, 67, + 37, 10, 0, 4, 67, 38, 10, 0, + 4, 67, 39, 10, 0, 4, 67, 40, + 10, 0, 4, 67, 41, 10, 0, 4, + 67, 42, 10, 0, 4, 67, 43, 10, + 0, 4, 67, 44, 10, 0, 4, 67, + 45, 10, 0, 4, 67, 46, 10, 0, + 4, 67, 47, 10, 0, 4, 67, 48, + 10, 0, 4, 67, 49, 10, 0, 4, + 67, 50, 10, 0, 4, 67, 51, 10, + 0, 4, 67, 52, 10, 0, 4, 67, + 53, 10, 0, 4, 67, 54, 10, 0, + 4, 67, 55, 10, 0, 4, 67, 56, + 10, 0, 4, 67, 57, 10, 0, 4, + 67, 58, 10, 0, 4, 67, 59, 10, + 0, 4, 67, 60, 10, 0, 4, 67, + 61, 10, 0, 5, 3, 0, 12, 2, + 71, 5, 3, 62, 12, 2, 71, 5, + 3, 63, 12, 2, 71, 5, 3, 64, + 12, 2, 71, 5, 10, 0, 3, 2, + 71, 5, 34, 0, 3, 2, 71, 5, + 35, 0, 3, 2, 71, 5, 36, 0, + 3, 2, 71, 5, 37, 0, 3, 2, + 71, 5, 38, 0, 3, 2, 71, 5, + 39, 0, 3, 2, 71, 5, 40, 0, + 3, 2, 71, 5, 41, 0, 3, 2, + 71, 5, 42, 0, 3, 2, 71, 5, + 43, 0, 3, 2, 71, 5, 44, 0, + 3, 2, 71, 5, 45, 0, 3, 2, + 71, 5, 46, 0, 3, 2, 71, 5, + 47, 0, 3, 2, 71, 5, 48, 0, + 3, 2, 71, 5, 49, 0, 3, 2, + 71, 5, 50, 0, 3, 2, 71, 5, + 51, 0, 3, 2, 71, 5, 52, 0, + 3, 2, 71, 5, 53, 0, 3, 2, + 71, 5, 54, 0, 3, 2, 71, 5, + 55, 0, 3, 2, 71, 5, 56, 0, + 3, 2, 71, 5, 57, 0, 3, 2, + 71, 5, 58, 0, 3, 2, 71, 5, + 59, 0, 3, 2, 71, 5, 60, 0, + 3, 2, 71, 5, 61, 0, 3, 2, + 71, 6, 1, 0, 10, 3, 2, 71, + 6, 34, 10, 0, 3, 2, 71, 6, + 35, 10, 0, 3, 2, 71, 6, 36, + 10, 0, 3, 2, 71, 6, 37, 10, + 0, 3, 2, 71, 6, 38, 10, 0, + 3, 2, 71, 6, 39, 10, 0, 3, + 2, 71, 6, 40, 10, 0, 3, 2, + 71, 6, 41, 10, 0, 3, 2, 71, + 6, 42, 10, 0, 3, 2, 71, 6, + 43, 10, 0, 3, 2, 71, 6, 44, + 10, 0, 3, 2, 71, 6, 45, 10, + 0, 3, 2, 71, 6, 46, 10, 0, + 3, 2, 71, 6, 47, 10, 0, 3, + 2, 71, 6, 48, 10, 0, 3, 2, + 71, 6, 49, 10, 0, 3, 2, 71, + 6, 50, 10, 0, 3, 2, 71, 6, + 51, 10, 0, 3, 2, 71, 6, 52, + 10, 0, 3, 2, 71, 6, 53, 10, + 0, 3, 2, 71, 6, 54, 10, 0, + 3, 2, 71, 6, 55, 10, 0, 3, + 2, 71, 6, 56, 10, 0, 3, 2, + 71, 6, 57, 10, 0, 3, 2, 71, + 6, 58, 10, 0, 3, 2, 71, 6, + 59, 10, 0, 3, 2, 71, 6, 60, + 10, 0, 3, 2, 71, 6, 61, 10, + 0, 3, 2, 71 }; static const short _demo_machine_parser_cmd_cond_offsets[] = { @@ -335,7 +340,7 @@ static const short _demo_machine_parser_cmd_cond_offsets[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 4, 5, 6, 6, 6, 6, 6, + 2, 2, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, @@ -355,49 +360,50 @@ static const short _demo_machine_parser_cmd_cond_offsets[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 7, 8, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 10, 11, 12, 13, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, - 303 + 9, 9, 9, 9, 9, 10, 11, 12, + 13, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311 }; static const char _demo_machine_parser_cmd_cond_lengths[] = { @@ -426,33 +432,34 @@ static const char _demo_machine_parser_cmd_cond_lengths[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0, 1, 1, + 0, 0, 0, 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -489,7 +496,7 @@ static const char _demo_machine_parser_cmd_cond_lengths[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1 + 1, 1, 1, 1 }; static const short _demo_machine_parser_cmd_cond_keys[] = { @@ -569,6 +576,8 @@ static const short _demo_machine_parser_cmd_cond_keys[] = { -128, 127, -128, 127, -128, 127, -128, 127, -128, 127, -128, 127, -128, 127, -128, 127, -128, 127, -128, 127, -128, 127, -128, 127, + -128, 127, -128, 127, -128, 127, -128, 127, + -128, 127, -128, 127, -128, 127, -128, 127, 0 }; @@ -611,6 +620,7 @@ static const char _demo_machine_parser_cmd_cond_spaces[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -636,74 +646,75 @@ static const short _demo_machine_parser_cmd_key_offsets[] = { 326, 328, 330, 331, 335, 337, 339, 341, 343, 349, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 379, 381, 383, 385, - 389, 391, 393, 395, 397, 399, 401, 403, - 405, 407, 409, 411, 413, 415, 416, 422, - 424, 426, 428, 430, 432, 434, 436, 438, - 440, 442, 444, 446, 447, 451, 453, 455, - 456, 458, 460, 462, 464, 466, 467, 472, - 474, 476, 486, 488, 517, 517, 546, 576, - 580, 582, 584, 586, 588, 589, 591, 595, - 597, 599, 601, 603, 605, 633, 663, 693, - 723, 753, 755, 757, 759, 761, 789, 793, - 795, 797, 799, 800, 802, 804, 806, 808, - 810, 812, 814, 842, 870, 872, 874, 876, - 878, 880, 908, 910, 912, 942, 944, 946, - 948, 976, 978, 980, 1008, 1010, 1012, 1014, - 1042, 1072, 1102, 1104, 1134, 1136, 1138, 1140, - 1142, 1170, 1182, 1184, 1186, 1188, 1190, 1192, - 1194, 1222, 1252, 1254, 1256, 1258, 1286, 1288, - 1290, 1292, 1320, 1322, 1350, 1352, 1354, 1382, - 1384, 1412, 1414, 1416, 1418, 1420, 1422, 1450, - 1452, 1480, 1482, 1484, 1512, 1514, 1516, 1544, - 1546, 1548, 1576, 1578, 1580, 1608, 1610, 1612, - 1614, 1642, 1646, 1648, 1650, 1652, 1680, 1682, - 1684, 1686, 1688, 1716, 1746, 1774, 1804, 1834, - 1864, 1894, 1922, 1950, 1978, 2006, 2036, 2064, - 2092, 2120, 2150, 2180, 2210, 2238, 2266, 2296, - 2324, 2352, 2380, 2408, 2436, 2464, 2492, 2520, - 2548, 2576, 2604, 2632, 2660, 2688, 2754, 2762, - 2768, 2778, 2781, 2784, 2794, 2805, 2810, 2815, - 2820, 2825, 2834, 2845, 2850, 2855, 2860, 2865, - 2870, 2879, 2884, 2889, 2894, 2899, 2904, 2913, - 2922, 2927, 2932, 2941, 2952, 2961, 2972, 2981, - 2990, 2999, 3003, 3007, 3035, 3051, 3055, 3067, - 3083, 3111, 3143, 3163, 3183, 3203, 3223, 3251, - 3283, 3303, 3323, 3343, 3363, 3383, 3411, 3431, - 3451, 3471, 3491, 3511, 3539, 3567, 3587, 3607, - 3635, 3663, 3671, 3679, 3687, 3695, 3719, 3747, - 3755, 3763, 3771, 3779, 3787, 3803, 3811, 3819, - 3827, 3835, 3843, 3867, 3891, 3899, 3907, 3931, - 3995, 4005, 4015, 4051, 4061, 4071, 4081, 4117, - 4129, 4139, 4149, 4159, 4169, 4205, 4215, 4225, - 4235, 4245, 4255, 4265, 4301, 4311, 4321, 4331, - 4367, 4377, 4387, 4397, 4407, 4417, 4453, 4465, - 4475, 4487, 4523, 4533, 4543, 4553, 4563, 4572, - 4584, 4594, 4630, 4640, 4650, 4660, 4696, 4710, - 4724, 4734, 4744, 4754, 4764, 4774, 4810, 4820, - 4830, 4840, 4850, 4886, 4900, 4910, 4946, 4956, - 4992, 5002, 5014, 5050, 5060, 5070, 5080, 5090, - 5126, 5136, 5146, 5182, 5192, 5228, 5266, 5276, - 5286, 5296, 5332, 5342, 5352, 5362, 5371, 5385, - 5395, 5431, 5441, 5451, 5461, 5497, 5507, 5517, - 5527, 5537, 5573, 5583, 5593, 5603, 5639, 5675, - 5685, 5694, 5730, 5766, 5778, 5788, 5798, 5834, - 5843, 5853, 5863, 5873, 5883, 5893, 5929, 5995, - 6029, 6063, 6097, 6131, 6165, 6199, 6233, 6267, - 6301, 6335, 6369, 6403, 6437, 6471, 6505, 6539, - 6573, 6609, 6643, 6677, 6711, 6745, 6779, 6813, - 6847, 6881, 6915, 6949, 6957, 6965, 6973, 6981, - 6989, 7001, 7009, 7017, 7025, 7033, 7045, 7053, - 7061, 7067, 7075, 7083, 7091, 7099, 7107, 7115, - 7123, 7131, 7139, 7147, 7155, 7163, 7171, 7179, - 7187, 7195, 7203, 7211, 7219, 7231, 7239, 7251, - 7259, 7265, 7273, 7281, 7289, 7297, 7303, 7315, - 7323, 7331, 7339, 7347, 7355, 7363, 7371, 7387, - 7403, 7411, 7419, 7427, 7435, 7443, 7451, 7487, - 7495, 7503, 7511, 7519, 7527, 7535, 7541, 7557, - 7565, 7573, 7581, 7589, 7597, 7605, 7613, 7621, - 7629, 7637, 7645, 7653, 7669, 7677, 7689, 7697, - 7705, 7713, 7721, 7729, 7737, 7745, 7753, 7761, - 7765 + 391, 393, 395, 397, 399, 401, 403, 405, + 407, 409, 411, 413, 415, 417, 419, 421, + 423, 424, 430, 432, 434, 436, 438, 440, + 442, 444, 446, 448, 450, 452, 454, 455, + 459, 461, 463, 464, 466, 468, 470, 472, + 474, 475, 480, 482, 484, 494, 496, 525, + 525, 554, 584, 588, 590, 592, 594, 596, + 597, 599, 603, 605, 607, 609, 611, 613, + 641, 671, 701, 731, 761, 763, 765, 767, + 769, 797, 801, 803, 805, 807, 808, 810, + 812, 814, 816, 818, 820, 822, 850, 878, + 880, 882, 884, 886, 888, 916, 918, 920, + 950, 952, 954, 956, 984, 986, 988, 1016, + 1018, 1020, 1022, 1050, 1080, 1110, 1112, 1142, + 1144, 1146, 1148, 1150, 1178, 1190, 1192, 1194, + 1196, 1198, 1200, 1202, 1230, 1260, 1262, 1264, + 1266, 1294, 1296, 1298, 1300, 1328, 1330, 1358, + 1360, 1362, 1390, 1392, 1420, 1422, 1424, 1426, + 1428, 1430, 1458, 1460, 1488, 1490, 1492, 1520, + 1522, 1524, 1552, 1554, 1556, 1584, 1586, 1588, + 1616, 1618, 1620, 1622, 1650, 1654, 1656, 1658, + 1660, 1688, 1690, 1692, 1694, 1696, 1724, 1754, + 1782, 1812, 1842, 1872, 1902, 1930, 1958, 1986, + 2014, 2044, 2072, 2100, 2128, 2158, 2188, 2218, + 2246, 2274, 2304, 2332, 2360, 2388, 2416, 2444, + 2472, 2500, 2528, 2556, 2584, 2612, 2640, 2668, + 2696, 2762, 2770, 2776, 2786, 2789, 2792, 2802, + 2813, 2818, 2823, 2828, 2833, 2842, 2853, 2858, + 2863, 2868, 2873, 2878, 2887, 2892, 2897, 2902, + 2907, 2912, 2921, 2930, 2935, 2940, 2949, 2960, + 2969, 2980, 2989, 2998, 3007, 3011, 3015, 3043, + 3059, 3063, 3075, 3091, 3119, 3151, 3171, 3191, + 3211, 3231, 3259, 3291, 3311, 3331, 3351, 3371, + 3391, 3419, 3439, 3459, 3479, 3499, 3519, 3547, + 3575, 3595, 3615, 3643, 3671, 3679, 3687, 3695, + 3703, 3727, 3755, 3763, 3771, 3779, 3787, 3795, + 3811, 3819, 3827, 3835, 3843, 3851, 3875, 3899, + 3907, 3915, 3939, 4003, 4013, 4023, 4059, 4069, + 4079, 4089, 4125, 4137, 4147, 4157, 4167, 4177, + 4213, 4223, 4233, 4243, 4253, 4263, 4273, 4309, + 4319, 4329, 4339, 4375, 4385, 4395, 4405, 4415, + 4425, 4461, 4473, 4483, 4495, 4531, 4541, 4551, + 4561, 4571, 4580, 4592, 4602, 4638, 4648, 4658, + 4668, 4704, 4718, 4732, 4742, 4752, 4762, 4772, + 4782, 4818, 4828, 4838, 4848, 4858, 4894, 4908, + 4918, 4954, 4964, 5000, 5010, 5024, 5060, 5070, + 5080, 5090, 5100, 5136, 5146, 5156, 5166, 5202, + 5212, 5222, 5258, 5268, 5304, 5342, 5352, 5362, + 5372, 5408, 5418, 5428, 5438, 5447, 5461, 5471, + 5507, 5517, 5527, 5537, 5573, 5583, 5593, 5603, + 5613, 5649, 5659, 5669, 5679, 5715, 5751, 5761, + 5770, 5806, 5842, 5854, 5864, 5874, 5910, 5919, + 5929, 5939, 5949, 5959, 5969, 6005, 6071, 6105, + 6139, 6173, 6207, 6241, 6275, 6309, 6343, 6377, + 6411, 6445, 6479, 6513, 6547, 6581, 6615, 6649, + 6683, 6719, 6753, 6787, 6821, 6855, 6889, 6923, + 6957, 6991, 7025, 7059, 7067, 7075, 7083, 7091, + 7099, 7111, 7119, 7127, 7135, 7143, 7155, 7163, + 7171, 7177, 7185, 7193, 7201, 7209, 7217, 7225, + 7233, 7241, 7249, 7257, 7265, 7273, 7281, 7289, + 7297, 7305, 7313, 7321, 7329, 7341, 7349, 7361, + 7369, 7375, 7383, 7391, 7399, 7407, 7413, 7425, + 7433, 7441, 7449, 7457, 7465, 7473, 7481, 7497, + 7513, 7521, 7529, 7537, 7545, 7553, 7561, 7597, + 7605, 7613, 7621, 7629, 7637, 7645, 7651, 7667, + 7675, 7683, 7691, 7699, 7707, 7715, 7723, 7731, + 7739, 7747, 7755, 7763, 7779, 7787, 7803, 7811, + 7819, 7827, 7835, 7843, 7851, 7859, 7867, 7875, + 7883, 7891, 7899, 7903 }; static const short _demo_machine_parser_cmd_trans_keys[] = { @@ -755,8 +766,9 @@ static const short _demo_machine_parser_cmd_trans_keys[] = { 111, 82, 114, 68, 100, 69, 101, 65, 97, 76, 108, 77, 109, 69, 73, 77, 101, 105, 109, 67, 99, 79, 111, 80, - 112, 68, 71, 100, 103, 67, 99, 79, - 111, 77, 109, 80, 112, 83, 115, 67, + 112, 68, 71, 76, 100, 103, 108, 67, + 99, 79, 111, 77, 109, 80, 112, 69, + 101, 78, 110, 84, 116, 83, 115, 67, 99, 72, 104, 79, 111, 65, 97, 68, 100, 83, 115, 67, 99, 70, 102, 45, 73, 80, 84, 105, 112, 116, 80, 112, @@ -1332,131 +1344,148 @@ static const short _demo_machine_parser_cmd_trans_keys[] = { 358, 360, 361, 364, 367, 368, 370, 371, 372, 376, 544, 576, 128, 383, 384, 639, 288, 320, 336, 368, 544, 576, 128, 383, - 384, 639, 288, 320, 324, 327, 356, 359, - 544, 576, 128, 383, 384, 639, 288, 320, - 321, 323, 324, 325, 326, 328, 329, 332, - 335, 336, 338, 339, 340, 344, 353, 355, - 356, 357, 358, 360, 361, 364, 367, 368, - 370, 371, 372, 376, 544, 576, 128, 383, - 384, 639, 288, 320, 323, 355, 544, 576, - 128, 383, 384, 639, 288, 320, 335, 367, - 544, 576, 128, 383, 384, 639, 288, 320, - 333, 365, 544, 576, 128, 383, 384, 639, - 288, 320, 336, 368, 544, 576, 128, 383, - 384, 639, 288, 320, 321, 323, 324, 325, - 326, 328, 329, 332, 335, 336, 338, 339, - 340, 344, 353, 355, 356, 357, 358, 360, - 361, 364, 367, 368, 370, 371, 372, 376, - 544, 576, 128, 383, 384, 639, 288, 320, - 339, 371, 544, 576, 128, 383, 384, 639, - 288, 320, 323, 355, 544, 576, 128, 383, - 384, 639, 288, 320, 321, 323, 324, 325, - 326, 328, 329, 332, 335, 336, 338, 339, - 340, 344, 353, 355, 356, 357, 358, 360, - 361, 364, 367, 368, 370, 371, 372, 376, - 544, 576, 128, 383, 384, 639, 288, 320, - 328, 360, 544, 576, 128, 383, 384, 639, + 384, 639, 288, 320, 324, 327, 332, 356, + 359, 364, 544, 576, 128, 383, 384, 639, 288, 320, 321, 323, 324, 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, 372, 376, 544, 576, + 128, 383, 384, 639, 288, 320, 323, 355, + 544, 576, 128, 383, 384, 639, 288, 320, + 335, 367, 544, 576, 128, 383, 384, 639, + 288, 320, 333, 365, 544, 576, 128, 383, + 384, 639, 288, 320, 336, 368, 544, 576, 128, 383, 384, 639, 288, 320, 321, 323, 324, 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, - 372, 376, 544, 576, 588, 620, 128, 383, - 384, 639, 288, 320, 335, 367, 544, 576, - 128, 383, 384, 639, 288, 320, 321, 353, - 544, 576, 128, 383, 384, 639, 288, 320, - 324, 356, 544, 576, 128, 383, 384, 639, - 288, 320, 321, 323, 324, 325, 326, 328, - 329, 332, 335, 336, 338, 339, 340, 344, - 353, 355, 356, 357, 358, 360, 361, 364, - 367, 368, 370, 371, 372, 376, 544, 576, - 128, 383, 384, 639, 288, 320, 339, 371, - 544, 576, 128, 383, 384, 639, 288, 320, - 323, 355, 544, 576, 128, 383, 384, 639, - 288, 320, 326, 358, 544, 576, 128, 383, - 384, 639, 288, 301, 320, 544, 576, 128, - 383, 384, 639, 288, 320, 329, 336, 340, - 361, 368, 372, 544, 576, 128, 383, 384, - 639, 288, 320, 336, 368, 544, 576, 128, - 383, 384, 639, 288, 320, 321, 323, 324, - 325, 326, 328, 329, 332, 335, 336, 338, - 339, 340, 344, 353, 355, 356, 357, 358, - 360, 361, 364, 367, 368, 370, 371, 372, - 376, 544, 576, 128, 383, 384, 639, 288, - 320, 335, 367, 544, 576, 128, 383, 384, - 639, 288, 320, 338, 370, 544, 576, 128, - 383, 384, 639, 288, 320, 340, 372, 544, - 576, 128, 383, 384, 639, 288, 320, 321, - 323, 324, 325, 326, 328, 329, 332, 335, - 336, 338, 339, 340, 344, 353, 355, 356, - 357, 358, 360, 361, 364, 367, 368, 370, - 371, 372, 376, 544, 576, 128, 383, 384, - 639, 288, 320, 338, 370, 544, 576, 128, - 383, 384, 639, 288, 320, 321, 353, 544, - 576, 128, 383, 384, 639, 288, 320, 334, - 366, 544, 576, 128, 383, 384, 639, 288, - 320, 339, 371, 544, 576, 128, 383, 384, - 639, 288, 320, 321, 323, 324, 325, 326, - 328, 329, 332, 335, 336, 338, 339, 340, - 344, 353, 355, 356, 357, 358, 360, 361, - 364, 367, 368, 370, 371, 372, 376, 544, - 576, 128, 383, 384, 639, 288, 320, 335, - 367, 544, 576, 128, 383, 384, 639, 288, - 320, 338, 370, 544, 576, 128, 383, 384, - 639, 288, 320, 340, 372, 544, 576, 128, - 383, 384, 639, 288, 320, 321, 323, 324, - 325, 326, 328, 329, 332, 335, 336, 338, - 339, 340, 344, 353, 355, 356, 357, 358, - 360, 361, 364, 367, 368, 370, 371, 372, - 376, 544, 576, 128, 383, 384, 639, 288, - 320, 321, 323, 324, 325, 326, 328, 329, - 332, 335, 336, 338, 339, 340, 344, 353, - 355, 356, 357, 358, 360, 361, 364, 367, - 368, 370, 371, 372, 376, 544, 576, 128, - 383, 384, 639, 288, 320, 342, 374, 544, - 576, 128, 383, 384, 639, 288, 310, 320, + 372, 376, 544, 576, 128, 383, 384, 639, + 288, 320, 325, 357, 544, 576, 128, 383, + 384, 639, 288, 320, 334, 366, 544, 576, + 128, 383, 384, 639, 288, 320, 340, 372, 544, 576, 128, 383, 384, 639, 288, 320, 321, 323, 324, 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, 372, 376, 544, 576, 128, 383, + 384, 639, 288, 320, 339, 371, 544, 576, + 128, 383, 384, 639, 288, 320, 323, 355, + 544, 576, 128, 383, 384, 639, 288, 320, + 321, 323, 324, 325, 326, 328, 329, 332, + 335, 336, 338, 339, 340, 344, 353, 355, + 356, 357, 358, 360, 361, 364, 367, 368, + 370, 371, 372, 376, 544, 576, 128, 383, + 384, 639, 288, 320, 328, 360, 544, 576, + 128, 383, 384, 639, 288, 320, 321, 323, + 324, 325, 326, 328, 329, 332, 335, 336, + 338, 339, 340, 344, 353, 355, 356, 357, + 358, 360, 361, 364, 367, 368, 370, 371, + 372, 376, 544, 576, 128, 383, 384, 639, + 288, 320, 321, 323, 324, 325, 326, 328, + 329, 332, 335, 336, 338, 339, 340, 344, + 353, 355, 356, 357, 358, 360, 361, 364, + 367, 368, 370, 371, 372, 376, 544, 576, + 588, 620, 128, 383, 384, 639, 288, 320, + 335, 367, 544, 576, 128, 383, 384, 639, + 288, 320, 321, 353, 544, 576, 128, 383, + 384, 639, 288, 320, 324, 356, 544, 576, + 128, 383, 384, 639, 288, 320, 321, 323, + 324, 325, 326, 328, 329, 332, 335, 336, + 338, 339, 340, 344, 353, 355, 356, 357, + 358, 360, 361, 364, 367, 368, 370, 371, + 372, 376, 544, 576, 128, 383, 384, 639, + 288, 320, 339, 371, 544, 576, 128, 383, + 384, 639, 288, 320, 323, 355, 544, 576, + 128, 383, 384, 639, 288, 320, 326, 358, + 544, 576, 128, 383, 384, 639, 288, 301, + 320, 544, 576, 128, 383, 384, 639, 288, + 320, 329, 336, 340, 361, 368, 372, 544, + 576, 128, 383, 384, 639, 288, 320, 336, + 368, 544, 576, 128, 383, 384, 639, 288, + 320, 321, 323, 324, 325, 326, 328, 329, + 332, 335, 336, 338, 339, 340, 344, 353, + 355, 356, 357, 358, 360, 361, 364, 367, + 368, 370, 371, 372, 376, 544, 576, 128, + 383, 384, 639, 288, 320, 335, 367, 544, + 576, 128, 383, 384, 639, 288, 320, 338, + 370, 544, 576, 128, 383, 384, 639, 288, + 320, 340, 372, 544, 576, 128, 383, 384, + 639, 288, 320, 321, 323, 324, 325, 326, + 328, 329, 332, 335, 336, 338, 339, 340, + 344, 353, 355, 356, 357, 358, 360, 361, + 364, 367, 368, 370, 371, 372, 376, 544, + 576, 128, 383, 384, 639, 288, 320, 338, + 370, 544, 576, 128, 383, 384, 639, 288, + 320, 321, 353, 544, 576, 128, 383, 384, + 639, 288, 320, 334, 366, 544, 576, 128, + 383, 384, 639, 288, 320, 339, 371, 544, + 576, 128, 383, 384, 639, 288, 320, 321, + 323, 324, 325, 326, 328, 329, 332, 335, + 336, 338, 339, 340, 344, 353, 355, 356, + 357, 358, 360, 361, 364, 367, 368, 370, + 371, 372, 376, 544, 576, 128, 383, 384, + 639, 288, 320, 335, 367, 544, 576, 128, + 383, 384, 639, 288, 320, 338, 370, 544, + 576, 128, 383, 384, 639, 288, 320, 340, + 372, 544, 576, 128, 383, 384, 639, 288, + 320, 321, 323, 324, 325, 326, 328, 329, + 332, 335, 336, 338, 339, 340, 344, 353, + 355, 356, 357, 358, 360, 361, 364, 367, + 368, 370, 371, 372, 376, 544, 576, 128, + 383, 384, 639, 288, 320, 321, 323, 324, + 325, 326, 328, 329, 332, 335, 336, 338, + 339, 340, 344, 353, 355, 356, 357, 358, + 360, 361, 364, 367, 368, 370, 371, 372, + 376, 544, 576, 128, 383, 384, 639, 288, + 320, 342, 374, 544, 576, 128, 383, 384, + 639, 288, 310, 320, 544, 576, 128, 383, 384, 639, 288, 320, 321, 323, 324, 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, 372, 376, 544, 576, 128, 383, 384, 639, 288, 320, - 321, 339, 353, 371, 544, 576, 128, 383, - 384, 639, 288, 320, 333, 365, 544, 576, - 128, 383, 384, 639, 288, 320, 325, 357, - 544, 576, 128, 383, 384, 639, 288, 320, 321, 323, 324, 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, 372, 376, 544, 576, 128, 383, - 384, 639, 288, 301, 320, 544, 576, 128, - 383, 384, 639, 288, 320, 334, 366, 544, - 576, 128, 383, 384, 639, 288, 320, 321, - 353, 544, 576, 128, 383, 384, 639, 288, - 320, 336, 368, 544, 576, 128, 383, 384, - 639, 288, 320, 340, 372, 544, 576, 128, - 383, 384, 639, 288, 320, 338, 370, 544, - 576, 128, 383, 384, 639, 288, 320, 321, - 323, 324, 325, 326, 328, 329, 332, 335, - 336, 338, 339, 340, 344, 353, 355, 356, - 357, 358, 360, 361, 364, 367, 368, 370, - 371, 372, 376, 544, 576, 128, 383, 384, - 639, 288, 301, 320, 321, 323, 324, 325, + 384, 639, 288, 320, 321, 339, 353, 371, + 544, 576, 128, 383, 384, 639, 288, 320, + 333, 365, 544, 576, 128, 383, 384, 639, + 288, 320, 325, 357, 544, 576, 128, 383, + 384, 639, 288, 320, 321, 323, 324, 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, 372, 376, - 544, 557, 576, 577, 579, 580, 581, 582, - 584, 585, 588, 591, 592, 594, 595, 596, - 600, 609, 611, 612, 613, 614, 616, 617, - 620, 623, 624, 626, 627, 628, 632, 128, - 383, 384, 639, 288, 320, 321, 323, 324, + 544, 576, 128, 383, 384, 639, 288, 301, + 320, 544, 576, 128, 383, 384, 639, 288, + 320, 334, 366, 544, 576, 128, 383, 384, + 639, 288, 320, 321, 353, 544, 576, 128, + 383, 384, 639, 288, 320, 336, 368, 544, + 576, 128, 383, 384, 639, 288, 320, 340, + 372, 544, 576, 128, 383, 384, 639, 288, + 320, 338, 370, 544, 576, 128, 383, 384, + 639, 288, 320, 321, 323, 324, 325, 326, + 328, 329, 332, 335, 336, 338, 339, 340, + 344, 353, 355, 356, 357, 358, 360, 361, + 364, 367, 368, 370, 371, 372, 376, 544, + 576, 128, 383, 384, 639, 288, 301, 320, + 321, 323, 324, 325, 326, 328, 329, 332, + 335, 336, 338, 339, 340, 344, 353, 355, + 356, 357, 358, 360, 361, 364, 367, 368, + 370, 371, 372, 376, 544, 557, 576, 577, + 579, 580, 581, 582, 584, 585, 588, 591, + 592, 594, 595, 596, 600, 609, 611, 612, + 613, 614, 616, 617, 620, 623, 624, 626, + 627, 628, 632, 128, 383, 384, 639, 288, + 320, 321, 323, 324, 325, 326, 328, 329, + 332, 335, 336, 338, 339, 340, 344, 353, + 355, 356, 357, 358, 360, 361, 364, 367, + 368, 370, 371, 372, 376, 544, 576, 384, + 639, 288, 320, 321, 323, 324, 325, 326, + 328, 329, 332, 335, 336, 338, 339, 340, + 344, 353, 355, 356, 357, 358, 360, 361, + 364, 367, 368, 370, 371, 372, 376, 544, + 576, 384, 639, 288, 320, 321, 323, 324, 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, 372, @@ -1528,11 +1557,11 @@ static const short _demo_machine_parser_cmd_trans_keys[] = { 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, 372, - 376, 544, 576, 384, 639, 288, 320, 321, - 323, 324, 325, 326, 328, 329, 332, 335, - 336, 338, 339, 340, 344, 353, 355, 356, - 357, 358, 360, 361, 364, 367, 368, 370, - 371, 372, 376, 544, 576, 588, 620, 384, + 376, 544, 576, 588, 620, 384, 639, 288, + 320, 321, 323, 324, 325, 326, 328, 329, + 332, 335, 336, 338, 339, 340, 344, 353, + 355, 356, 357, 358, 360, 361, 364, 367, + 368, 370, 371, 372, 376, 544, 576, 384, 639, 288, 320, 321, 323, 324, 325, 326, 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, @@ -1571,114 +1600,113 @@ static const short _demo_machine_parser_cmd_trans_keys[] = { 328, 329, 332, 335, 336, 338, 339, 340, 344, 353, 355, 356, 357, 358, 360, 361, 364, 367, 368, 370, 371, 372, 376, 544, - 576, 384, 639, 288, 320, 321, 323, 324, - 325, 326, 328, 329, 332, 335, 336, 338, - 339, 340, 344, 353, 355, 356, 357, 358, - 360, 361, 364, 367, 368, 370, 371, 372, - 376, 544, 576, 384, 639, 320, 333, 365, - 576, 589, 621, 384, 639, 320, 326, 358, - 576, 582, 614, 384, 639, 320, 321, 353, - 576, 577, 609, 384, 639, 320, 336, 368, - 576, 592, 624, 384, 639, 320, 339, 371, - 576, 595, 627, 384, 639, 320, 328, 334, - 360, 366, 576, 584, 590, 616, 622, 384, - 639, 320, 323, 355, 576, 579, 611, 384, - 639, 320, 336, 368, 576, 592, 624, 384, - 639, 320, 342, 374, 576, 598, 630, 384, - 639, 308, 310, 320, 564, 566, 576, 384, - 639, 320, 321, 339, 353, 371, 576, 577, - 595, 609, 627, 384, 639, 320, 333, 365, - 576, 589, 621, 384, 639, 320, 325, 357, - 576, 581, 613, 384, 639, 301, 320, 557, - 576, 384, 639, 320, 334, 366, 576, 590, - 622, 384, 639, 320, 321, 353, 576, 577, + 576, 384, 639, 320, 333, 365, 576, 589, + 621, 384, 639, 320, 326, 358, 576, 582, + 614, 384, 639, 320, 321, 353, 576, 577, 609, 384, 639, 320, 336, 368, 576, 592, - 624, 384, 639, 320, 340, 372, 576, 596, - 628, 384, 639, 320, 338, 370, 576, 594, - 626, 384, 639, 320, 344, 376, 576, 600, - 632, 384, 639, 320, 336, 368, 576, 592, - 624, 384, 639, 320, 329, 361, 576, 585, - 617, 384, 639, 320, 338, 370, 576, 594, - 626, 384, 639, 320, 325, 357, 576, 581, - 613, 384, 639, 320, 339, 371, 576, 595, - 627, 384, 639, 320, 338, 370, 576, 594, - 626, 384, 639, 320, 335, 367, 576, 591, - 623, 384, 639, 320, 333, 365, 576, 589, - 621, 384, 639, 320, 325, 357, 576, 581, - 613, 384, 639, 320, 321, 353, 576, 577, - 609, 384, 639, 320, 324, 356, 576, 580, - 612, 384, 639, 320, 325, 357, 576, 581, - 613, 384, 639, 320, 338, 370, 576, 594, - 626, 384, 639, 320, 333, 336, 365, 368, - 576, 589, 592, 621, 624, 384, 639, 320, + 624, 384, 639, 320, 339, 371, 576, 595, + 627, 384, 639, 320, 328, 334, 360, 366, + 576, 584, 590, 616, 622, 384, 639, 320, + 323, 355, 576, 579, 611, 384, 639, 320, 336, 368, 576, 592, 624, 384, 639, 320, - 329, 341, 361, 373, 576, 585, 597, 617, - 629, 384, 639, 320, 342, 374, 576, 598, - 630, 384, 639, 310, 320, 566, 576, 384, - 639, 320, 335, 367, 576, 591, 623, 384, - 639, 320, 323, 355, 576, 579, 611, 384, + 342, 374, 576, 598, 630, 384, 639, 308, + 310, 320, 564, 566, 576, 384, 639, 320, + 321, 339, 353, 371, 576, 577, 595, 609, + 627, 384, 639, 320, 333, 365, 576, 589, + 621, 384, 639, 320, 325, 357, 576, 581, + 613, 384, 639, 301, 320, 557, 576, 384, + 639, 320, 334, 366, 576, 590, 622, 384, 639, 320, 321, 353, 576, 577, 609, 384, - 639, 320, 332, 364, 576, 588, 620, 384, - 639, 301, 320, 557, 576, 384, 639, 320, - 329, 336, 361, 368, 576, 585, 592, 617, - 624, 384, 639, 320, 336, 368, 576, 592, + 639, 320, 336, 368, 576, 592, 624, 384, + 639, 320, 340, 372, 576, 596, 628, 384, + 639, 320, 338, 370, 576, 594, 626, 384, + 639, 320, 344, 376, 576, 600, 632, 384, + 639, 320, 336, 368, 576, 592, 624, 384, + 639, 320, 329, 361, 576, 585, 617, 384, + 639, 320, 338, 370, 576, 594, 626, 384, + 639, 320, 325, 357, 576, 581, 613, 384, + 639, 320, 339, 371, 576, 595, 627, 384, + 639, 320, 338, 370, 576, 594, 626, 384, + 639, 320, 335, 367, 576, 591, 623, 384, + 639, 320, 333, 365, 576, 589, 621, 384, + 639, 320, 325, 357, 576, 581, 613, 384, + 639, 320, 321, 353, 576, 577, 609, 384, + 639, 320, 324, 356, 576, 580, 612, 384, + 639, 320, 325, 357, 576, 581, 613, 384, + 639, 320, 338, 370, 576, 594, 626, 384, + 639, 320, 333, 336, 365, 368, 576, 589, + 592, 621, 624, 384, 639, 320, 336, 368, + 576, 592, 624, 384, 639, 320, 329, 341, + 361, 373, 576, 585, 597, 617, 629, 384, + 639, 320, 342, 374, 576, 598, 630, 384, + 639, 310, 320, 566, 576, 384, 639, 320, + 335, 367, 576, 591, 623, 384, 639, 320, + 323, 355, 576, 579, 611, 384, 639, 320, + 321, 353, 576, 577, 609, 384, 639, 320, + 332, 364, 576, 588, 620, 384, 639, 301, + 320, 557, 576, 384, 639, 320, 329, 336, + 361, 368, 576, 585, 592, 617, 624, 384, + 639, 320, 336, 368, 576, 592, 624, 384, + 639, 320, 335, 367, 576, 591, 623, 384, + 639, 320, 338, 370, 576, 594, 626, 384, + 639, 320, 340, 372, 576, 596, 628, 384, + 639, 320, 336, 368, 576, 592, 624, 384, + 639, 320, 329, 361, 576, 585, 617, 384, + 639, 320, 324, 356, 576, 580, 612, 384, + 639, 320, 321, 323, 343, 353, 355, 375, + 576, 577, 579, 599, 609, 611, 631, 384, + 639, 320, 339, 340, 345, 371, 372, 377, + 576, 595, 596, 601, 627, 628, 633, 384, + 639, 320, 339, 371, 576, 595, 627, 384, + 639, 320, 343, 375, 576, 599, 631, 384, + 639, 320, 335, 367, 576, 591, 623, 384, + 639, 320, 338, 370, 576, 594, 626, 384, + 639, 320, 324, 356, 576, 580, 612, 384, + 639, 320, 328, 360, 576, 584, 616, 384, + 639, 288, 320, 321, 323, 324, 325, 326, + 328, 329, 332, 335, 336, 338, 339, 340, + 344, 353, 355, 356, 357, 358, 360, 361, + 364, 367, 368, 370, 371, 372, 376, 544, + 576, 588, 620, 384, 639, 320, 335, 367, + 576, 591, 623, 384, 639, 320, 321, 353, + 576, 577, 609, 384, 639, 320, 324, 356, + 576, 580, 612, 384, 639, 320, 339, 371, + 576, 595, 627, 384, 639, 320, 323, 355, + 576, 579, 611, 384, 639, 320, 326, 358, + 576, 582, 614, 384, 639, 301, 320, 557, + 576, 384, 639, 320, 329, 336, 340, 361, + 368, 372, 576, 585, 592, 596, 617, 624, + 628, 384, 639, 320, 336, 368, 576, 592, 624, 384, 639, 320, 335, 367, 576, 591, 623, 384, 639, 320, 338, 370, 576, 594, 626, 384, 639, 320, 340, 372, 576, 596, - 628, 384, 639, 320, 336, 368, 576, 592, - 624, 384, 639, 320, 329, 361, 576, 585, - 617, 384, 639, 320, 324, 356, 576, 580, - 612, 384, 639, 320, 321, 323, 343, 353, - 355, 375, 576, 577, 579, 599, 609, 611, - 631, 384, 639, 320, 339, 340, 345, 371, - 372, 377, 576, 595, 596, 601, 627, 628, - 633, 384, 639, 320, 339, 371, 576, 595, - 627, 384, 639, 320, 343, 375, 576, 599, - 631, 384, 639, 320, 335, 367, 576, 591, - 623, 384, 639, 320, 338, 370, 576, 594, - 626, 384, 639, 320, 324, 356, 576, 580, - 612, 384, 639, 320, 328, 360, 576, 584, - 616, 384, 639, 288, 320, 321, 323, 324, - 325, 326, 328, 329, 332, 335, 336, 338, - 339, 340, 344, 353, 355, 356, 357, 358, - 360, 361, 364, 367, 368, 370, 371, 372, - 376, 544, 576, 588, 620, 384, 639, 320, - 335, 367, 576, 591, 623, 384, 639, 320, - 321, 353, 576, 577, 609, 384, 639, 320, - 324, 356, 576, 580, 612, 384, 639, 320, - 339, 371, 576, 595, 627, 384, 639, 320, - 323, 355, 576, 579, 611, 384, 639, 320, - 326, 358, 576, 582, 614, 384, 639, 301, - 320, 557, 576, 384, 639, 320, 329, 336, - 340, 361, 368, 372, 576, 585, 592, 596, - 617, 624, 628, 384, 639, 320, 336, 368, - 576, 592, 624, 384, 639, 320, 335, 367, - 576, 591, 623, 384, 639, 320, 338, 370, - 576, 594, 626, 384, 639, 320, 340, 372, - 576, 596, 628, 384, 639, 320, 338, 370, - 576, 594, 626, 384, 639, 320, 321, 353, - 576, 577, 609, 384, 639, 320, 334, 366, - 576, 590, 622, 384, 639, 320, 339, 371, - 576, 595, 627, 384, 639, 320, 325, 357, - 576, 581, 613, 384, 639, 320, 321, 353, - 576, 577, 609, 384, 639, 320, 332, 364, - 576, 588, 620, 384, 639, 320, 333, 365, - 576, 589, 621, 384, 639, 320, 325, 329, - 333, 357, 361, 365, 576, 581, 585, 589, - 613, 617, 621, 384, 639, 320, 323, 355, - 576, 579, 611, 384, 639, 320, 324, 327, - 356, 359, 576, 580, 583, 612, 615, 384, - 639, 320, 323, 355, 576, 579, 611, 384, - 639, 320, 335, 367, 576, 591, 623, 384, - 639, 320, 333, 365, 576, 589, 621, 384, - 639, 320, 336, 368, 576, 592, 624, 384, - 639, 320, 339, 371, 576, 595, 627, 384, - 639, 320, 323, 355, 576, 579, 611, 384, - 639, 320, 335, 367, 576, 591, 623, 384, - 639, 320, 336, 368, 576, 592, 624, 384, - 639, 296, 297, 318, 552, 553, 574, 384, - 639, 297, 553, 384, 639, 297, 553, 384, - 639, 0 + 628, 384, 639, 320, 338, 370, 576, 594, + 626, 384, 639, 320, 321, 353, 576, 577, + 609, 384, 639, 320, 334, 366, 576, 590, + 622, 384, 639, 320, 339, 371, 576, 595, + 627, 384, 639, 320, 325, 357, 576, 581, + 613, 384, 639, 320, 321, 353, 576, 577, + 609, 384, 639, 320, 332, 364, 576, 588, + 620, 384, 639, 320, 333, 365, 576, 589, + 621, 384, 639, 320, 325, 329, 333, 357, + 361, 365, 576, 581, 585, 589, 613, 617, + 621, 384, 639, 320, 323, 355, 576, 579, + 611, 384, 639, 320, 324, 327, 332, 356, + 359, 364, 576, 580, 583, 588, 612, 615, + 620, 384, 639, 320, 323, 355, 576, 579, + 611, 384, 639, 320, 335, 367, 576, 591, + 623, 384, 639, 320, 333, 365, 576, 589, + 621, 384, 639, 320, 336, 368, 576, 592, + 624, 384, 639, 320, 325, 357, 576, 581, + 613, 384, 639, 320, 334, 366, 576, 590, + 622, 384, 639, 320, 340, 372, 576, 596, + 628, 384, 639, 320, 339, 371, 576, 595, + 627, 384, 639, 320, 323, 355, 576, 579, + 611, 384, 639, 320, 335, 367, 576, 591, + 623, 384, 639, 320, 336, 368, 576, 592, + 624, 384, 639, 296, 297, 318, 552, 553, + 574, 384, 639, 297, 553, 384, 639, 297, + 553, 384, 639, 0 }; static const char _demo_machine_parser_cmd_single_lengths[] = { @@ -1702,59 +1730,60 @@ static const char _demo_machine_parser_cmd_single_lengths[] = { 2, 2, 2, 4, 2, 4, 2, 2, 2, 2, 1, 4, 2, 2, 2, 2, 6, 6, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 6, 2, 2, 2, 4, + 2, 2, 2, 6, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 4, 2, 2, 1, - 2, 2, 2, 2, 2, 1, 5, 0, - 0, 2, 0, 29, 0, 29, 30, 4, - 2, 2, 2, 2, 1, 2, 4, 2, - 2, 2, 2, 2, 28, 30, 30, 30, - 30, 2, 2, 2, 2, 28, 4, 2, + 1, 6, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 4, 2, 2, 1, 2, 2, 2, 2, 2, - 2, 2, 28, 28, 2, 2, 2, 2, - 2, 28, 2, 2, 30, 2, 2, 2, - 28, 2, 2, 28, 2, 2, 2, 28, - 30, 30, 2, 30, 2, 2, 2, 2, - 28, 12, 2, 2, 2, 2, 2, 2, - 28, 30, 2, 2, 2, 28, 2, 2, + 1, 5, 0, 0, 2, 0, 29, 0, + 29, 30, 4, 2, 2, 2, 2, 1, + 2, 4, 2, 2, 2, 2, 2, 28, + 30, 30, 30, 30, 2, 2, 2, 2, + 28, 4, 2, 2, 2, 1, 2, 2, + 2, 2, 2, 2, 2, 28, 28, 2, + 2, 2, 2, 2, 28, 2, 2, 30, + 2, 2, 2, 28, 2, 2, 28, 2, + 2, 2, 28, 30, 30, 2, 30, 2, + 2, 2, 2, 28, 12, 2, 2, 2, + 2, 2, 2, 28, 30, 2, 2, 2, + 28, 2, 2, 2, 28, 2, 28, 2, + 2, 28, 2, 28, 2, 2, 2, 2, 2, 28, 2, 28, 2, 2, 28, 2, - 28, 2, 2, 2, 2, 2, 28, 2, - 28, 2, 2, 28, 2, 2, 28, 2, - 2, 28, 2, 2, 28, 2, 2, 2, - 28, 4, 2, 2, 2, 28, 2, 2, - 2, 2, 28, 30, 28, 30, 30, 30, - 30, 28, 28, 28, 28, 30, 28, 28, - 28, 30, 30, 30, 28, 28, 30, 28, + 2, 28, 2, 2, 28, 2, 2, 28, + 2, 2, 2, 28, 4, 2, 2, 2, + 28, 2, 2, 2, 2, 28, 30, 28, + 30, 30, 30, 30, 28, 28, 28, 28, + 30, 28, 28, 28, 30, 30, 30, 28, + 28, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 62, 4, 4, - 8, 1, 1, 8, 9, 3, 3, 3, - 3, 7, 9, 3, 3, 3, 3, 3, - 7, 3, 3, 3, 3, 3, 7, 7, - 3, 3, 7, 9, 7, 9, 7, 7, - 7, 2, 2, 16, 4, 2, 4, 4, - 16, 20, 8, 8, 8, 8, 16, 20, - 8, 8, 8, 8, 8, 16, 8, 8, - 8, 8, 8, 16, 16, 8, 8, 16, - 20, 6, 6, 6, 6, 16, 20, 6, - 6, 6, 6, 6, 14, 6, 6, 6, - 6, 6, 16, 16, 6, 6, 16, 44, - 6, 6, 32, 6, 6, 6, 32, 8, - 6, 6, 6, 6, 32, 6, 6, 6, - 6, 6, 6, 32, 6, 6, 6, 32, - 6, 6, 6, 6, 6, 32, 8, 6, - 8, 32, 6, 6, 6, 6, 5, 8, - 6, 32, 6, 6, 6, 32, 10, 10, - 6, 6, 6, 6, 6, 32, 6, 6, - 6, 6, 32, 10, 6, 32, 6, 32, - 6, 8, 32, 6, 6, 6, 6, 32, - 6, 6, 32, 6, 32, 34, 6, 6, - 6, 32, 6, 6, 6, 5, 10, 6, - 32, 6, 6, 6, 32, 6, 6, 6, - 6, 32, 6, 6, 6, 32, 32, 6, - 5, 32, 32, 8, 6, 6, 32, 5, - 6, 6, 6, 6, 6, 32, 62, 32, + 62, 4, 4, 8, 1, 1, 8, 9, + 3, 3, 3, 3, 7, 9, 3, 3, + 3, 3, 3, 7, 3, 3, 3, 3, + 3, 7, 7, 3, 3, 7, 9, 7, + 9, 7, 7, 7, 2, 2, 16, 4, + 2, 4, 4, 16, 20, 8, 8, 8, + 8, 16, 20, 8, 8, 8, 8, 8, + 16, 8, 8, 8, 8, 8, 16, 16, + 8, 8, 16, 20, 6, 6, 6, 6, + 16, 20, 6, 6, 6, 6, 6, 14, + 6, 6, 6, 6, 6, 16, 16, 6, + 6, 16, 44, 6, 6, 32, 6, 6, + 6, 32, 8, 6, 6, 6, 6, 32, + 6, 6, 6, 6, 6, 6, 32, 6, + 6, 6, 32, 6, 6, 6, 6, 6, + 32, 8, 6, 8, 32, 6, 6, 6, + 6, 5, 8, 6, 32, 6, 6, 6, + 32, 10, 10, 6, 6, 6, 6, 6, + 32, 6, 6, 6, 6, 32, 10, 6, + 32, 6, 32, 6, 10, 32, 6, 6, + 6, 6, 32, 6, 6, 6, 32, 6, + 6, 32, 6, 32, 34, 6, 6, 6, + 32, 6, 6, 6, 5, 10, 6, 32, + 6, 6, 6, 32, 6, 6, 6, 6, + 32, 6, 6, 6, 32, 32, 6, 5, + 32, 32, 8, 6, 6, 32, 5, 6, + 6, 6, 6, 6, 32, 62, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 32, 32, 32, 32, 32, 32, 32, @@ -1768,9 +1797,9 @@ static const char _demo_machine_parser_cmd_single_lengths[] = { 6, 6, 6, 6, 6, 6, 34, 6, 6, 6, 6, 6, 6, 4, 14, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 14, 6, 10, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 2, - 2 + 6, 6, 6, 14, 6, 14, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 2, 2 }; static const char _demo_machine_parser_cmd_range_lengths[] = { @@ -1799,8 +1828,8 @@ static const char _demo_machine_parser_cmd_range_lengths[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, - 1, 4, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1820,18 +1849,19 @@ static const char _demo_machine_parser_cmd_range_lengths[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 6, 6, 1, 4, 6, + 1, 1, 1, 1, 1, 1, 6, 6, + 1, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 4, 1, 1, 1, 1, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 4, 1, 1, 4, 10, + 6, 6, 6, 4, 1, 1, 1, 1, + 4, 4, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 4, 4, 1, + 1, 4, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1846,7 +1876,7 @@ static const char _demo_machine_parser_cmd_range_lengths[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 1, + 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1862,7 +1892,7 @@ static const char _demo_machine_parser_cmd_range_lengths[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1 + 1, 1, 1, 1 }; static const short _demo_machine_parser_cmd_index_offsets[] = { @@ -1887,74 +1917,75 @@ static const short _demo_machine_parser_cmd_index_offsets[] = { 461, 464, 467, 469, 474, 477, 480, 483, 486, 493, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 534, 537, 540, 543, - 548, 551, 554, 557, 560, 563, 566, 569, - 572, 575, 578, 581, 584, 587, 589, 596, - 599, 602, 605, 608, 611, 614, 617, 620, - 623, 626, 629, 632, 634, 639, 642, 645, - 647, 650, 653, 656, 659, 662, 664, 670, - 672, 674, 681, 683, 713, 714, 744, 775, - 780, 783, 786, 789, 792, 794, 797, 802, - 805, 808, 811, 814, 817, 846, 877, 908, - 939, 970, 973, 976, 979, 982, 1011, 1016, - 1019, 1022, 1025, 1027, 1030, 1033, 1036, 1039, - 1042, 1045, 1048, 1077, 1106, 1109, 1112, 1115, - 1118, 1121, 1150, 1153, 1156, 1187, 1190, 1193, - 1196, 1225, 1228, 1231, 1260, 1263, 1266, 1269, - 1298, 1329, 1360, 1363, 1394, 1397, 1400, 1403, - 1406, 1435, 1448, 1451, 1454, 1457, 1460, 1463, - 1466, 1495, 1526, 1529, 1532, 1535, 1564, 1567, - 1570, 1573, 1602, 1605, 1634, 1637, 1640, 1669, - 1672, 1701, 1704, 1707, 1710, 1713, 1716, 1745, - 1748, 1777, 1780, 1783, 1812, 1815, 1818, 1847, - 1850, 1853, 1882, 1885, 1888, 1917, 1920, 1923, - 1926, 1955, 1960, 1963, 1966, 1969, 1998, 2001, - 2004, 2007, 2010, 2039, 2070, 2099, 2130, 2161, - 2192, 2223, 2252, 2281, 2310, 2339, 2370, 2399, - 2428, 2457, 2488, 2519, 2550, 2579, 2608, 2639, - 2668, 2697, 2726, 2755, 2784, 2813, 2842, 2871, - 2900, 2929, 2958, 2987, 3016, 3045, 3110, 3117, - 3123, 3133, 3136, 3139, 3149, 3160, 3165, 3170, - 3175, 3180, 3189, 3200, 3205, 3210, 3215, 3220, - 3225, 3234, 3239, 3244, 3249, 3254, 3259, 3268, - 3277, 3282, 3287, 3296, 3307, 3316, 3327, 3336, - 3345, 3354, 3358, 3362, 3385, 3396, 3400, 3409, - 3420, 3443, 3470, 3485, 3500, 3515, 3530, 3553, - 3580, 3595, 3610, 3625, 3640, 3655, 3678, 3693, - 3708, 3723, 3738, 3753, 3776, 3799, 3814, 3829, - 3852, 3877, 3885, 3893, 3901, 3909, 3930, 3955, - 3963, 3971, 3979, 3987, 3995, 4011, 4019, 4027, - 4035, 4043, 4051, 4072, 4093, 4101, 4109, 4130, - 4185, 4194, 4203, 4238, 4247, 4256, 4265, 4300, - 4311, 4320, 4329, 4338, 4347, 4382, 4391, 4400, - 4409, 4418, 4427, 4436, 4471, 4480, 4489, 4498, - 4533, 4542, 4551, 4560, 4569, 4578, 4613, 4624, - 4633, 4644, 4679, 4688, 4697, 4706, 4715, 4723, - 4734, 4743, 4778, 4787, 4796, 4805, 4840, 4853, - 4866, 4875, 4884, 4893, 4902, 4911, 4946, 4955, - 4964, 4973, 4982, 5017, 5030, 5039, 5074, 5083, - 5118, 5127, 5138, 5173, 5182, 5191, 5200, 5209, - 5244, 5253, 5262, 5297, 5306, 5341, 5378, 5387, - 5396, 5405, 5440, 5449, 5458, 5467, 5475, 5488, - 5497, 5532, 5541, 5550, 5559, 5594, 5603, 5612, - 5621, 5630, 5665, 5674, 5683, 5692, 5727, 5762, - 5771, 5779, 5814, 5849, 5860, 5869, 5878, 5913, - 5921, 5930, 5939, 5948, 5957, 5966, 6001, 6066, - 6100, 6134, 6168, 6202, 6236, 6270, 6304, 6338, - 6372, 6406, 6440, 6474, 6508, 6542, 6576, 6610, - 6644, 6680, 6714, 6748, 6782, 6816, 6850, 6884, - 6918, 6952, 6986, 7020, 7028, 7036, 7044, 7052, - 7060, 7072, 7080, 7088, 7096, 7104, 7116, 7124, - 7132, 7138, 7146, 7154, 7162, 7170, 7178, 7186, - 7194, 7202, 7210, 7218, 7226, 7234, 7242, 7250, - 7258, 7266, 7274, 7282, 7290, 7302, 7310, 7322, - 7330, 7336, 7344, 7352, 7360, 7368, 7374, 7386, - 7394, 7402, 7410, 7418, 7426, 7434, 7442, 7458, - 7474, 7482, 7490, 7498, 7506, 7514, 7522, 7558, - 7566, 7574, 7582, 7590, 7598, 7606, 7612, 7628, - 7636, 7644, 7652, 7660, 7668, 7676, 7684, 7692, - 7700, 7708, 7716, 7724, 7740, 7748, 7760, 7768, - 7776, 7784, 7792, 7800, 7808, 7816, 7824, 7832, - 7836 + 550, 553, 556, 559, 562, 565, 568, 571, + 574, 577, 580, 583, 586, 589, 592, 595, + 598, 600, 607, 610, 613, 616, 619, 622, + 625, 628, 631, 634, 637, 640, 643, 645, + 650, 653, 656, 658, 661, 664, 667, 670, + 673, 675, 681, 683, 685, 692, 694, 724, + 725, 755, 786, 791, 794, 797, 800, 803, + 805, 808, 813, 816, 819, 822, 825, 828, + 857, 888, 919, 950, 981, 984, 987, 990, + 993, 1022, 1027, 1030, 1033, 1036, 1038, 1041, + 1044, 1047, 1050, 1053, 1056, 1059, 1088, 1117, + 1120, 1123, 1126, 1129, 1132, 1161, 1164, 1167, + 1198, 1201, 1204, 1207, 1236, 1239, 1242, 1271, + 1274, 1277, 1280, 1309, 1340, 1371, 1374, 1405, + 1408, 1411, 1414, 1417, 1446, 1459, 1462, 1465, + 1468, 1471, 1474, 1477, 1506, 1537, 1540, 1543, + 1546, 1575, 1578, 1581, 1584, 1613, 1616, 1645, + 1648, 1651, 1680, 1683, 1712, 1715, 1718, 1721, + 1724, 1727, 1756, 1759, 1788, 1791, 1794, 1823, + 1826, 1829, 1858, 1861, 1864, 1893, 1896, 1899, + 1928, 1931, 1934, 1937, 1966, 1971, 1974, 1977, + 1980, 2009, 2012, 2015, 2018, 2021, 2050, 2081, + 2110, 2141, 2172, 2203, 2234, 2263, 2292, 2321, + 2350, 2381, 2410, 2439, 2468, 2499, 2530, 2561, + 2590, 2619, 2650, 2679, 2708, 2737, 2766, 2795, + 2824, 2853, 2882, 2911, 2940, 2969, 2998, 3027, + 3056, 3121, 3128, 3134, 3144, 3147, 3150, 3160, + 3171, 3176, 3181, 3186, 3191, 3200, 3211, 3216, + 3221, 3226, 3231, 3236, 3245, 3250, 3255, 3260, + 3265, 3270, 3279, 3288, 3293, 3298, 3307, 3318, + 3327, 3338, 3347, 3356, 3365, 3369, 3373, 3396, + 3407, 3411, 3420, 3431, 3454, 3481, 3496, 3511, + 3526, 3541, 3564, 3591, 3606, 3621, 3636, 3651, + 3666, 3689, 3704, 3719, 3734, 3749, 3764, 3787, + 3810, 3825, 3840, 3863, 3888, 3896, 3904, 3912, + 3920, 3941, 3966, 3974, 3982, 3990, 3998, 4006, + 4022, 4030, 4038, 4046, 4054, 4062, 4083, 4104, + 4112, 4120, 4141, 4196, 4205, 4214, 4249, 4258, + 4267, 4276, 4311, 4322, 4331, 4340, 4349, 4358, + 4393, 4402, 4411, 4420, 4429, 4438, 4447, 4482, + 4491, 4500, 4509, 4544, 4553, 4562, 4571, 4580, + 4589, 4624, 4635, 4644, 4655, 4690, 4699, 4708, + 4717, 4726, 4734, 4745, 4754, 4789, 4798, 4807, + 4816, 4851, 4864, 4877, 4886, 4895, 4904, 4913, + 4922, 4957, 4966, 4975, 4984, 4993, 5028, 5041, + 5050, 5085, 5094, 5129, 5138, 5151, 5186, 5195, + 5204, 5213, 5222, 5257, 5266, 5275, 5284, 5319, + 5328, 5337, 5372, 5381, 5416, 5453, 5462, 5471, + 5480, 5515, 5524, 5533, 5542, 5550, 5563, 5572, + 5607, 5616, 5625, 5634, 5669, 5678, 5687, 5696, + 5705, 5740, 5749, 5758, 5767, 5802, 5837, 5846, + 5854, 5889, 5924, 5935, 5944, 5953, 5988, 5996, + 6005, 6014, 6023, 6032, 6041, 6076, 6141, 6175, + 6209, 6243, 6277, 6311, 6345, 6379, 6413, 6447, + 6481, 6515, 6549, 6583, 6617, 6651, 6685, 6719, + 6753, 6789, 6823, 6857, 6891, 6925, 6959, 6993, + 7027, 7061, 7095, 7129, 7137, 7145, 7153, 7161, + 7169, 7181, 7189, 7197, 7205, 7213, 7225, 7233, + 7241, 7247, 7255, 7263, 7271, 7279, 7287, 7295, + 7303, 7311, 7319, 7327, 7335, 7343, 7351, 7359, + 7367, 7375, 7383, 7391, 7399, 7411, 7419, 7431, + 7439, 7445, 7453, 7461, 7469, 7477, 7483, 7495, + 7503, 7511, 7519, 7527, 7535, 7543, 7551, 7567, + 7583, 7591, 7599, 7607, 7615, 7623, 7631, 7667, + 7675, 7683, 7691, 7699, 7707, 7715, 7721, 7737, + 7745, 7753, 7761, 7769, 7777, 7785, 7793, 7801, + 7809, 7817, 7825, 7833, 7849, 7857, 7873, 7881, + 7889, 7897, 7905, 7913, 7921, 7929, 7937, 7945, + 7953, 7961, 7969, 7973 }; static const short _demo_machine_parser_cmd_indicies[] = { @@ -2026,1543 +2057,1572 @@ static const short _demo_machine_parser_cmd_indicies[] = { 106, 179, 179, 106, 180, 180, 106, 181, 182, 183, 181, 182, 183, 106, 184, 184, 106, 185, 185, 106, 142, 142, 106, 186, - 187, 186, 187, 106, 188, 188, 106, 189, - 189, 106, 190, 190, 106, 191, 191, 106, - 192, 192, 106, 193, 193, 106, 194, 194, - 106, 195, 195, 106, 196, 196, 106, 197, - 197, 106, 198, 198, 106, 199, 199, 106, - 200, 200, 106, 201, 106, 202, 203, 204, - 202, 203, 204, 106, 205, 205, 106, 206, - 206, 106, 207, 207, 106, 208, 208, 106, - 209, 209, 106, 210, 210, 106, 211, 211, - 106, 212, 212, 106, 213, 213, 106, 214, - 214, 106, 215, 215, 106, 216, 216, 106, - 217, 106, 218, 219, 218, 219, 106, 220, - 220, 106, 221, 221, 106, 222, 106, 223, + 187, 188, 186, 187, 188, 106, 189, 189, + 106, 190, 190, 106, 191, 191, 106, 192, + 192, 106, 193, 193, 106, 194, 194, 106, + 195, 195, 106, 196, 196, 106, 197, 197, + 106, 198, 198, 106, 199, 199, 106, 200, + 200, 106, 201, 201, 106, 202, 202, 106, + 203, 203, 106, 204, 204, 106, 205, 106, + 206, 207, 208, 206, 207, 208, 106, 209, + 209, 106, 210, 210, 106, 211, 211, 106, + 212, 212, 106, 213, 213, 106, 214, 214, + 106, 215, 215, 106, 216, 216, 106, 217, + 217, 106, 218, 218, 106, 219, 219, 106, + 220, 220, 106, 221, 106, 222, 223, 222, 223, 106, 224, 224, 106, 225, 225, 106, - 226, 226, 106, 227, 227, 106, 228, 1, - 230, 231, 232, 233, 234, 229, 236, 235, - 238, 237, 240, 240, 240, 241, 240, 241, - 239, 243, 242, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, - 245, 262, 246, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, - 276, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 245, - 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 278, - 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 262, 293, - 294, 293, 294, 262, 295, 295, 262, 296, - 296, 262, 297, 297, 262, 298, 298, 262, - 299, 262, 300, 300, 262, 301, 302, 301, - 302, 262, 303, 303, 262, 304, 304, 262, - 305, 305, 262, 306, 306, 262, 307, 307, - 262, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 309, - 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 262, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 262, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 340, 341, 342, 343, + 226, 106, 227, 227, 106, 228, 228, 106, + 229, 229, 106, 230, 230, 106, 231, 231, + 106, 232, 1, 234, 235, 236, 237, 238, + 233, 240, 239, 242, 241, 244, 244, 244, + 245, 244, 245, 243, 247, 246, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 249, 266, 250, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 249, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, + 296, 266, 297, 298, 297, 298, 266, 299, + 299, 266, 300, 300, 266, 301, 301, 266, + 302, 302, 266, 303, 266, 304, 304, 266, + 305, 306, 305, 306, 266, 307, 307, 266, + 308, 308, 266, 309, 309, 266, 310, 310, + 266, 311, 311, 266, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, + 266, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, + 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 266, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 262, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 356, 357, 358, 359, 360, + 352, 353, 354, 355, 356, 357, 358, 344, + 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 266, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 262, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 372, 373, 374, 375, 376, 377, + 369, 370, 371, 372, 373, 374, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 266, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, 262, 387, 387, 262, 388, 388, 262, - 389, 389, 262, 385, 385, 262, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 262, 405, 406, 405, 406, 262, - 407, 407, 262, 408, 408, 262, 409, 409, - 262, 410, 262, 411, 411, 262, 412, 412, - 262, 413, 413, 262, 414, 414, 262, 415, - 415, 262, 416, 416, 262, 406, 406, 262, - 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 262, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, - 446, 262, 447, 447, 262, 448, 448, 262, - 449, 449, 262, 450, 450, 262, 451, 451, - 262, 433, 434, 435, 452, 437, 438, 439, - 440, 441, 442, 443, 444, 445, 446, 433, - 434, 435, 452, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 262, 453, 453, - 262, 454, 454, 262, 456, 457, 458, 459, - 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 456, 457, 458, 459, 460, + 386, 387, 388, 389, 390, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 266, 391, 391, 266, + 392, 392, 266, 393, 393, 266, 389, 389, + 266, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 395, + 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 266, 409, 410, + 409, 410, 266, 411, 411, 266, 412, 412, + 266, 413, 413, 266, 414, 266, 415, 415, + 266, 416, 416, 266, 417, 417, 266, 418, + 418, 266, 419, 419, 266, 420, 420, 266, + 410, 410, 266, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, + 435, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 266, + 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 266, 451, 451, 266, + 452, 452, 266, 453, 453, 266, 454, 454, + 266, 455, 455, 266, 437, 438, 439, 456, + 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 437, 438, 439, 456, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, + 266, 457, 457, 266, 458, 458, 266, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 262, 471, 471, 262, 472, 472, - 262, 473, 473, 262, 456, 457, 458, 459, - 460, 461, 463, 464, 465, 466, 467, 468, - 469, 470, 456, 457, 458, 459, 460, 461, - 463, 464, 465, 466, 467, 468, 469, 470, - 262, 474, 474, 262, 475, 475, 262, 477, - 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 477, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 262, 491, 491, 262, 492, - 492, 262, 493, 493, 262, 477, 478, 479, - 480, 481, 482, 494, 484, 485, 486, 487, - 488, 489, 490, 477, 478, 479, 480, 481, - 482, 494, 484, 485, 486, 487, 488, 489, - 490, 262, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 354, - 353, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 354, 353, - 262, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, - 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 262, - 511, 511, 262, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 523, 524, 525, - 526, 527, 513, 514, 515, 516, 517, 518, + 469, 470, 471, 472, 473, 474, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 266, 475, 475, + 266, 476, 476, 266, 477, 477, 266, 460, + 461, 462, 463, 464, 465, 467, 468, 469, + 470, 471, 472, 473, 474, 460, 461, 462, + 463, 464, 465, 467, 468, 469, 470, 471, + 472, 473, 474, 266, 478, 478, 266, 479, + 479, 266, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, + 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 266, 495, + 495, 266, 496, 496, 266, 497, 497, 266, + 481, 482, 483, 484, 485, 486, 498, 488, + 489, 490, 491, 492, 493, 494, 481, 482, + 483, 484, 485, 486, 498, 488, 489, 490, + 491, 492, 493, 494, 266, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 358, 357, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, + 356, 358, 357, 266, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 266, 515, 515, 266, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, - 527, 262, 528, 528, 262, 529, 529, 262, - 530, 530, 262, 531, 531, 262, 513, 514, - 515, 516, 517, 518, 520, 521, 522, 523, - 524, 525, 526, 527, 513, 514, 515, 516, - 517, 518, 520, 521, 522, 523, 524, 525, - 526, 527, 262, 532, 533, 534, 535, 536, - 537, 532, 533, 534, 535, 536, 537, 262, - 538, 538, 262, 539, 539, 262, 540, 540, - 262, 541, 541, 262, 542, 542, 262, 535, - 535, 262, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 554, 555, 556, 557, - 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 554, 555, 556, 557, 262, 559, - 560, 561, 562, 563, 564, 565, 566, 567, - 568, 569, 570, 571, 572, 573, 559, 560, - 561, 562, 563, 564, 565, 566, 567, 568, - 569, 570, 571, 572, 573, 262, 574, 574, - 262, 575, 575, 262, 576, 576, 262, 559, - 560, 561, 562, 563, 564, 566, 567, 568, - 569, 570, 571, 572, 573, 559, 560, 561, - 562, 563, 564, 566, 567, 568, 569, 570, - 571, 572, 573, 262, 577, 577, 262, 578, - 578, 262, 579, 579, 262, 581, 582, 583, - 584, 585, 586, 587, 588, 589, 590, 591, - 592, 593, 594, 581, 582, 583, 584, 585, - 586, 587, 588, 589, 590, 591, 592, 593, - 594, 262, 595, 595, 262, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 610, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, - 610, 262, 611, 611, 262, 612, 612, 262, - 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, - 624, 625, 626, 627, 262, 628, 628, 262, - 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 642, 643, 630, 631, - 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 642, 643, 262, 644, 644, 262, - 645, 645, 262, 646, 646, 262, 647, 647, - 262, 648, 648, 262, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, - 649, 643, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 649, 643, - 262, 650, 650, 262, 496, 497, 498, 651, - 500, 501, 502, 503, 504, 505, 506, 507, - 508, 510, 496, 497, 498, 651, 500, 501, - 502, 503, 504, 505, 506, 507, 508, 510, - 262, 652, 652, 262, 653, 653, 262, 340, - 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 262, 654, 654, 262, 655, - 655, 262, 656, 373, 374, 657, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 386, - 656, 373, 374, 657, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 386, 262, 658, - 658, 262, 659, 659, 262, 356, 357, 358, - 359, 360, 361, 363, 364, 365, 366, 367, - 368, 369, 370, 356, 357, 358, 359, 360, - 361, 363, 364, 365, 366, 367, 368, 369, - 370, 262, 660, 660, 262, 661, 661, 262, - 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 338, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 338, 262, 662, 662, 262, - 663, 663, 262, 664, 664, 262, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 262, 307, 664, 307, 664, 262, - 680, 680, 262, 681, 681, 262, 682, 682, - 262, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 683, 278, - 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 683, 262, 684, 684, - 262, 685, 685, 262, 686, 686, 262, 292, - 292, 262, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, - 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 262, 703, - 704, 705, 706, 707, 708, 709, 710, 711, - 712, 713, 714, 715, 716, 104, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 712, - 713, 714, 715, 716, 104, 702, 718, 719, - 720, 721, 722, 723, 724, 725, 726, 727, - 728, 729, 730, 731, 718, 719, 720, 721, - 722, 723, 724, 725, 726, 727, 728, 729, - 730, 731, 717, 733, 734, 735, 736, 737, - 738, 739, 740, 741, 742, 743, 744, 745, - 746, 747, 733, 734, 735, 736, 737, 738, + 527, 528, 529, 530, 531, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 266, 532, 532, 266, + 533, 533, 266, 534, 534, 266, 535, 535, + 266, 517, 518, 519, 520, 521, 522, 524, + 525, 526, 527, 528, 529, 530, 531, 517, + 518, 519, 520, 521, 522, 524, 525, 526, + 527, 528, 529, 530, 531, 266, 536, 537, + 538, 539, 540, 541, 536, 537, 538, 539, + 540, 541, 266, 542, 542, 266, 543, 543, + 266, 544, 544, 266, 545, 545, 266, 546, + 546, 266, 539, 539, 266, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, + 561, 266, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, + 577, 563, 564, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, + 266, 578, 578, 266, 579, 579, 266, 580, + 580, 266, 563, 564, 565, 566, 567, 568, + 570, 571, 572, 573, 574, 575, 576, 577, + 563, 564, 565, 566, 567, 568, 570, 571, + 572, 573, 574, 575, 576, 577, 266, 581, + 581, 266, 582, 582, 266, 583, 583, 266, + 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 585, 586, + 587, 588, 589, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 266, 599, 599, 266, + 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 266, 615, 615, 266, + 616, 616, 266, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, + 631, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 266, + 632, 632, 266, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, + 647, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 266, + 648, 648, 266, 649, 649, 266, 650, 650, + 266, 651, 651, 266, 652, 652, 266, 634, + 635, 636, 637, 638, 639, 640, 641, 642, + 643, 644, 645, 653, 647, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, + 645, 653, 647, 266, 654, 654, 266, 500, + 501, 502, 655, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 514, 500, 501, 502, + 655, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 514, 266, 656, 656, 266, 657, + 657, 266, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, + 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 266, 658, + 658, 266, 659, 659, 266, 660, 377, 378, + 661, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 390, 660, 377, 378, 661, 380, + 381, 382, 383, 384, 385, 386, 387, 388, + 390, 266, 662, 662, 266, 663, 663, 266, + 360, 361, 362, 363, 364, 365, 367, 368, + 369, 370, 371, 372, 373, 374, 360, 361, + 362, 363, 364, 365, 367, 368, 369, 370, + 371, 372, 373, 374, 266, 664, 664, 266, + 665, 665, 266, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, + 342, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 342, 266, + 666, 666, 266, 667, 667, 266, 668, 668, + 266, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 670, + 671, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 266, 311, 668, + 311, 668, 266, 684, 684, 266, 685, 685, + 266, 686, 686, 266, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, + 294, 687, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 687, + 266, 688, 688, 266, 689, 689, 266, 690, + 690, 266, 296, 296, 266, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 704, + 705, 266, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, + 104, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 104, + 706, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 722, + 723, 724, 725, 726, 727, 728, 729, 730, + 731, 732, 733, 734, 735, 721, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, - 747, 732, 749, 750, 751, 752, 753, 754, - 755, 756, 757, 758, 759, 760, 761, 762, - 763, 749, 750, 751, 752, 753, 754, 755, + 747, 748, 749, 750, 751, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 736, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, - 748, 765, 766, 767, 768, 769, 770, 771, - 772, 773, 774, 775, 776, 777, 778, 779, - 765, 766, 767, 768, 769, 770, 771, 772, - 773, 774, 775, 776, 777, 778, 779, 764, - 781, 782, 783, 784, 785, 786, 787, 788, - 789, 790, 791, 792, 793, 27, 794, 781, - 782, 783, 784, 785, 786, 787, 788, 789, - 790, 791, 792, 793, 27, 794, 780, 796, - 797, 798, 799, 800, 801, 802, 803, 804, - 805, 806, 807, 808, 809, 796, 797, 798, - 799, 800, 801, 802, 803, 804, 805, 806, - 807, 808, 809, 795, 811, 812, 813, 814, - 815, 816, 817, 818, 819, 820, 821, 822, - 823, 824, 811, 812, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 823, 824, - 810, 826, 827, 828, 829, 830, 831, 832, - 833, 834, 835, 836, 837, 838, 839, 826, - 827, 828, 829, 830, 831, 832, 833, 834, - 835, 836, 837, 838, 839, 825, 826, 827, - 828, 840, 830, 831, 832, 833, 834, 835, - 836, 837, 838, 839, 826, 827, 828, 840, - 830, 831, 832, 833, 834, 835, 836, 837, - 838, 839, 825, 842, 843, 844, 845, 846, - 847, 848, 849, 850, 851, 852, 853, 854, - 855, 856, 842, 843, 844, 845, 846, 847, + 764, 765, 766, 767, 753, 754, 755, 756, + 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 752, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 768, 785, 786, 787, 788, 789, + 790, 791, 792, 793, 794, 795, 796, 797, + 27, 798, 785, 786, 787, 788, 789, 790, + 791, 792, 793, 794, 795, 796, 797, 27, + 798, 784, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, + 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 799, 815, + 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 814, 830, 831, 832, 833, + 834, 835, 836, 837, 838, 839, 840, 841, + 842, 843, 830, 831, 832, 833, 834, 835, + 836, 837, 838, 839, 840, 841, 842, 843, + 829, 830, 831, 832, 844, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 830, + 831, 832, 844, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 829, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, - 856, 841, 842, 843, 844, 845, 846, 847, + 856, 857, 858, 859, 860, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, - 842, 843, 844, 845, 846, 847, 849, 850, - 851, 852, 853, 854, 855, 856, 841, 858, - 859, 860, 861, 862, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 858, 859, 860, - 861, 862, 863, 864, 865, 866, 867, 868, - 869, 870, 871, 857, 858, 859, 860, 861, - 862, 863, 872, 865, 866, 867, 868, 869, - 870, 871, 858, 859, 860, 861, 862, 863, - 872, 865, 866, 867, 868, 869, 870, 871, - 857, 749, 750, 751, 752, 753, 754, 755, - 756, 757, 758, 759, 760, 761, 763, 762, - 749, 750, 751, 752, 753, 754, 755, 756, - 757, 758, 759, 760, 761, 763, 762, 748, - 874, 875, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 874, - 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 885, 886, 887, 888, 873, 890, - 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 904, 890, 891, - 892, 893, 894, 895, 896, 897, 898, 899, - 900, 901, 902, 903, 904, 889, 890, 891, - 892, 893, 894, 895, 897, 898, 899, 900, - 901, 902, 903, 904, 890, 891, 892, 893, - 894, 895, 897, 898, 899, 900, 901, 902, - 903, 904, 889, 906, 907, 908, 909, 910, - 911, 912, 913, 914, 915, 916, 917, 918, - 919, 906, 907, 908, 909, 910, 911, 912, - 913, 914, 915, 916, 917, 918, 919, 905, - 921, 922, 923, 924, 925, 926, 927, 928, - 929, 930, 931, 932, 933, 934, 935, 921, - 922, 923, 924, 925, 926, 927, 928, 929, - 930, 931, 932, 933, 934, 935, 920, 921, - 922, 923, 924, 925, 926, 928, 929, 930, - 931, 932, 933, 934, 935, 921, 922, 923, - 924, 925, 926, 928, 929, 930, 931, 932, - 933, 934, 935, 920, 937, 938, 939, 940, - 941, 942, 943, 944, 945, 946, 947, 948, - 949, 950, 937, 938, 939, 940, 941, 942, - 943, 944, 945, 946, 947, 948, 949, 950, - 936, 952, 953, 954, 955, 956, 957, 958, - 959, 960, 961, 962, 963, 964, 965, 952, - 953, 954, 955, 956, 957, 958, 959, 960, - 961, 962, 963, 964, 965, 951, 967, 968, - 969, 970, 971, 972, 973, 974, 975, 976, - 977, 978, 979, 980, 967, 968, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, - 979, 980, 966, 982, 983, 984, 985, 986, - 987, 988, 989, 990, 991, 992, 993, 994, - 995, 982, 983, 984, 985, 986, 987, 988, - 989, 990, 991, 992, 993, 994, 995, 981, - 982, 983, 984, 985, 986, 987, 988, 989, - 990, 991, 992, 993, 996, 995, 982, 983, - 984, 985, 986, 987, 988, 989, 990, 991, - 992, 993, 996, 995, 981, 874, 875, 876, - 997, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 888, 874, 875, 876, 997, 878, - 879, 880, 881, 882, 883, 884, 885, 886, - 888, 873, 749, 750, 751, 752, 753, 754, - 755, 756, 757, 758, 759, 760, 761, 762, - 749, 750, 751, 752, 753, 754, 755, 756, - 757, 758, 759, 760, 761, 762, 748, 998, - 782, 783, 999, 785, 786, 787, 788, 789, - 790, 791, 792, 793, 794, 998, 782, 783, - 999, 785, 786, 787, 788, 789, 790, 791, - 792, 793, 794, 780, 765, 766, 767, 768, - 769, 770, 772, 773, 774, 775, 776, 777, - 778, 779, 765, 766, 767, 768, 769, 770, - 772, 773, 774, 775, 776, 777, 778, 779, - 764, 733, 734, 735, 736, 737, 738, 739, - 740, 741, 742, 743, 744, 745, 747, 733, - 734, 735, 736, 737, 738, 739, 740, 741, - 742, 743, 744, 745, 747, 732, 1001, 1002, - 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1001, 1002, 1003, 1004, - 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, - 1013, 1014, 1000, 703, 704, 705, 706, 707, - 708, 709, 710, 711, 712, 713, 714, 715, - 1015, 703, 704, 705, 706, 707, 708, 709, - 710, 711, 712, 713, 714, 715, 1015, 702, - 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, - 1025, 1026, 1027, 1028, 1029, 1030, 1017, 1018, - 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, - 1027, 1028, 1029, 1030, 1016, 1033, 1034, 1035, - 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, - 1044, 1045, 1046, 1047, 1048, 1049, 1036, 1037, - 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, - 1046, 1047, 1048, 1049, 1033, 1051, 1052, 1036, + 857, 858, 859, 860, 845, 846, 847, 848, + 849, 850, 851, 853, 854, 855, 856, 857, + 858, 859, 860, 846, 847, 848, 849, 850, + 851, 853, 854, 855, 856, 857, 858, 859, + 860, 845, 862, 863, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, + 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 861, 862, + 863, 864, 865, 866, 867, 876, 869, 870, + 871, 872, 873, 874, 875, 862, 863, 864, + 865, 866, 867, 876, 869, 870, 871, 872, + 873, 874, 875, 861, 753, 754, 755, 756, + 757, 758, 759, 760, 761, 762, 763, 764, + 765, 767, 766, 753, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 763, 764, 765, + 767, 766, 752, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, + 892, 877, 894, 895, 896, 897, 898, 899, + 900, 901, 902, 903, 904, 905, 906, 907, + 908, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 905, 906, 907, 908, + 893, 894, 895, 896, 897, 898, 899, 901, + 902, 903, 904, 905, 906, 907, 908, 894, + 895, 896, 897, 898, 899, 901, 902, 903, + 904, 905, 906, 907, 908, 893, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 919, + 920, 921, 922, 923, 910, 911, 912, 913, + 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 909, 925, 926, 927, 928, 929, + 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 925, 926, 927, 928, 929, 930, + 931, 932, 933, 934, 935, 936, 937, 938, + 939, 924, 925, 926, 927, 928, 929, 930, + 932, 933, 934, 935, 936, 937, 938, 939, + 925, 926, 927, 928, 929, 930, 932, 933, + 934, 935, 936, 937, 938, 939, 924, 941, + 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 941, 942, 943, + 944, 945, 946, 947, 948, 949, 950, 951, + 952, 953, 954, 940, 956, 957, 958, 959, + 960, 961, 962, 963, 964, 965, 966, 967, + 968, 969, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, + 955, 971, 972, 973, 974, 975, 976, 977, + 978, 979, 980, 981, 982, 983, 984, 971, + 972, 973, 974, 975, 976, 977, 978, 979, + 980, 981, 982, 983, 984, 970, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, + 996, 997, 998, 999, 986, 987, 988, 989, + 990, 991, 992, 993, 994, 995, 996, 997, + 998, 999, 985, 986, 987, 988, 989, 990, + 991, 992, 993, 994, 995, 996, 997, 1000, + 999, 986, 987, 988, 989, 990, 991, 992, + 993, 994, 995, 996, 997, 1000, 999, 985, + 878, 879, 880, 1001, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 892, 878, 879, + 880, 1001, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 892, 877, 753, 754, 755, + 756, 757, 758, 759, 760, 761, 762, 763, + 764, 765, 766, 753, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 763, 764, 765, + 766, 752, 1002, 786, 787, 1003, 789, 790, + 791, 792, 793, 794, 795, 796, 797, 798, + 1002, 786, 787, 1003, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 784, 769, + 770, 771, 772, 773, 774, 776, 777, 778, + 779, 780, 781, 782, 783, 769, 770, 771, + 772, 773, 774, 776, 777, 778, 779, 780, + 781, 782, 783, 768, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, + 749, 751, 737, 738, 739, 740, 741, 742, + 743, 744, 745, 746, 747, 748, 749, 751, + 736, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1005, + 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, + 1014, 1015, 1016, 1017, 1018, 1004, 707, 708, + 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 1019, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, + 719, 1019, 706, 1021, 1022, 1023, 1024, 1025, + 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, + 1034, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1020, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, - 1045, 1046, 1047, 1048, 1049, 1036, 1037, 1038, - 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, - 1047, 1048, 1049, 1032, 1050, 1031, 1055, 1056, - 1055, 1058, 1054, 1057, 1053, 1060, 1061, 1060, - 1063, 1062, 1059, 1066, 1067, 1068, 1069, 1070, - 1068, 1069, 1070, 1066, 1065, 1073, 1073, 1072, - 1075, 1075, 1074, 1066, 1067, 1076, 1077, 1078, - 1076, 1077, 1078, 1066, 1065, 1080, 1081, 1082, - 1083, 1084, 1081, 1082, 1083, 1084, 1080, 1072, - 1073, 1085, 1085, 1073, 1072, 1073, 1086, 1086, - 1073, 1072, 1073, 1087, 1087, 1073, 1072, 1073, - 1088, 1088, 1073, 1072, 1080, 1081, 1083, 1084, - 1081, 1083, 1084, 1080, 1072, 1080, 1081, 1089, - 1083, 1084, 1081, 1089, 1083, 1084, 1080, 1072, - 1073, 1090, 1090, 1073, 1072, 1073, 1091, 1091, - 1073, 1072, 1073, 1092, 1092, 1073, 1072, 1073, - 1093, 1093, 1073, 1072, 1073, 1088, 1088, 1073, - 1072, 1073, 1094, 1095, 1096, 1094, 1095, 1096, - 1073, 1072, 1073, 1097, 1097, 1073, 1072, 1073, - 1098, 1098, 1073, 1072, 1073, 1099, 1099, 1073, - 1072, 1073, 1100, 1100, 1073, 1072, 1073, 1095, - 1095, 1073, 1072, 1102, 1103, 1104, 1105, 1103, - 1104, 1105, 1102, 1072, 1107, 1108, 1109, 1110, - 1108, 1109, 1110, 1107, 1072, 1073, 1111, 1111, - 1073, 1072, 1073, 1112, 1112, 1073, 1072, 1107, - 1113, 1109, 1110, 1113, 1109, 1110, 1107, 1072, - 1115, 1116, 1117, 1118, 1119, 1116, 1117, 1118, - 1119, 1115, 1114, 1115, 1116, 1118, 1119, 1116, - 1118, 1119, 1115, 1114, 1115, 1116, 1120, 1118, - 1119, 1116, 1120, 1118, 1119, 1115, 1114, 1122, - 1123, 1124, 1125, 1123, 1124, 1125, 1122, 1121, - 1127, 1128, 1129, 1130, 1128, 1129, 1130, 1127, - 1126, 1127, 1131, 1129, 1130, 1131, 1129, 1130, - 1127, 1126, 1133, 1135, 1134, 1132, 1136, 1137, - 1134, 1132, 1066, 1139, 1068, 1069, 1070, 1068, - 1069, 1070, 1141, 1142, 1143, 1144, 1145, 1143, - 1144, 1145, 1065, 1066, 1065, 1140, 1141, 1140, - 1138, 1073, 1147, 1149, 1150, 1072, 1073, 1072, - 1148, 1149, 1148, 1146, 1073, 1151, 1073, 1072, - 1075, 1133, 1152, 1135, 1075, 1134, 1152, 1134, - 1132, 1073, 1153, 1149, 1154, 1072, 1073, 1072, - 1148, 1149, 1148, 1146, 1066, 1139, 1076, 1077, - 1078, 1076, 1077, 1078, 1141, 1142, 1155, 1156, - 1157, 1155, 1156, 1157, 1065, 1066, 1065, 1140, - 1141, 1140, 1138, 1080, 1147, 1081, 1082, 1083, - 1084, 1081, 1082, 1083, 1084, 1159, 1150, 1160, - 1161, 1162, 1163, 1160, 1161, 1162, 1163, 1072, - 1080, 1072, 1148, 1159, 1148, 1158, 1073, 1147, - 1085, 1085, 1149, 1150, 1164, 1164, 1072, 1073, - 1072, 1148, 1149, 1148, 1146, 1073, 1147, 1086, - 1086, 1149, 1150, 1165, 1165, 1072, 1073, 1072, - 1148, 1149, 1148, 1146, 1073, 1147, 1087, 1087, - 1149, 1150, 1166, 1166, 1072, 1073, 1072, 1148, - 1149, 1148, 1146, 1073, 1147, 1088, 1088, 1149, - 1150, 1167, 1167, 1072, 1073, 1072, 1148, 1149, - 1148, 1146, 1080, 1147, 1081, 1083, 1084, 1081, - 1083, 1084, 1159, 1150, 1160, 1162, 1163, 1160, - 1162, 1163, 1072, 1080, 1072, 1148, 1159, 1148, - 1158, 1080, 1147, 1081, 1089, 1083, 1084, 1081, - 1089, 1083, 1084, 1159, 1150, 1160, 1168, 1162, - 1163, 1160, 1168, 1162, 1163, 1072, 1080, 1072, - 1148, 1159, 1148, 1158, 1073, 1147, 1090, 1090, - 1149, 1150, 1169, 1169, 1072, 1073, 1072, 1148, - 1149, 1148, 1146, 1073, 1147, 1091, 1091, 1149, - 1150, 1170, 1170, 1072, 1073, 1072, 1148, 1149, - 1148, 1146, 1073, 1147, 1092, 1092, 1149, 1150, - 1171, 1171, 1072, 1073, 1072, 1148, 1149, 1148, - 1146, 1073, 1147, 1093, 1093, 1149, 1150, 1172, - 1172, 1072, 1073, 1072, 1148, 1149, 1148, 1146, - 1073, 1147, 1088, 1088, 1149, 1150, 1167, 1167, - 1072, 1073, 1072, 1148, 1149, 1148, 1146, 1073, - 1147, 1094, 1095, 1096, 1094, 1095, 1096, 1149, - 1150, 1173, 1174, 1175, 1173, 1174, 1175, 1072, - 1073, 1072, 1148, 1149, 1148, 1146, 1073, 1147, - 1097, 1097, 1149, 1150, 1176, 1176, 1072, 1073, - 1072, 1148, 1149, 1148, 1146, 1073, 1147, 1098, - 1098, 1149, 1150, 1177, 1177, 1072, 1073, 1072, - 1148, 1149, 1148, 1146, 1073, 1147, 1099, 1099, - 1149, 1150, 1178, 1178, 1072, 1073, 1072, 1148, - 1149, 1148, 1146, 1073, 1147, 1100, 1100, 1149, - 1150, 1179, 1179, 1072, 1073, 1072, 1148, 1149, - 1148, 1146, 1073, 1147, 1095, 1095, 1149, 1150, - 1174, 1174, 1072, 1073, 1072, 1148, 1149, 1148, - 1146, 1102, 1147, 1103, 1104, 1105, 1103, 1104, - 1105, 1181, 1150, 1182, 1183, 1184, 1182, 1183, - 1184, 1072, 1102, 1072, 1148, 1181, 1148, 1180, - 1107, 1147, 1108, 1109, 1110, 1108, 1109, 1110, - 1186, 1150, 1187, 1188, 1189, 1187, 1188, 1189, - 1072, 1107, 1072, 1148, 1186, 1148, 1185, 1073, - 1147, 1111, 1111, 1149, 1150, 1190, 1190, 1072, - 1073, 1072, 1148, 1149, 1148, 1146, 1073, 1147, - 1112, 1112, 1149, 1150, 1191, 1191, 1072, 1073, - 1072, 1148, 1149, 1148, 1146, 1107, 1147, 1113, - 1109, 1110, 1113, 1109, 1110, 1186, 1150, 1192, - 1188, 1189, 1192, 1188, 1189, 1072, 1107, 1072, - 1148, 1186, 1148, 1185, 1115, 1133, 1116, 1117, - 1118, 1119, 1116, 1117, 1118, 1119, 1194, 1135, - 1195, 1196, 1197, 1198, 1195, 1196, 1197, 1198, - 1115, 1134, 1194, 1134, 1193, 1133, 108, 108, - 1135, 1199, 1199, 1134, 1132, 1133, 109, 109, - 1135, 1200, 1200, 1134, 1132, 1133, 110, 110, - 1135, 1201, 1201, 1134, 1132, 1133, 111, 111, - 1135, 1202, 1202, 1134, 1132, 1115, 1133, 1116, - 1118, 1119, 1116, 1118, 1119, 1194, 1135, 1195, - 1197, 1198, 1195, 1197, 1198, 1115, 1134, 1194, - 1134, 1193, 1115, 1133, 1116, 1120, 1118, 1119, - 1116, 1120, 1118, 1119, 1194, 1135, 1195, 1203, - 1197, 1198, 1195, 1203, 1197, 1198, 1115, 1134, - 1194, 1134, 1193, 1133, 112, 112, 1135, 1204, - 1204, 1134, 1132, 1133, 113, 113, 1135, 1205, - 1205, 1134, 1132, 1133, 114, 114, 1135, 1206, - 1206, 1134, 1132, 1133, 115, 115, 1135, 1207, - 1207, 1134, 1132, 1133, 111, 111, 1135, 1202, - 1202, 1134, 1132, 1133, 116, 117, 118, 116, - 117, 118, 1135, 1208, 1209, 1210, 1208, 1209, - 1210, 1134, 1132, 1133, 119, 119, 1135, 1211, - 1211, 1134, 1132, 1133, 120, 120, 1135, 1212, - 1212, 1134, 1132, 1133, 121, 121, 1135, 1213, - 1213, 1134, 1132, 1133, 122, 122, 1135, 1214, - 1214, 1134, 1132, 1133, 117, 117, 1135, 1209, - 1209, 1134, 1132, 1122, 1133, 1123, 1124, 1125, - 1123, 1124, 1125, 1216, 1135, 1217, 1218, 1219, - 1217, 1218, 1219, 1122, 1134, 1216, 1134, 1215, - 1127, 1133, 1128, 1129, 1130, 1128, 1129, 1130, - 1221, 1135, 1222, 1223, 1224, 1222, 1223, 1224, - 1127, 1134, 1221, 1134, 1220, 1133, 123, 123, - 1135, 1225, 1225, 1134, 1132, 1133, 124, 124, - 1135, 1226, 1226, 1134, 1132, 1127, 1133, 1131, - 1129, 1130, 1131, 1129, 1130, 1221, 1135, 1227, - 1223, 1224, 1227, 1223, 1224, 1127, 1134, 1221, - 1134, 1220, 1033, 1034, 1035, 1228, 1229, 1230, - 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, - 1239, 1240, 1241, 1228, 1229, 1230, 1231, 1232, - 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, - 1241, 1033, 1051, 1052, 1057, 1050, 1057, 1050, - 1057, 1057, 1050, 1057, 1050, 1057, 1032, 1050, - 1057, 1050, 1057, 1050, 1057, 1050, 1057, 1050, - 1031, 1055, 1056, 1242, 1242, 1055, 1058, 1054, - 1057, 1053, 1055, 1056, 1243, 1243, 1055, 1058, - 1054, 1057, 1053, 1245, 1246, 1247, 1248, 1249, - 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, - 1258, 1259, 1260, 1247, 1248, 1249, 1250, 1251, - 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, - 1260, 1245, 1262, 1054, 1261, 1244, 1055, 1056, - 1263, 1263, 1055, 1058, 1054, 1057, 1053, 1055, - 1056, 1264, 1264, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1265, 1265, 1055, 1058, 1054, 1057, - 1053, 1267, 1268, 1269, 1270, 1271, 1272, 1273, - 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, - 1282, 1269, 1270, 1271, 1272, 1273, 1274, 1275, - 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1267, - 1284, 1054, 1283, 1266, 1055, 1056, 1285, 1286, - 1285, 1286, 1055, 1058, 1054, 1057, 1053, 1055, - 1056, 1287, 1287, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1288, 1288, 1055, 1058, 1054, 1057, - 1053, 1055, 1056, 1289, 1289, 1055, 1058, 1054, - 1057, 1053, 1055, 1290, 1291, 1056, 1055, 1058, - 1054, 1057, 1053, 1293, 1294, 1295, 1296, 1297, - 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, - 1306, 1307, 1308, 1295, 1296, 1297, 1298, 1299, - 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, - 1308, 1293, 1310, 1054, 1309, 1292, 1055, 1056, - 1311, 1311, 1055, 1058, 1054, 1057, 1053, 1055, - 1056, 1312, 1312, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1313, 1313, 1055, 1058, 1054, 1057, - 1053, 1055, 1056, 1314, 1314, 1055, 1058, 1054, - 1057, 1053, 1055, 1056, 1315, 1315, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1316, 1316, 1055, - 1058, 1054, 1057, 1053, 1318, 1319, 1320, 1321, - 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, - 1330, 1331, 1332, 1333, 1320, 1321, 1322, 1323, - 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, - 1332, 1333, 1318, 1335, 1054, 1334, 1317, 1055, - 1056, 1336, 1336, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1337, 1337, 1055, 1058, 1054, 1057, - 1053, 1055, 1056, 1338, 1338, 1055, 1058, 1054, - 1057, 1053, 1340, 1341, 1342, 1343, 1344, 1345, - 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, - 1354, 1355, 1342, 1343, 1344, 1345, 1346, 1347, - 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, - 1340, 1357, 1054, 1356, 1339, 1055, 1056, 1358, - 1358, 1055, 1058, 1054, 1057, 1053, 1055, 1056, - 1359, 1359, 1055, 1058, 1054, 1057, 1053, 1055, - 1056, 1360, 1360, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1361, 1361, 1055, 1058, 1054, 1057, - 1053, 1055, 1056, 1362, 1362, 1055, 1058, 1054, - 1057, 1053, 1364, 1365, 1366, 1367, 1368, 1369, - 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, - 1378, 1379, 1366, 1367, 1368, 1369, 1370, 1371, - 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, - 1364, 1381, 1054, 1380, 1363, 1055, 1056, 1382, - 1383, 1382, 1383, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1384, 1384, 1055, 1058, 1054, 1057, - 1053, 1055, 1056, 1385, 1386, 1385, 1386, 1055, - 1058, 1054, 1057, 1053, 1388, 1389, 1390, 1391, - 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, - 1400, 1401, 1402, 1403, 1390, 1391, 1392, 1393, - 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, - 1402, 1403, 1388, 1405, 1054, 1404, 1387, 1055, - 1056, 1406, 1406, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1407, 1407, 1055, 1058, 1054, 1057, - 1053, 1055, 1056, 1408, 1408, 1055, 1058, 1054, - 1057, 1053, 1055, 1056, 1409, 1409, 1055, 1058, - 1054, 1057, 1053, 1055, 1410, 1056, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1411, 1412, 1411, - 1412, 1055, 1058, 1054, 1057, 1053, 1055, 1056, - 1413, 1413, 1055, 1058, 1054, 1057, 1053, 1415, - 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, - 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1417, - 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, - 1426, 1427, 1428, 1429, 1430, 1415, 1432, 1054, - 1431, 1414, 1055, 1056, 1433, 1433, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1434, 1434, 1055, - 1058, 1054, 1057, 1053, 1055, 1056, 1435, 1435, - 1055, 1058, 1054, 1057, 1053, 1437, 1438, 1439, - 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, - 1448, 1449, 1450, 1451, 1452, 1439, 1440, 1441, - 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, - 1450, 1451, 1452, 1437, 1454, 1054, 1453, 1436, - 1055, 1056, 1455, 1456, 1457, 1455, 1456, 1457, - 1055, 1058, 1054, 1057, 1053, 1055, 1056, 1458, - 1459, 1460, 1458, 1459, 1460, 1055, 1058, 1054, - 1057, 1053, 1055, 1056, 1461, 1461, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1462, 1462, 1055, - 1058, 1054, 1057, 1053, 1055, 1056, 1463, 1463, - 1055, 1058, 1054, 1057, 1053, 1055, 1056, 1457, - 1457, 1055, 1058, 1054, 1057, 1053, 1055, 1056, - 1464, 1464, 1055, 1058, 1054, 1057, 1053, 1466, - 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, - 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1468, - 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, - 1477, 1478, 1479, 1480, 1481, 1466, 1483, 1054, - 1482, 1465, 1055, 1056, 1484, 1484, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1485, 1485, 1055, - 1058, 1054, 1057, 1053, 1055, 1056, 1486, 1486, - 1055, 1058, 1054, 1057, 1053, 1055, 1056, 1487, - 1487, 1055, 1058, 1054, 1057, 1053, 1489, 1490, - 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, - 1499, 1500, 1501, 1502, 1503, 1504, 1491, 1492, - 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, - 1501, 1502, 1503, 1504, 1489, 1506, 1054, 1505, - 1488, 1055, 1056, 1507, 1508, 1509, 1507, 1508, - 1509, 1055, 1058, 1054, 1057, 1053, 1055, 1056, - 1510, 1510, 1055, 1058, 1054, 1057, 1053, 1512, - 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, - 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1514, - 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, - 1523, 1524, 1525, 1526, 1527, 1512, 1529, 1054, - 1528, 1511, 1055, 1056, 1530, 1530, 1055, 1058, - 1054, 1057, 1053, 1532, 1533, 1534, 1535, 1536, - 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, - 1545, 1546, 1547, 1534, 1535, 1536, 1537, 1538, - 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, - 1547, 1532, 1549, 1054, 1548, 1531, 1055, 1056, - 1316, 1316, 1055, 1058, 1054, 1057, 1053, 1055, - 1056, 1550, 1551, 1550, 1551, 1055, 1058, 1054, - 1057, 1053, 1553, 1554, 1555, 1556, 1557, 1558, - 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, - 1567, 1568, 1555, 1556, 1557, 1558, 1559, 1560, - 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, - 1553, 1570, 1054, 1569, 1552, 1055, 1056, 1571, - 1571, 1055, 1058, 1054, 1057, 1053, 1055, 1056, - 1572, 1572, 1055, 1058, 1054, 1057, 1053, 1055, - 1056, 1573, 1573, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1574, 1574, 1055, 1058, 1054, 1057, - 1053, 1576, 1577, 1578, 1579, 1580, 1581, 1582, - 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, - 1591, 1578, 1579, 1580, 1581, 1582, 1583, 1584, - 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1576, - 1593, 1054, 1592, 1575, 1055, 1056, 1594, 1594, - 1055, 1058, 1054, 1057, 1053, 1055, 1056, 1595, - 1595, 1055, 1058, 1054, 1057, 1053, 1597, 1598, - 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, - 1607, 1608, 1609, 1610, 1611, 1612, 1599, 1600, - 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, - 1609, 1610, 1611, 1612, 1597, 1614, 1054, 1613, - 1596, 1055, 1056, 1615, 1615, 1055, 1058, 1054, - 1057, 1053, 1617, 1618, 1619, 1620, 1621, 1622, - 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, - 1631, 1632, 1619, 1620, 1621, 1622, 1623, 1624, - 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, - 1617, 1634, 1054, 1633, 1616, 1636, 1637, 1638, - 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, - 1647, 1648, 1649, 1650, 1651, 1638, 1639, 1640, - 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, - 1649, 1650, 1651, 1636, 1653, 1057, 1057, 1054, - 1652, 1635, 1055, 1056, 1654, 1654, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1655, 1655, 1055, - 1058, 1054, 1057, 1053, 1055, 1056, 1656, 1656, - 1055, 1058, 1054, 1057, 1053, 1636, 1637, 1638, - 1639, 1640, 1641, 1642, 1643, 1644, 1657, 1646, - 1647, 1648, 1649, 1650, 1651, 1638, 1639, 1640, - 1641, 1642, 1643, 1644, 1657, 1646, 1647, 1648, - 1649, 1650, 1651, 1636, 1653, 1054, 1652, 1635, - 1055, 1056, 1658, 1658, 1055, 1058, 1054, 1057, - 1053, 1055, 1056, 1659, 1659, 1055, 1058, 1054, - 1057, 1053, 1055, 1056, 1660, 1660, 1055, 1058, - 1054, 1057, 1053, 1055, 1661, 1056, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1662, 1663, 1664, - 1662, 1663, 1664, 1055, 1058, 1054, 1057, 1053, - 1055, 1056, 1665, 1665, 1055, 1058, 1054, 1057, - 1053, 1667, 1668, 1669, 1670, 1671, 1672, 1673, - 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, - 1682, 1669, 1670, 1671, 1672, 1673, 1674, 1675, - 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1667, - 1684, 1054, 1683, 1666, 1055, 1056, 1685, 1685, - 1055, 1058, 1054, 1057, 1053, 1055, 1056, 1686, - 1686, 1055, 1058, 1054, 1057, 1053, 1055, 1056, - 1687, 1687, 1055, 1058, 1054, 1057, 1053, 1689, - 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, - 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1691, - 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, - 1700, 1701, 1702, 1703, 1704, 1689, 1706, 1054, - 1705, 1688, 1055, 1056, 1707, 1707, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1708, 1708, 1055, - 1058, 1054, 1057, 1053, 1055, 1056, 1709, 1709, - 1055, 1058, 1054, 1057, 1053, 1055, 1056, 1710, - 1710, 1055, 1058, 1054, 1057, 1053, 1712, 1713, - 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, - 1722, 1723, 1724, 1725, 1726, 1727, 1714, 1715, - 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, - 1724, 1725, 1726, 1727, 1712, 1729, 1054, 1728, - 1711, 1055, 1056, 1730, 1730, 1055, 1058, 1054, - 1057, 1053, 1055, 1056, 1731, 1731, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1732, 1732, 1055, - 1058, 1054, 1057, 1053, 1734, 1735, 1736, 1737, - 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, - 1746, 1747, 1748, 1749, 1736, 1737, 1738, 1739, - 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, - 1748, 1749, 1734, 1751, 1054, 1750, 1733, 1753, - 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, - 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1755, - 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, - 1764, 1765, 1766, 1767, 1768, 1753, 1770, 1054, - 1769, 1752, 1055, 1056, 1771, 1771, 1055, 1058, - 1054, 1057, 1053, 1055, 1772, 1056, 1055, 1058, - 1054, 1057, 1053, 1774, 1775, 1776, 1777, 1778, - 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, - 1787, 1788, 1789, 1776, 1777, 1778, 1779, 1780, - 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, - 1789, 1774, 1791, 1054, 1790, 1773, 1793, 1794, - 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, - 1803, 1804, 1805, 1806, 1807, 1808, 1795, 1796, - 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, - 1805, 1806, 1807, 1808, 1793, 1810, 1054, 1809, - 1792, 1055, 1056, 1811, 1812, 1811, 1812, 1055, - 1058, 1054, 1057, 1053, 1055, 1056, 1813, 1813, - 1055, 1058, 1054, 1057, 1053, 1055, 1056, 1814, - 1814, 1055, 1058, 1054, 1057, 1053, 1816, 1817, - 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, - 1826, 1827, 1828, 1829, 1830, 1831, 1818, 1819, - 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, - 1828, 1829, 1830, 1831, 1816, 1833, 1054, 1832, - 1815, 1055, 1834, 1056, 1055, 1058, 1054, 1057, - 1053, 1055, 1056, 1835, 1835, 1055, 1058, 1054, - 1057, 1053, 1055, 1056, 1836, 1836, 1055, 1058, - 1054, 1057, 1053, 1055, 1056, 1837, 1837, 1055, - 1058, 1054, 1057, 1053, 1055, 1056, 1838, 1838, - 1055, 1058, 1054, 1057, 1053, 1055, 1056, 1839, - 1839, 1055, 1058, 1054, 1057, 1053, 1841, 1842, - 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, - 1851, 1852, 1853, 1854, 1855, 1856, 1843, 1844, - 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, - 1853, 1854, 1855, 1856, 1841, 1858, 1054, 1857, - 1840, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, + 1053, 1040, 1041, 1042, 1043, 1044, 1045, 1046, + 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1037, + 1055, 1056, 1040, 1041, 1042, 1043, 1044, 1045, + 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, - 1048, 1049, 1036, 1037, 1038, 1039, 1040, 1041, - 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1033, 1051, 1052, 1859, 1860, 1861, 1862, 1863, - 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, - 1872, 1859, 1860, 1861, 1862, 1863, 1864, 1865, - 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1032, - 1050, 1031, 1874, 1875, 1876, 1877, 1878, 1879, - 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, - 1888, 1889, 1876, 1877, 1878, 1879, 1880, 1881, - 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, - 1874, 1891, 1890, 1873, 1893, 1894, 1895, 1896, - 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, - 1905, 1906, 1907, 1908, 1895, 1896, 1897, 1898, - 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, - 1907, 1908, 1893, 1910, 1909, 1892, 1912, 1913, - 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, - 1922, 1923, 1924, 1925, 1926, 1927, 1914, 1915, - 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, - 1924, 1925, 1926, 1927, 1912, 1929, 1928, 1911, - 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, - 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, - 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, - 1941, 1942, 1943, 1944, 1945, 1946, 1931, 1948, - 1947, 1930, 1950, 1951, 1952, 1953, 1954, 1955, - 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, - 1964, 1965, 1952, 1953, 1954, 1955, 1956, 1957, - 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, - 1950, 1967, 1966, 1949, 1969, 1970, 1971, 1972, - 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, - 1981, 1982, 1983, 1984, 1971, 1972, 1973, 1974, - 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, - 1983, 1984, 1969, 1986, 1985, 1968, 1988, 1989, - 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, - 1998, 1999, 2000, 2001, 2002, 2003, 1990, 1991, - 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 1988, 2005, 2004, 1987, - 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, - 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, - 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, - 2017, 2018, 2019, 2020, 2021, 2022, 2007, 2024, - 2023, 2006, 2026, 2027, 2028, 2029, 2030, 2031, - 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, - 2040, 2041, 2028, 2029, 2030, 2031, 2032, 2033, - 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, - 2026, 2043, 2042, 2025, 2045, 2046, 2047, 2048, - 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, - 2057, 2058, 2059, 2060, 2047, 2048, 2049, 2050, - 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, - 2059, 2060, 2045, 2062, 2061, 2044, 2064, 2065, - 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, - 2074, 2075, 2076, 2077, 2078, 2079, 2066, 2067, - 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, - 2076, 2077, 2078, 2079, 2064, 2081, 2080, 2063, - 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, - 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, - 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, - 2093, 2094, 2095, 2096, 2097, 2098, 2083, 2100, - 2099, 2082, 2102, 2103, 2104, 2105, 2106, 2107, - 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, - 2116, 2117, 2104, 2105, 2106, 2107, 2108, 2109, - 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, - 2102, 2119, 2118, 2101, 2121, 2122, 2123, 2124, - 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, - 2133, 2134, 2135, 2136, 2123, 2124, 2125, 2126, - 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, - 2135, 2136, 2121, 2138, 2137, 2120, 2140, 2141, - 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, - 2150, 2151, 2152, 2153, 2154, 2155, 2142, 2143, - 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, - 2152, 2153, 2154, 2155, 2140, 2157, 2156, 2139, - 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, - 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, - 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, - 2169, 2170, 2171, 2172, 2173, 2174, 2159, 2176, - 2175, 2158, 2178, 2179, 2180, 2181, 2182, 2183, - 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, - 2192, 2193, 2180, 2181, 2182, 2183, 2184, 2185, - 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, - 2178, 2195, 2194, 2177, 2197, 2198, 2199, 2200, - 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, - 2209, 2210, 2211, 2212, 2199, 2200, 2201, 2202, - 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, - 2211, 2212, 2197, 2214, 2206, 2206, 2213, 2196, - 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, - 2205, 2215, 2207, 2208, 2209, 2210, 2211, 2212, - 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2215, - 2207, 2208, 2209, 2210, 2211, 2212, 2197, 2214, - 2213, 2196, 2217, 2218, 2219, 2220, 2221, 2222, - 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, - 2231, 2232, 2219, 2220, 2221, 2222, 2223, 2224, + 1048, 1049, 1050, 1051, 1052, 1053, 1036, 1054, + 1035, 1059, 1060, 1059, 1062, 1058, 1061, 1057, + 1064, 1065, 1064, 1067, 1066, 1063, 1070, 1071, + 1072, 1073, 1074, 1072, 1073, 1074, 1070, 1069, + 1077, 1077, 1076, 1079, 1079, 1078, 1070, 1071, + 1080, 1081, 1082, 1080, 1081, 1082, 1070, 1069, + 1084, 1085, 1086, 1087, 1088, 1085, 1086, 1087, + 1088, 1084, 1076, 1077, 1089, 1089, 1077, 1076, + 1077, 1090, 1090, 1077, 1076, 1077, 1091, 1091, + 1077, 1076, 1077, 1092, 1092, 1077, 1076, 1084, + 1085, 1087, 1088, 1085, 1087, 1088, 1084, 1076, + 1084, 1085, 1093, 1087, 1088, 1085, 1093, 1087, + 1088, 1084, 1076, 1077, 1094, 1094, 1077, 1076, + 1077, 1095, 1095, 1077, 1076, 1077, 1096, 1096, + 1077, 1076, 1077, 1097, 1097, 1077, 1076, 1077, + 1092, 1092, 1077, 1076, 1077, 1098, 1099, 1100, + 1098, 1099, 1100, 1077, 1076, 1077, 1101, 1101, + 1077, 1076, 1077, 1102, 1102, 1077, 1076, 1077, + 1103, 1103, 1077, 1076, 1077, 1104, 1104, 1077, + 1076, 1077, 1099, 1099, 1077, 1076, 1106, 1107, + 1108, 1109, 1107, 1108, 1109, 1106, 1076, 1111, + 1112, 1113, 1114, 1112, 1113, 1114, 1111, 1076, + 1077, 1115, 1115, 1077, 1076, 1077, 1116, 1116, + 1077, 1076, 1111, 1117, 1113, 1114, 1117, 1113, + 1114, 1111, 1076, 1119, 1120, 1121, 1122, 1123, + 1120, 1121, 1122, 1123, 1119, 1118, 1119, 1120, + 1122, 1123, 1120, 1122, 1123, 1119, 1118, 1119, + 1120, 1124, 1122, 1123, 1120, 1124, 1122, 1123, + 1119, 1118, 1126, 1127, 1128, 1129, 1127, 1128, + 1129, 1126, 1125, 1131, 1132, 1133, 1134, 1132, + 1133, 1134, 1131, 1130, 1131, 1135, 1133, 1134, + 1135, 1133, 1134, 1131, 1130, 1137, 1139, 1138, + 1136, 1140, 1141, 1138, 1136, 1070, 1143, 1072, + 1073, 1074, 1072, 1073, 1074, 1145, 1146, 1147, + 1148, 1149, 1147, 1148, 1149, 1069, 1070, 1069, + 1144, 1145, 1144, 1142, 1077, 1151, 1153, 1154, + 1076, 1077, 1076, 1152, 1153, 1152, 1150, 1077, + 1155, 1077, 1076, 1079, 1137, 1156, 1139, 1079, + 1138, 1156, 1138, 1136, 1077, 1157, 1153, 1158, + 1076, 1077, 1076, 1152, 1153, 1152, 1150, 1070, + 1143, 1080, 1081, 1082, 1080, 1081, 1082, 1145, + 1146, 1159, 1160, 1161, 1159, 1160, 1161, 1069, + 1070, 1069, 1144, 1145, 1144, 1142, 1084, 1151, + 1085, 1086, 1087, 1088, 1085, 1086, 1087, 1088, + 1163, 1154, 1164, 1165, 1166, 1167, 1164, 1165, + 1166, 1167, 1076, 1084, 1076, 1152, 1163, 1152, + 1162, 1077, 1151, 1089, 1089, 1153, 1154, 1168, + 1168, 1076, 1077, 1076, 1152, 1153, 1152, 1150, + 1077, 1151, 1090, 1090, 1153, 1154, 1169, 1169, + 1076, 1077, 1076, 1152, 1153, 1152, 1150, 1077, + 1151, 1091, 1091, 1153, 1154, 1170, 1170, 1076, + 1077, 1076, 1152, 1153, 1152, 1150, 1077, 1151, + 1092, 1092, 1153, 1154, 1171, 1171, 1076, 1077, + 1076, 1152, 1153, 1152, 1150, 1084, 1151, 1085, + 1087, 1088, 1085, 1087, 1088, 1163, 1154, 1164, + 1166, 1167, 1164, 1166, 1167, 1076, 1084, 1076, + 1152, 1163, 1152, 1162, 1084, 1151, 1085, 1093, + 1087, 1088, 1085, 1093, 1087, 1088, 1163, 1154, + 1164, 1172, 1166, 1167, 1164, 1172, 1166, 1167, + 1076, 1084, 1076, 1152, 1163, 1152, 1162, 1077, + 1151, 1094, 1094, 1153, 1154, 1173, 1173, 1076, + 1077, 1076, 1152, 1153, 1152, 1150, 1077, 1151, + 1095, 1095, 1153, 1154, 1174, 1174, 1076, 1077, + 1076, 1152, 1153, 1152, 1150, 1077, 1151, 1096, + 1096, 1153, 1154, 1175, 1175, 1076, 1077, 1076, + 1152, 1153, 1152, 1150, 1077, 1151, 1097, 1097, + 1153, 1154, 1176, 1176, 1076, 1077, 1076, 1152, + 1153, 1152, 1150, 1077, 1151, 1092, 1092, 1153, + 1154, 1171, 1171, 1076, 1077, 1076, 1152, 1153, + 1152, 1150, 1077, 1151, 1098, 1099, 1100, 1098, + 1099, 1100, 1153, 1154, 1177, 1178, 1179, 1177, + 1178, 1179, 1076, 1077, 1076, 1152, 1153, 1152, + 1150, 1077, 1151, 1101, 1101, 1153, 1154, 1180, + 1180, 1076, 1077, 1076, 1152, 1153, 1152, 1150, + 1077, 1151, 1102, 1102, 1153, 1154, 1181, 1181, + 1076, 1077, 1076, 1152, 1153, 1152, 1150, 1077, + 1151, 1103, 1103, 1153, 1154, 1182, 1182, 1076, + 1077, 1076, 1152, 1153, 1152, 1150, 1077, 1151, + 1104, 1104, 1153, 1154, 1183, 1183, 1076, 1077, + 1076, 1152, 1153, 1152, 1150, 1077, 1151, 1099, + 1099, 1153, 1154, 1178, 1178, 1076, 1077, 1076, + 1152, 1153, 1152, 1150, 1106, 1151, 1107, 1108, + 1109, 1107, 1108, 1109, 1185, 1154, 1186, 1187, + 1188, 1186, 1187, 1188, 1076, 1106, 1076, 1152, + 1185, 1152, 1184, 1111, 1151, 1112, 1113, 1114, + 1112, 1113, 1114, 1190, 1154, 1191, 1192, 1193, + 1191, 1192, 1193, 1076, 1111, 1076, 1152, 1190, + 1152, 1189, 1077, 1151, 1115, 1115, 1153, 1154, + 1194, 1194, 1076, 1077, 1076, 1152, 1153, 1152, + 1150, 1077, 1151, 1116, 1116, 1153, 1154, 1195, + 1195, 1076, 1077, 1076, 1152, 1153, 1152, 1150, + 1111, 1151, 1117, 1113, 1114, 1117, 1113, 1114, + 1190, 1154, 1196, 1192, 1193, 1196, 1192, 1193, + 1076, 1111, 1076, 1152, 1190, 1152, 1189, 1119, + 1137, 1120, 1121, 1122, 1123, 1120, 1121, 1122, + 1123, 1198, 1139, 1199, 1200, 1201, 1202, 1199, + 1200, 1201, 1202, 1119, 1138, 1198, 1138, 1197, + 1137, 108, 108, 1139, 1203, 1203, 1138, 1136, + 1137, 109, 109, 1139, 1204, 1204, 1138, 1136, + 1137, 110, 110, 1139, 1205, 1205, 1138, 1136, + 1137, 111, 111, 1139, 1206, 1206, 1138, 1136, + 1119, 1137, 1120, 1122, 1123, 1120, 1122, 1123, + 1198, 1139, 1199, 1201, 1202, 1199, 1201, 1202, + 1119, 1138, 1198, 1138, 1197, 1119, 1137, 1120, + 1124, 1122, 1123, 1120, 1124, 1122, 1123, 1198, + 1139, 1199, 1207, 1201, 1202, 1199, 1207, 1201, + 1202, 1119, 1138, 1198, 1138, 1197, 1137, 112, + 112, 1139, 1208, 1208, 1138, 1136, 1137, 113, + 113, 1139, 1209, 1209, 1138, 1136, 1137, 114, + 114, 1139, 1210, 1210, 1138, 1136, 1137, 115, + 115, 1139, 1211, 1211, 1138, 1136, 1137, 111, + 111, 1139, 1206, 1206, 1138, 1136, 1137, 116, + 117, 118, 116, 117, 118, 1139, 1212, 1213, + 1214, 1212, 1213, 1214, 1138, 1136, 1137, 119, + 119, 1139, 1215, 1215, 1138, 1136, 1137, 120, + 120, 1139, 1216, 1216, 1138, 1136, 1137, 121, + 121, 1139, 1217, 1217, 1138, 1136, 1137, 122, + 122, 1139, 1218, 1218, 1138, 1136, 1137, 117, + 117, 1139, 1213, 1213, 1138, 1136, 1126, 1137, + 1127, 1128, 1129, 1127, 1128, 1129, 1220, 1139, + 1221, 1222, 1223, 1221, 1222, 1223, 1126, 1138, + 1220, 1138, 1219, 1131, 1137, 1132, 1133, 1134, + 1132, 1133, 1134, 1225, 1139, 1226, 1227, 1228, + 1226, 1227, 1228, 1131, 1138, 1225, 1138, 1224, + 1137, 123, 123, 1139, 1229, 1229, 1138, 1136, + 1137, 124, 124, 1139, 1230, 1230, 1138, 1136, + 1131, 1137, 1135, 1133, 1134, 1135, 1133, 1134, + 1225, 1139, 1231, 1227, 1228, 1231, 1227, 1228, + 1131, 1138, 1225, 1138, 1224, 1037, 1038, 1039, + 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, + 1240, 1241, 1242, 1243, 1244, 1245, 1232, 1233, + 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, + 1242, 1243, 1244, 1245, 1037, 1055, 1056, 1061, + 1054, 1061, 1054, 1061, 1061, 1054, 1061, 1054, + 1061, 1036, 1054, 1061, 1054, 1061, 1054, 1061, + 1054, 1061, 1054, 1035, 1059, 1060, 1246, 1246, + 1059, 1062, 1058, 1061, 1057, 1059, 1060, 1247, + 1247, 1059, 1062, 1058, 1061, 1057, 1249, 1250, + 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, + 1259, 1260, 1261, 1262, 1263, 1264, 1251, 1252, + 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, + 1261, 1262, 1263, 1264, 1249, 1266, 1058, 1265, + 1248, 1059, 1060, 1267, 1267, 1059, 1062, 1058, + 1061, 1057, 1059, 1060, 1268, 1268, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1269, 1269, 1059, + 1062, 1058, 1061, 1057, 1271, 1272, 1273, 1274, + 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, + 1283, 1284, 1285, 1286, 1273, 1274, 1275, 1276, + 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, + 1285, 1286, 1271, 1288, 1058, 1287, 1270, 1059, + 1060, 1289, 1290, 1289, 1290, 1059, 1062, 1058, + 1061, 1057, 1059, 1060, 1291, 1291, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1292, 1292, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1293, 1293, + 1059, 1062, 1058, 1061, 1057, 1059, 1294, 1295, + 1060, 1059, 1062, 1058, 1061, 1057, 1297, 1298, + 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, + 1307, 1308, 1309, 1310, 1311, 1312, 1299, 1300, + 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, + 1309, 1310, 1311, 1312, 1297, 1314, 1058, 1313, + 1296, 1059, 1060, 1315, 1315, 1059, 1062, 1058, + 1061, 1057, 1059, 1060, 1316, 1316, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1317, 1317, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1318, 1318, + 1059, 1062, 1058, 1061, 1057, 1059, 1060, 1319, + 1319, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1320, 1320, 1059, 1062, 1058, 1061, 1057, 1322, + 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, + 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1324, + 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, + 1333, 1334, 1335, 1336, 1337, 1322, 1339, 1058, + 1338, 1321, 1059, 1060, 1340, 1340, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1341, 1341, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1342, 1342, + 1059, 1062, 1058, 1061, 1057, 1344, 1345, 1346, + 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, + 1355, 1356, 1357, 1358, 1359, 1346, 1347, 1348, + 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, + 1357, 1358, 1359, 1344, 1361, 1058, 1360, 1343, + 1059, 1060, 1362, 1362, 1059, 1062, 1058, 1061, + 1057, 1059, 1060, 1363, 1363, 1059, 1062, 1058, + 1061, 1057, 1059, 1060, 1364, 1364, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1365, 1365, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1366, 1366, + 1059, 1062, 1058, 1061, 1057, 1368, 1369, 1370, + 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, + 1379, 1380, 1381, 1382, 1383, 1370, 1371, 1372, + 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, + 1381, 1382, 1383, 1368, 1385, 1058, 1384, 1367, + 1059, 1060, 1386, 1387, 1386, 1387, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1388, 1388, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1389, 1390, + 1389, 1390, 1059, 1062, 1058, 1061, 1057, 1392, + 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, + 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1394, + 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, + 1403, 1404, 1405, 1406, 1407, 1392, 1409, 1058, + 1408, 1391, 1059, 1060, 1410, 1410, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1411, 1411, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1412, 1412, + 1059, 1062, 1058, 1061, 1057, 1059, 1060, 1413, + 1413, 1059, 1062, 1058, 1061, 1057, 1059, 1414, + 1060, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1415, 1416, 1415, 1416, 1059, 1062, 1058, 1061, + 1057, 1059, 1060, 1417, 1417, 1059, 1062, 1058, + 1061, 1057, 1419, 1420, 1421, 1422, 1423, 1424, + 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, + 1433, 1434, 1421, 1422, 1423, 1424, 1425, 1426, + 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, + 1419, 1436, 1058, 1435, 1418, 1059, 1060, 1437, + 1437, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1438, 1438, 1059, 1062, 1058, 1061, 1057, 1059, + 1060, 1439, 1439, 1059, 1062, 1058, 1061, 1057, + 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, + 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, + 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, + 1451, 1452, 1453, 1454, 1455, 1456, 1441, 1458, + 1058, 1457, 1440, 1059, 1060, 1459, 1460, 1461, + 1459, 1460, 1461, 1059, 1062, 1058, 1061, 1057, + 1059, 1060, 1462, 1463, 1464, 1462, 1463, 1464, + 1059, 1062, 1058, 1061, 1057, 1059, 1060, 1465, + 1465, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1466, 1466, 1059, 1062, 1058, 1061, 1057, 1059, + 1060, 1467, 1467, 1059, 1062, 1058, 1061, 1057, + 1059, 1060, 1461, 1461, 1059, 1062, 1058, 1061, + 1057, 1059, 1060, 1468, 1468, 1059, 1062, 1058, + 1061, 1057, 1470, 1471, 1472, 1473, 1474, 1475, + 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, + 1484, 1485, 1472, 1473, 1474, 1475, 1476, 1477, + 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, + 1470, 1487, 1058, 1486, 1469, 1059, 1060, 1488, + 1488, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1489, 1489, 1059, 1062, 1058, 1061, 1057, 1059, + 1060, 1490, 1490, 1059, 1062, 1058, 1061, 1057, + 1059, 1060, 1491, 1491, 1059, 1062, 1058, 1061, + 1057, 1493, 1494, 1495, 1496, 1497, 1498, 1499, + 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, + 1508, 1495, 1496, 1497, 1498, 1499, 1500, 1501, + 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1493, + 1510, 1058, 1509, 1492, 1059, 1060, 1511, 1512, + 1513, 1511, 1512, 1513, 1059, 1062, 1058, 1061, + 1057, 1059, 1060, 1514, 1514, 1059, 1062, 1058, + 1061, 1057, 1516, 1517, 1518, 1519, 1520, 1521, + 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, + 1530, 1531, 1518, 1519, 1520, 1521, 1522, 1523, + 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, + 1516, 1533, 1058, 1532, 1515, 1059, 1060, 1534, + 1534, 1059, 1062, 1058, 1061, 1057, 1536, 1537, + 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, + 1546, 1547, 1548, 1549, 1550, 1551, 1538, 1539, + 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, + 1548, 1549, 1550, 1551, 1536, 1553, 1058, 1552, + 1535, 1059, 1060, 1320, 1320, 1059, 1062, 1058, + 1061, 1057, 1059, 1060, 1554, 1555, 1556, 1554, + 1555, 1556, 1059, 1062, 1058, 1061, 1057, 1558, + 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, + 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1560, + 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, + 1569, 1570, 1571, 1572, 1573, 1558, 1575, 1058, + 1574, 1557, 1059, 1060, 1576, 1576, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1577, 1577, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1578, 1578, + 1059, 1062, 1058, 1061, 1057, 1059, 1060, 1579, + 1579, 1059, 1062, 1058, 1061, 1057, 1581, 1582, + 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, + 1591, 1592, 1593, 1594, 1595, 1596, 1583, 1584, + 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, + 1593, 1594, 1595, 1596, 1581, 1598, 1058, 1597, + 1580, 1059, 1060, 1599, 1599, 1059, 1062, 1058, + 1061, 1057, 1059, 1060, 1600, 1600, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1601, 1601, 1059, + 1062, 1058, 1061, 1057, 1603, 1604, 1605, 1606, + 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, + 1615, 1616, 1617, 1618, 1605, 1606, 1607, 1608, + 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 1603, 1620, 1058, 1619, 1602, 1059, + 1060, 1621, 1621, 1059, 1062, 1058, 1061, 1057, + 1059, 1060, 1622, 1622, 1059, 1062, 1058, 1061, + 1057, 1624, 1625, 1626, 1627, 1628, 1629, 1630, + 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, + 1639, 1626, 1627, 1628, 1629, 1630, 1631, 1632, + 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1624, + 1641, 1058, 1640, 1623, 1059, 1060, 1642, 1642, + 1059, 1062, 1058, 1061, 1057, 1644, 1645, 1646, + 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, + 1655, 1656, 1657, 1658, 1659, 1646, 1647, 1648, + 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, + 1657, 1658, 1659, 1644, 1661, 1058, 1660, 1643, + 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, + 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, + 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, + 1673, 1674, 1675, 1676, 1677, 1678, 1663, 1680, + 1061, 1061, 1058, 1679, 1662, 1059, 1060, 1681, + 1681, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1682, 1682, 1059, 1062, 1058, 1061, 1057, 1059, + 1060, 1683, 1683, 1059, 1062, 1058, 1061, 1057, + 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, + 1671, 1684, 1673, 1674, 1675, 1676, 1677, 1678, + 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1684, + 1673, 1674, 1675, 1676, 1677, 1678, 1663, 1680, + 1058, 1679, 1662, 1059, 1060, 1685, 1685, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1686, 1686, + 1059, 1062, 1058, 1061, 1057, 1059, 1060, 1687, + 1687, 1059, 1062, 1058, 1061, 1057, 1059, 1688, + 1060, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1689, 1690, 1691, 1689, 1690, 1691, 1059, 1062, + 1058, 1061, 1057, 1059, 1060, 1692, 1692, 1059, + 1062, 1058, 1061, 1057, 1694, 1695, 1696, 1697, + 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, + 1706, 1707, 1708, 1709, 1696, 1697, 1698, 1699, + 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, + 1708, 1709, 1694, 1711, 1058, 1710, 1693, 1059, + 1060, 1712, 1712, 1059, 1062, 1058, 1061, 1057, + 1059, 1060, 1713, 1713, 1059, 1062, 1058, 1061, + 1057, 1059, 1060, 1714, 1714, 1059, 1062, 1058, + 1061, 1057, 1716, 1717, 1718, 1719, 1720, 1721, + 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, + 1730, 1731, 1718, 1719, 1720, 1721, 1722, 1723, + 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, + 1716, 1733, 1058, 1732, 1715, 1059, 1060, 1734, + 1734, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1735, 1735, 1059, 1062, 1058, 1061, 1057, 1059, + 1060, 1736, 1736, 1059, 1062, 1058, 1061, 1057, + 1059, 1060, 1737, 1737, 1059, 1062, 1058, 1061, + 1057, 1739, 1740, 1741, 1742, 1743, 1744, 1745, + 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, + 1754, 1741, 1742, 1743, 1744, 1745, 1746, 1747, + 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1739, + 1756, 1058, 1755, 1738, 1059, 1060, 1757, 1757, + 1059, 1062, 1058, 1061, 1057, 1059, 1060, 1758, + 1758, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1759, 1759, 1059, 1062, 1058, 1061, 1057, 1761, + 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, + 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1763, + 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, + 1772, 1773, 1774, 1775, 1776, 1761, 1778, 1058, + 1777, 1760, 1780, 1781, 1782, 1783, 1784, 1785, + 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, + 1794, 1795, 1782, 1783, 1784, 1785, 1786, 1787, + 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, + 1780, 1797, 1058, 1796, 1779, 1059, 1060, 1798, + 1798, 1059, 1062, 1058, 1061, 1057, 1059, 1799, + 1060, 1059, 1062, 1058, 1061, 1057, 1801, 1802, + 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, + 1811, 1812, 1813, 1814, 1815, 1816, 1803, 1804, + 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, + 1813, 1814, 1815, 1816, 1801, 1818, 1058, 1817, + 1800, 1820, 1821, 1822, 1823, 1824, 1825, 1826, + 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, + 1835, 1822, 1823, 1824, 1825, 1826, 1827, 1828, + 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1820, + 1837, 1058, 1836, 1819, 1059, 1060, 1838, 1839, + 1838, 1839, 1059, 1062, 1058, 1061, 1057, 1059, + 1060, 1840, 1840, 1059, 1062, 1058, 1061, 1057, + 1059, 1060, 1841, 1841, 1059, 1062, 1058, 1061, + 1057, 1843, 1844, 1845, 1846, 1847, 1848, 1849, + 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, + 1858, 1845, 1846, 1847, 1848, 1849, 1850, 1851, + 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1843, + 1860, 1058, 1859, 1842, 1059, 1861, 1060, 1059, + 1062, 1058, 1061, 1057, 1059, 1060, 1862, 1862, + 1059, 1062, 1058, 1061, 1057, 1059, 1060, 1863, + 1863, 1059, 1062, 1058, 1061, 1057, 1059, 1060, + 1864, 1864, 1059, 1062, 1058, 1061, 1057, 1059, + 1060, 1865, 1865, 1059, 1062, 1058, 1061, 1057, + 1059, 1060, 1866, 1866, 1059, 1062, 1058, 1061, + 1057, 1868, 1869, 1870, 1871, 1872, 1873, 1874, + 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, + 1883, 1870, 1871, 1872, 1873, 1874, 1875, 1876, + 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1868, + 1885, 1058, 1884, 1867, 1037, 1038, 1039, 1040, + 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, + 1049, 1050, 1051, 1052, 1053, 1040, 1041, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, + 1051, 1052, 1053, 1037, 1055, 1056, 1886, 1887, + 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, + 1896, 1897, 1898, 1899, 1886, 1887, 1888, 1889, + 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, + 1898, 1899, 1036, 1054, 1035, 1901, 1902, 1903, + 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, + 1912, 1913, 1914, 1915, 1916, 1903, 1904, 1905, + 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, + 1914, 1915, 1916, 1901, 1918, 1917, 1900, 1920, + 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, + 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1922, + 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, + 1931, 1932, 1933, 1934, 1935, 1920, 1937, 1936, + 1919, 1939, 1940, 1941, 1942, 1943, 1944, 1945, + 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, + 1954, 1941, 1942, 1943, 1944, 1945, 1946, 1947, + 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1939, + 1956, 1955, 1938, 1958, 1959, 1960, 1961, 1962, + 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, + 1971, 1972, 1973, 1960, 1961, 1962, 1963, 1964, + 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, + 1973, 1958, 1975, 1974, 1957, 1977, 1978, 1979, + 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, + 1988, 1989, 1990, 1991, 1992, 1979, 1980, 1981, + 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, + 1990, 1991, 1992, 1977, 1994, 1993, 1976, 1996, + 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2008, 2009, 2010, 2011, 1998, + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 1996, 2013, 2012, + 1995, 2015, 2016, 2017, 2018, 2019, 2020, 2021, + 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, + 2030, 2017, 2018, 2019, 2020, 2021, 2022, 2023, + 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2015, + 2032, 2031, 2014, 2034, 2035, 2036, 2037, 2038, + 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, + 2047, 2048, 2049, 2036, 2037, 2038, 2039, 2040, + 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, + 2049, 2034, 2051, 2050, 2033, 2053, 2054, 2055, + 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, + 2064, 2065, 2066, 2067, 2068, 2055, 2056, 2057, + 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, + 2066, 2067, 2068, 2053, 2070, 2069, 2052, 2072, + 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, + 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2074, + 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, + 2083, 2084, 2085, 2086, 2087, 2072, 2089, 2088, + 2071, 2091, 2092, 2093, 2094, 2095, 2096, 2097, + 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, + 2106, 2093, 2094, 2095, 2096, 2097, 2098, 2099, + 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2091, + 2108, 2107, 2090, 2110, 2111, 2112, 2113, 2114, + 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, + 2123, 2124, 2125, 2112, 2113, 2114, 2115, 2116, + 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, + 2125, 2110, 2127, 2126, 2109, 2129, 2130, 2131, + 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, + 2140, 2141, 2142, 2143, 2144, 2131, 2132, 2133, + 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, + 2142, 2143, 2144, 2129, 2146, 2145, 2128, 2148, + 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, + 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2150, + 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, + 2159, 2160, 2161, 2162, 2163, 2148, 2165, 2164, + 2147, 2167, 2168, 2169, 2170, 2171, 2172, 2173, + 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, + 2182, 2169, 2170, 2171, 2172, 2173, 2174, 2175, + 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2167, + 2184, 2183, 2166, 2186, 2187, 2188, 2189, 2190, + 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, + 2199, 2200, 2201, 2188, 2189, 2190, 2191, 2192, + 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, + 2201, 2186, 2203, 2202, 2185, 2205, 2206, 2207, + 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, + 2216, 2217, 2218, 2219, 2220, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, + 2218, 2219, 2220, 2205, 2222, 2221, 2204, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, - 2217, 2234, 2233, 2216, 2236, 2237, 2238, 2239, - 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, - 2248, 2249, 2250, 2251, 2238, 2239, 2240, 2241, - 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, - 2250, 2251, 2236, 2253, 2252, 2235, 2255, 2256, - 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, - 2265, 2266, 2267, 2268, 2269, 2270, 2257, 2258, - 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, - 2267, 2268, 2269, 2270, 2255, 2272, 2271, 2254, - 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, - 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, - 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, - 2284, 2285, 2286, 2287, 2288, 2289, 2274, 2291, - 2290, 2273, 2293, 2294, 2295, 2296, 2297, 2298, - 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, - 2307, 2308, 2295, 2296, 2297, 2298, 2299, 2300, - 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, - 2293, 2310, 2309, 2292, 2312, 2313, 2314, 2315, - 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, - 2324, 2325, 2326, 2327, 2314, 2315, 2316, 2317, - 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, - 2326, 2327, 2312, 2329, 2328, 2311, 2331, 2332, - 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, - 2341, 2342, 2343, 2344, 2345, 2346, 2333, 2334, - 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, - 2343, 2344, 2345, 2346, 2331, 2348, 2347, 2330, - 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, - 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, - 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, - 2360, 2361, 2362, 2363, 2364, 2365, 2350, 2367, - 2366, 2349, 2369, 2370, 2371, 2372, 2373, 2374, - 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, - 2383, 2384, 2371, 2372, 2373, 2374, 2375, 2376, - 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, - 2369, 2386, 2385, 2368, 1133, 125, 125, 1135, - 2387, 2387, 1134, 1132, 1133, 126, 126, 1135, - 126, 126, 1134, 1132, 1133, 127, 127, 1135, - 2388, 2388, 1134, 1132, 1133, 128, 128, 1135, - 2389, 2389, 1134, 1132, 1133, 129, 129, 1135, - 129, 129, 1134, 1132, 1133, 130, 131, 130, - 131, 1135, 2390, 2391, 2390, 2391, 1134, 1132, - 1133, 132, 132, 1135, 2392, 2392, 1134, 1132, - 1133, 133, 133, 1135, 2393, 2393, 1134, 1132, - 1133, 134, 134, 1135, 2394, 2394, 1134, 1132, - 135, 136, 1133, 135, 136, 1135, 1134, 1132, - 1133, 218, 219, 218, 219, 1135, 2395, 2396, - 2395, 2396, 1134, 1132, 1133, 220, 220, 1135, - 2397, 2397, 1134, 1132, 1133, 221, 221, 1135, - 221, 221, 1134, 1132, 222, 1133, 2398, 1135, - 1134, 1132, 1133, 223, 223, 1135, 2399, 2399, - 1134, 1132, 1133, 224, 224, 1135, 2400, 2400, - 1134, 1132, 1133, 225, 225, 1135, 2401, 2401, - 1134, 1132, 1133, 226, 226, 1135, 2402, 2402, - 1134, 1132, 1133, 227, 227, 1135, 227, 227, - 1134, 1132, 1133, 137, 137, 1135, 2403, 2403, - 1134, 1132, 1133, 138, 138, 1135, 2404, 2404, - 1134, 1132, 1133, 139, 139, 1135, 2405, 2405, - 1134, 1132, 1133, 140, 140, 1135, 2406, 2406, - 1134, 1132, 1133, 141, 141, 1135, 2407, 2407, - 1134, 1132, 1133, 142, 142, 1135, 142, 142, - 1134, 1132, 1133, 143, 143, 1135, 2408, 2408, - 1134, 1132, 1133, 144, 144, 1135, 2409, 2409, - 1134, 1132, 1133, 145, 145, 1135, 145, 145, - 1134, 1132, 1133, 146, 146, 1135, 2410, 2410, - 1134, 1132, 1133, 147, 147, 1135, 2411, 2411, - 1134, 1132, 1133, 148, 148, 1135, 2412, 2412, - 1134, 1132, 1133, 149, 149, 1135, 2413, 2413, - 1134, 1132, 1133, 150, 150, 1135, 150, 150, - 1134, 1132, 1133, 151, 152, 151, 152, 1135, - 2414, 2415, 2414, 2415, 1134, 1132, 1133, 153, - 153, 1135, 2416, 2416, 1134, 1132, 1133, 154, - 155, 154, 155, 1135, 154, 155, 154, 155, - 1134, 1132, 1133, 216, 216, 1135, 2417, 2417, - 1134, 1132, 217, 1133, 217, 1135, 1134, 1132, - 1133, 156, 156, 1135, 2418, 2418, 1134, 1132, - 1133, 157, 157, 1135, 2419, 2419, 1134, 1132, - 1133, 158, 158, 1135, 2420, 2420, 1134, 1132, - 1133, 159, 159, 1135, 2421, 2421, 1134, 1132, - 160, 1133, 2422, 1135, 1134, 1132, 1133, 161, - 162, 161, 162, 1135, 2423, 2424, 2423, 2424, - 1134, 1132, 1133, 163, 163, 1135, 163, 163, - 1134, 1132, 1133, 213, 213, 1135, 2425, 2425, - 1134, 1132, 1133, 214, 214, 1135, 2426, 2426, - 1134, 1132, 1133, 215, 215, 1135, 215, 215, - 1134, 1132, 1133, 164, 164, 1135, 2427, 2427, - 1134, 1132, 1133, 165, 165, 1135, 2428, 2428, - 1134, 1132, 1133, 166, 166, 1135, 166, 166, - 1134, 1132, 1133, 167, 168, 169, 167, 168, - 169, 1135, 2429, 2430, 2431, 2429, 2430, 2431, - 1134, 1132, 1133, 170, 171, 172, 170, 171, - 172, 1135, 2432, 2433, 2434, 2432, 2433, 2434, - 1134, 1132, 1133, 173, 173, 1135, 2435, 2435, - 1134, 1132, 1133, 174, 174, 1135, 2436, 2436, - 1134, 1132, 1133, 175, 175, 1135, 2437, 2437, - 1134, 1132, 1133, 169, 169, 1135, 2431, 2431, - 1134, 1132, 1133, 176, 176, 1135, 176, 176, - 1134, 1132, 1133, 194, 194, 1135, 194, 194, - 1134, 1132, 2197, 2198, 2199, 2200, 2201, 2202, - 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, - 2211, 2212, 2199, 2200, 2201, 2202, 2203, 2204, - 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, - 2197, 2214, 2438, 2438, 2213, 2196, 1133, 195, - 195, 1135, 2439, 2439, 1134, 1132, 1133, 196, - 196, 1135, 2440, 2440, 1134, 1132, 1133, 197, - 197, 1135, 197, 197, 1134, 1132, 1133, 198, - 198, 1135, 2441, 2441, 1134, 1132, 1133, 199, - 199, 1135, 2442, 2442, 1134, 1132, 1133, 200, - 200, 1135, 2443, 2443, 1134, 1132, 201, 1133, - 2444, 1135, 1134, 1132, 1133, 202, 203, 204, - 202, 203, 204, 1135, 2445, 2446, 2447, 2445, - 2446, 2447, 1134, 1132, 1133, 205, 205, 1135, - 205, 205, 1134, 1132, 1133, 206, 206, 1135, - 2448, 2448, 1134, 1132, 1133, 207, 207, 1135, - 2449, 2449, 1134, 1132, 1133, 208, 208, 1135, - 208, 208, 1134, 1132, 1133, 209, 209, 1135, - 2450, 2450, 1134, 1132, 1133, 210, 210, 1135, - 2451, 2451, 1134, 1132, 1133, 211, 211, 1135, - 2452, 2452, 1134, 1132, 1133, 212, 212, 1135, - 212, 212, 1134, 1132, 1133, 177, 177, 1135, - 2453, 2453, 1134, 1132, 1133, 178, 178, 1135, - 2454, 2454, 1134, 1132, 1133, 179, 179, 1135, - 2455, 2455, 1134, 1132, 1133, 180, 180, 1135, - 180, 180, 1134, 1132, 1133, 181, 182, 183, - 181, 182, 183, 1135, 2456, 2457, 2458, 2456, - 2457, 2458, 1134, 1132, 1133, 184, 184, 1135, - 184, 184, 1134, 1132, 1133, 186, 187, 186, - 187, 1135, 186, 2459, 186, 2459, 1134, 1132, - 1133, 188, 188, 1135, 2460, 2460, 1134, 1132, - 1133, 189, 189, 1135, 2461, 2461, 1134, 1132, - 1133, 190, 190, 1135, 2462, 2462, 1134, 1132, - 1133, 191, 191, 1135, 191, 191, 1134, 1132, - 1133, 192, 192, 1135, 2463, 2463, 1134, 1132, - 1133, 193, 193, 1135, 193, 193, 1134, 1132, - 1133, 185, 185, 1135, 185, 185, 1134, 1132, - 1133, 142, 142, 1135, 142, 142, 1134, 1132, - 2465, 2466, 228, 2465, 2466, 228, 2467, 2464, - 2466, 2466, 2467, 2464, 2469, 2469, 2470, 2468, - 0 + 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2226, + 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, + 2235, 2236, 2237, 2238, 2239, 2224, 2241, 2240, + 2223, 2243, 2244, 2245, 2246, 2247, 2248, 2249, + 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, + 2258, 2245, 2246, 2247, 2248, 2249, 2250, 2251, + 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2243, + 2260, 2252, 2252, 2259, 2242, 2243, 2244, 2245, + 2246, 2247, 2248, 2249, 2250, 2251, 2261, 2253, + 2254, 2255, 2256, 2257, 2258, 2245, 2246, 2247, + 2248, 2249, 2250, 2251, 2261, 2253, 2254, 2255, + 2256, 2257, 2258, 2243, 2260, 2259, 2242, 2263, + 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, + 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2265, + 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, + 2274, 2275, 2276, 2277, 2278, 2263, 2280, 2279, + 2262, 2282, 2283, 2284, 2285, 2286, 2287, 2288, + 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, + 2297, 2284, 2285, 2286, 2287, 2288, 2289, 2290, + 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2282, + 2299, 2298, 2281, 2301, 2302, 2303, 2304, 2305, + 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, + 2314, 2315, 2316, 2303, 2304, 2305, 2306, 2307, + 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, + 2316, 2301, 2318, 2317, 2300, 2320, 2321, 2322, + 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, + 2331, 2332, 2333, 2334, 2335, 2322, 2323, 2324, + 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, + 2333, 2334, 2335, 2320, 2337, 2336, 2319, 2339, + 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, + 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2341, + 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, + 2350, 2351, 2352, 2353, 2354, 2339, 2356, 2355, + 2338, 2358, 2359, 2360, 2361, 2362, 2363, 2364, + 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, + 2373, 2360, 2361, 2362, 2363, 2364, 2365, 2366, + 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2358, + 2375, 2374, 2357, 2377, 2378, 2379, 2380, 2381, + 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, + 2390, 2391, 2392, 2379, 2380, 2381, 2382, 2383, + 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, + 2392, 2377, 2394, 2393, 2376, 2396, 2397, 2398, + 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, + 2407, 2408, 2409, 2410, 2411, 2398, 2399, 2400, + 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, + 2409, 2410, 2411, 2396, 2413, 2412, 2395, 2415, + 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, + 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2417, + 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, + 2426, 2427, 2428, 2429, 2430, 2415, 2432, 2431, + 2414, 1137, 125, 125, 1139, 2433, 2433, 1138, + 1136, 1137, 126, 126, 1139, 126, 126, 1138, + 1136, 1137, 127, 127, 1139, 2434, 2434, 1138, + 1136, 1137, 128, 128, 1139, 2435, 2435, 1138, + 1136, 1137, 129, 129, 1139, 129, 129, 1138, + 1136, 1137, 130, 131, 130, 131, 1139, 2436, + 2437, 2436, 2437, 1138, 1136, 1137, 132, 132, + 1139, 2438, 2438, 1138, 1136, 1137, 133, 133, + 1139, 2439, 2439, 1138, 1136, 1137, 134, 134, + 1139, 2440, 2440, 1138, 1136, 135, 136, 1137, + 135, 136, 1139, 1138, 1136, 1137, 222, 223, + 222, 223, 1139, 2441, 2442, 2441, 2442, 1138, + 1136, 1137, 224, 224, 1139, 2443, 2443, 1138, + 1136, 1137, 225, 225, 1139, 225, 225, 1138, + 1136, 226, 1137, 2444, 1139, 1138, 1136, 1137, + 227, 227, 1139, 2445, 2445, 1138, 1136, 1137, + 228, 228, 1139, 2446, 2446, 1138, 1136, 1137, + 229, 229, 1139, 2447, 2447, 1138, 1136, 1137, + 230, 230, 1139, 2448, 2448, 1138, 1136, 1137, + 231, 231, 1139, 231, 231, 1138, 1136, 1137, + 137, 137, 1139, 2449, 2449, 1138, 1136, 1137, + 138, 138, 1139, 2450, 2450, 1138, 1136, 1137, + 139, 139, 1139, 2451, 2451, 1138, 1136, 1137, + 140, 140, 1139, 2452, 2452, 1138, 1136, 1137, + 141, 141, 1139, 2453, 2453, 1138, 1136, 1137, + 142, 142, 1139, 142, 142, 1138, 1136, 1137, + 143, 143, 1139, 2454, 2454, 1138, 1136, 1137, + 144, 144, 1139, 2455, 2455, 1138, 1136, 1137, + 145, 145, 1139, 145, 145, 1138, 1136, 1137, + 146, 146, 1139, 2456, 2456, 1138, 1136, 1137, + 147, 147, 1139, 2457, 2457, 1138, 1136, 1137, + 148, 148, 1139, 2458, 2458, 1138, 1136, 1137, + 149, 149, 1139, 2459, 2459, 1138, 1136, 1137, + 150, 150, 1139, 150, 150, 1138, 1136, 1137, + 151, 152, 151, 152, 1139, 2460, 2461, 2460, + 2461, 1138, 1136, 1137, 153, 153, 1139, 2462, + 2462, 1138, 1136, 1137, 154, 155, 154, 155, + 1139, 154, 155, 154, 155, 1138, 1136, 1137, + 220, 220, 1139, 2463, 2463, 1138, 1136, 221, + 1137, 221, 1139, 1138, 1136, 1137, 156, 156, + 1139, 2464, 2464, 1138, 1136, 1137, 157, 157, + 1139, 2465, 2465, 1138, 1136, 1137, 158, 158, + 1139, 2466, 2466, 1138, 1136, 1137, 159, 159, + 1139, 2467, 2467, 1138, 1136, 160, 1137, 2468, + 1139, 1138, 1136, 1137, 161, 162, 161, 162, + 1139, 2469, 2470, 2469, 2470, 1138, 1136, 1137, + 163, 163, 1139, 163, 163, 1138, 1136, 1137, + 217, 217, 1139, 2471, 2471, 1138, 1136, 1137, + 218, 218, 1139, 2472, 2472, 1138, 1136, 1137, + 219, 219, 1139, 219, 219, 1138, 1136, 1137, + 164, 164, 1139, 2473, 2473, 1138, 1136, 1137, + 165, 165, 1139, 2474, 2474, 1138, 1136, 1137, + 166, 166, 1139, 166, 166, 1138, 1136, 1137, + 167, 168, 169, 167, 168, 169, 1139, 2475, + 2476, 2477, 2475, 2476, 2477, 1138, 1136, 1137, + 170, 171, 172, 170, 171, 172, 1139, 2478, + 2479, 2480, 2478, 2479, 2480, 1138, 1136, 1137, + 173, 173, 1139, 2481, 2481, 1138, 1136, 1137, + 174, 174, 1139, 2482, 2482, 1138, 1136, 1137, + 175, 175, 1139, 2483, 2483, 1138, 1136, 1137, + 169, 169, 1139, 2477, 2477, 1138, 1136, 1137, + 176, 176, 1139, 176, 176, 1138, 1136, 1137, + 198, 198, 1139, 198, 198, 1138, 1136, 2243, + 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, + 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2245, + 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, + 2254, 2255, 2256, 2257, 2258, 2243, 2260, 2484, + 2484, 2259, 2242, 1137, 199, 199, 1139, 2485, + 2485, 1138, 1136, 1137, 200, 200, 1139, 2486, + 2486, 1138, 1136, 1137, 201, 201, 1139, 201, + 201, 1138, 1136, 1137, 202, 202, 1139, 2487, + 2487, 1138, 1136, 1137, 203, 203, 1139, 2488, + 2488, 1138, 1136, 1137, 204, 204, 1139, 2489, + 2489, 1138, 1136, 205, 1137, 2490, 1139, 1138, + 1136, 1137, 206, 207, 208, 206, 207, 208, + 1139, 2491, 2492, 2493, 2491, 2492, 2493, 1138, + 1136, 1137, 209, 209, 1139, 209, 209, 1138, + 1136, 1137, 210, 210, 1139, 2494, 2494, 1138, + 1136, 1137, 211, 211, 1139, 2495, 2495, 1138, + 1136, 1137, 212, 212, 1139, 212, 212, 1138, + 1136, 1137, 213, 213, 1139, 2496, 2496, 1138, + 1136, 1137, 214, 214, 1139, 2497, 2497, 1138, + 1136, 1137, 215, 215, 1139, 2498, 2498, 1138, + 1136, 1137, 216, 216, 1139, 216, 216, 1138, + 1136, 1137, 177, 177, 1139, 2499, 2499, 1138, + 1136, 1137, 178, 178, 1139, 2500, 2500, 1138, + 1136, 1137, 179, 179, 1139, 2501, 2501, 1138, + 1136, 1137, 180, 180, 1139, 180, 180, 1138, + 1136, 1137, 181, 182, 183, 181, 182, 183, + 1139, 2502, 2503, 2504, 2502, 2503, 2504, 1138, + 1136, 1137, 184, 184, 1139, 184, 184, 1138, + 1136, 1137, 186, 187, 188, 186, 187, 188, + 1139, 186, 2505, 2506, 186, 2505, 2506, 1138, + 1136, 1137, 189, 189, 1139, 2507, 2507, 1138, + 1136, 1137, 190, 190, 1139, 2508, 2508, 1138, + 1136, 1137, 191, 191, 1139, 2509, 2509, 1138, + 1136, 1137, 192, 192, 1139, 192, 192, 1138, + 1136, 1137, 193, 193, 1139, 2510, 2510, 1138, + 1136, 1137, 194, 194, 1139, 2511, 2511, 1138, + 1136, 1137, 195, 195, 1139, 195, 195, 1138, + 1136, 1137, 196, 196, 1139, 2512, 2512, 1138, + 1136, 1137, 197, 197, 1139, 197, 197, 1138, + 1136, 1137, 185, 185, 1139, 185, 185, 1138, + 1136, 1137, 142, 142, 1139, 142, 142, 1138, + 1136, 2514, 2515, 232, 2514, 2515, 232, 2516, + 2513, 2515, 2515, 2516, 2513, 2518, 2518, 2519, + 2517, 0 }; static const short _demo_machine_parser_cmd_trans_targs[] = { - 2, 0, 209, 3, 2, 209, 3, 211, - 206, 6, 88, 7, 8, 9, 10, 11, - 12, 13, 85, 14, 15, 16, 17, 340, - 19, 20, 21, 345, 23, 346, 24, 25, + 2, 0, 212, 3, 2, 212, 3, 214, + 209, 6, 88, 7, 8, 9, 10, 11, + 12, 13, 85, 14, 15, 16, 17, 343, + 19, 20, 21, 348, 23, 349, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 35, 36, 37, 38, 348, 40, 349, 42, - 43, 350, 45, 351, 47, 48, 352, 355, - 51, 52, 53, 356, 55, 64, 67, 357, + 35, 36, 37, 38, 351, 40, 352, 42, + 43, 353, 45, 354, 47, 48, 355, 358, + 51, 52, 53, 359, 55, 64, 67, 360, 68, 70, 56, 57, 58, 59, 60, 62, - 63, 359, 65, 66, 360, 361, 69, 362, - 363, 72, 73, 74, 75, 364, 365, 78, - 366, 80, 367, 82, 368, 84, 369, 86, - 87, 370, 90, 91, 371, 93, 94, 95, - 372, 373, 206, 376, 99, 100, 101, 404, - 103, 104, 105, 106, 108, 406, 407, 109, - 110, 111, 112, 114, 408, 116, 583, 118, - 119, 584, 121, 196, 122, 123, 124, 585, - 608, 126, 127, 128, 129, 130, 586, 132, - 133, 587, 135, 136, 137, 138, 588, 140, - 194, 141, 589, 606, 143, 144, 145, 146, - 147, 148, 191, 590, 150, 151, 591, 153, - 178, 158, 154, 174, 600, 155, 156, 157, - 592, 160, 161, 162, 593, 164, 167, 172, - 594, 595, 596, 168, 169, 170, 171, 597, - 173, 598, 599, 176, 177, 601, 179, 180, - 181, 182, 183, 184, 187, 602, 185, 186, - 603, 188, 189, 190, 604, 192, 193, 605, - 195, 607, 197, 199, 198, 609, 200, 201, - 202, 203, 204, 610, 702, 206, 207, 1, - 4, 96, 205, 206, 208, 206, 208, 206, - 209, 210, 206, 210, 206, 212, 213, 339, - 5, 341, 342, 343, 344, 22, 347, 39, - 44, 353, 354, 54, 358, 206, 212, 214, - 215, 229, 230, 231, 232, 238, 251, 258, - 265, 272, 273, 281, 289, 206, 214, 215, - 229, 230, 231, 232, 238, 251, 258, 265, - 272, 273, 281, 330, 338, 216, 329, 217, - 218, 219, 220, 221, 222, 223, 325, 224, - 225, 226, 227, 228, 206, 214, 215, 229, - 230, 231, 232, 238, 251, 258, 265, 272, - 273, 281, 289, 206, 214, 215, 229, 230, - 231, 232, 238, 251, 258, 265, 272, 273, - 281, 322, 289, 206, 214, 215, 229, 230, - 231, 232, 238, 251, 258, 265, 272, 273, - 281, 289, 313, 206, 214, 215, 229, 230, - 231, 232, 319, 238, 251, 258, 265, 272, - 273, 281, 289, 206, 233, 215, 229, 316, - 231, 232, 238, 251, 258, 265, 272, 273, - 281, 237, 289, 234, 235, 236, 206, 214, - 215, 229, 230, 231, 232, 238, 251, 258, - 265, 272, 273, 281, 289, 239, 250, 240, - 241, 242, 243, 244, 245, 246, 247, 248, - 249, 206, 214, 215, 229, 230, 231, 232, - 238, 251, 258, 265, 272, 273, 281, 289, - 206, 214, 215, 229, 252, 231, 232, 238, - 251, 258, 265, 272, 273, 281, 289, 253, - 254, 255, 256, 257, 230, 259, 260, 206, - 214, 215, 229, 230, 231, 232, 261, 238, - 251, 258, 265, 272, 273, 281, 289, 262, - 263, 264, 266, 267, 206, 214, 215, 229, - 230, 231, 232, 268, 251, 258, 265, 272, - 273, 281, 289, 269, 270, 271, 238, 206, - 214, 215, 229, 274, 231, 232, 238, 251, - 258, 265, 272, 273, 281, 311, 289, 275, - 206, 214, 215, 229, 230, 231, 232, 276, - 238, 251, 258, 265, 272, 273, 281, 289, - 277, 278, 279, 280, 282, 294, 298, 288, - 300, 303, 283, 284, 285, 286, 287, 206, - 214, 215, 229, 230, 231, 232, 238, 251, - 258, 265, 272, 273, 281, 289, 206, 214, - 215, 229, 230, 231, 232, 290, 238, 251, - 258, 265, 272, 273, 281, 289, 291, 292, - 293, 295, 296, 297, 206, 214, 215, 229, - 230, 231, 232, 238, 251, 258, 265, 272, - 273, 281, 289, 299, 206, 214, 215, 229, - 230, 231, 232, 238, 251, 258, 265, 272, - 273, 281, 289, 301, 302, 206, 214, 215, - 229, 230, 231, 232, 238, 251, 258, 265, - 272, 273, 281, 289, 304, 206, 214, 215, - 229, 230, 231, 232, 238, 251, 258, 265, - 272, 273, 305, 289, 306, 307, 308, 309, - 310, 281, 312, 230, 314, 315, 317, 318, - 214, 230, 320, 321, 323, 324, 326, 327, - 328, 206, 214, 215, 229, 230, 231, 232, - 238, 251, 258, 265, 272, 273, 281, 289, - 331, 332, 333, 334, 335, 336, 337, 206, - 214, 215, 229, 230, 231, 232, 238, 251, - 258, 265, 272, 273, 281, 289, 206, 339, - 5, 341, 342, 343, 344, 22, 347, 39, - 44, 353, 354, 54, 89, 206, 339, 5, - 341, 342, 343, 344, 22, 347, 39, 44, - 353, 354, 54, 358, 206, 339, 5, 341, - 342, 343, 344, 22, 347, 39, 44, 353, - 354, 54, 83, 358, 206, 339, 5, 341, - 342, 343, 344, 22, 347, 39, 44, 353, - 354, 54, 358, 77, 206, 339, 5, 341, - 342, 343, 344, 81, 22, 347, 39, 44, - 353, 354, 54, 358, 206, 18, 5, 341, - 79, 343, 344, 22, 347, 39, 44, 353, - 354, 54, 358, 206, 339, 5, 341, 342, - 343, 344, 22, 347, 39, 44, 353, 354, - 54, 358, 206, 339, 5, 341, 342, 343, - 344, 22, 347, 39, 44, 353, 354, 54, - 358, 206, 339, 5, 341, 34, 343, 344, - 22, 347, 39, 44, 353, 354, 54, 358, - 342, 206, 339, 5, 341, 342, 343, 344, - 41, 22, 347, 39, 44, 353, 354, 54, - 358, 206, 339, 5, 341, 342, 343, 344, - 46, 347, 39, 44, 353, 354, 54, 358, - 22, 206, 339, 5, 341, 49, 343, 344, - 22, 347, 39, 44, 353, 354, 54, 76, - 358, 206, 339, 5, 341, 342, 343, 344, - 50, 22, 347, 39, 44, 353, 354, 54, - 358, 206, 339, 5, 341, 342, 343, 344, - 22, 347, 39, 44, 353, 354, 54, 358, - 206, 339, 5, 341, 342, 343, 344, 61, - 22, 347, 39, 44, 353, 354, 54, 358, - 206, 339, 5, 341, 342, 343, 344, 22, - 347, 39, 44, 353, 354, 54, 358, 206, - 339, 5, 341, 342, 343, 344, 22, 347, - 39, 44, 353, 354, 54, 358, 206, 339, - 5, 341, 342, 343, 344, 22, 347, 39, - 44, 353, 354, 54, 358, 206, 339, 5, - 341, 342, 343, 344, 22, 347, 39, 44, - 353, 354, 71, 358, 54, 342, 339, 342, - 206, 339, 5, 341, 342, 343, 344, 22, - 347, 39, 44, 353, 354, 54, 358, 92, - 206, 339, 5, 341, 342, 343, 344, 22, - 347, 39, 44, 353, 354, 54, 358, 206, - 374, 375, 463, 97, 115, 117, 120, 125, - 131, 134, 139, 142, 149, 152, 159, 163, - 165, 166, 409, 582, 410, 206, 374, 375, - 97, 409, 410, 206, 375, 97, 409, 410, - 206, 377, 378, 379, 403, 405, 107, 206, - 377, 378, 206, 378, 380, 386, 392, 206, - 378, 380, 381, 386, 392, 382, 383, 384, - 385, 387, 388, 389, 390, 391, 393, 398, - 399, 394, 395, 396, 397, 206, 378, 380, - 386, 392, 206, 378, 400, 386, 392, 401, - 402, 380, 206, 378, 403, 98, 405, 107, - 102, 206, 378, 403, 405, 107, 206, 378, - 113, 405, 107, 403, 206, 97, 409, 410, - 376, 411, 206, 379, 412, 414, 416, 440, - 446, 452, 206, 413, 412, 414, 415, 379, - 414, 379, 416, 417, 423, 429, 206, 414, - 417, 418, 423, 429, 419, 420, 421, 422, - 424, 425, 426, 427, 428, 430, 435, 436, - 431, 432, 433, 434, 206, 414, 417, 423, - 429, 206, 414, 437, 423, 429, 438, 439, - 417, 206, 414, 440, 441, 446, 452, 442, - 443, 444, 445, 447, 448, 449, 450, 451, - 453, 458, 459, 454, 455, 456, 457, 206, - 414, 440, 446, 452, 206, 414, 460, 446, - 452, 461, 462, 440, 464, 467, 471, 477, - 484, 488, 494, 498, 506, 510, 518, 523, - 526, 528, 465, 466, 206, 375, 97, 464, - 467, 471, 477, 484, 488, 494, 498, 506, - 510, 518, 523, 526, 528, 409, 410, 468, - 469, 470, 206, 375, 97, 464, 467, 471, - 477, 484, 488, 494, 498, 506, 510, 518, - 523, 526, 528, 409, 410, 472, 571, 473, - 474, 475, 476, 570, 206, 375, 97, 464, - 467, 471, 477, 484, 488, 494, 498, 506, - 510, 518, 523, 526, 528, 409, 410, 478, - 479, 480, 481, 482, 483, 206, 375, 97, - 464, 467, 471, 477, 484, 488, 494, 498, - 506, 510, 518, 523, 526, 528, 409, 410, - 485, 486, 487, 206, 375, 97, 464, 467, - 471, 477, 484, 488, 494, 498, 506, 510, - 518, 523, 526, 528, 409, 410, 489, 490, - 491, 492, 493, 206, 375, 97, 464, 467, - 471, 477, 484, 488, 494, 498, 506, 510, - 518, 523, 526, 528, 409, 410, 495, 567, - 496, 497, 566, 206, 375, 97, 464, 467, - 471, 477, 484, 488, 494, 498, 506, 510, - 518, 523, 526, 528, 409, 410, 499, 500, - 501, 502, 503, 504, 562, 505, 206, 375, - 97, 464, 467, 471, 477, 484, 488, 494, - 498, 506, 510, 518, 523, 526, 528, 409, - 410, 507, 508, 509, 206, 375, 97, 464, - 467, 471, 477, 484, 488, 494, 498, 506, - 510, 518, 523, 526, 528, 409, 410, 511, - 546, 516, 512, 539, 541, 513, 514, 515, - 517, 206, 375, 97, 464, 467, 471, 477, - 484, 488, 494, 498, 506, 510, 518, 523, - 526, 528, 409, 410, 519, 520, 521, 522, - 206, 375, 97, 464, 467, 471, 477, 484, - 488, 494, 498, 506, 510, 518, 523, 526, - 528, 409, 410, 524, 529, 536, 525, 206, - 375, 97, 464, 467, 471, 477, 484, 488, - 494, 498, 506, 510, 518, 523, 526, 528, - 409, 410, 527, 206, 375, 97, 464, 467, - 471, 477, 484, 488, 494, 498, 506, 510, - 518, 523, 526, 528, 409, 410, 530, 531, - 206, 375, 97, 464, 467, 471, 477, 484, - 488, 494, 498, 506, 510, 518, 523, 526, - 528, 409, 410, 532, 533, 534, 535, 206, - 375, 97, 464, 467, 471, 477, 484, 488, - 494, 498, 506, 510, 518, 523, 526, 528, - 409, 410, 537, 538, 206, 375, 97, 464, - 467, 471, 477, 484, 488, 494, 498, 506, - 510, 518, 523, 526, 528, 409, 410, 540, - 206, 375, 97, 464, 467, 471, 477, 484, - 488, 494, 498, 506, 510, 518, 523, 526, - 528, 409, 410, 206, 375, 97, 464, 467, - 471, 477, 484, 488, 494, 542, 506, 510, - 518, 523, 526, 528, 409, 410, 543, 544, - 545, 498, 547, 548, 549, 550, 551, 553, - 557, 552, 206, 375, 97, 464, 467, 471, - 477, 484, 488, 494, 498, 506, 510, 518, - 523, 526, 528, 409, 410, 554, 555, 556, - 206, 375, 97, 464, 467, 471, 477, 484, - 488, 494, 498, 506, 510, 518, 523, 526, - 528, 409, 410, 558, 559, 560, 561, 206, - 375, 97, 464, 467, 471, 477, 484, 488, - 494, 498, 506, 510, 518, 523, 526, 528, - 409, 410, 563, 564, 565, 206, 375, 97, - 464, 467, 471, 477, 484, 488, 494, 498, - 506, 510, 518, 523, 526, 528, 409, 410, - 206, 375, 97, 464, 467, 471, 477, 484, - 488, 494, 498, 506, 510, 518, 523, 526, - 528, 409, 410, 568, 569, 206, 375, 97, - 464, 467, 471, 477, 484, 488, 494, 498, - 506, 510, 518, 523, 526, 528, 409, 410, - 206, 375, 97, 464, 467, 471, 477, 484, - 488, 494, 498, 506, 510, 518, 523, 526, - 528, 409, 410, 572, 575, 573, 574, 206, - 375, 97, 464, 467, 471, 477, 484, 488, - 494, 498, 506, 510, 518, 523, 526, 528, - 409, 410, 576, 577, 578, 579, 580, 581, - 206, 375, 97, 464, 467, 471, 477, 484, - 488, 494, 498, 506, 510, 518, 523, 526, - 528, 409, 410, 611, 613, 616, 630, 636, - 639, 644, 649, 659, 662, 687, 691, 700, - 701, 206, 375, 97, 115, 117, 120, 125, - 131, 134, 139, 142, 149, 152, 159, 163, - 165, 166, 409, 410, 206, 375, 97, 115, - 117, 120, 125, 131, 134, 139, 142, 149, - 152, 159, 163, 165, 166, 409, 410, 206, - 375, 97, 115, 117, 120, 125, 131, 134, - 139, 142, 149, 152, 159, 163, 165, 166, - 409, 410, 206, 375, 97, 115, 117, 120, - 125, 131, 134, 139, 142, 149, 152, 159, - 163, 165, 166, 409, 410, 206, 375, 97, + 63, 362, 65, 66, 363, 364, 69, 365, + 366, 72, 73, 74, 75, 367, 368, 78, + 369, 80, 370, 82, 371, 84, 372, 86, + 87, 373, 90, 91, 374, 93, 94, 95, + 375, 376, 209, 379, 99, 100, 101, 407, + 103, 104, 105, 106, 108, 409, 410, 109, + 110, 111, 112, 114, 411, 116, 590, 118, + 119, 591, 121, 199, 122, 123, 124, 592, + 616, 126, 127, 128, 129, 130, 593, 132, + 133, 594, 135, 136, 137, 138, 595, 140, + 197, 141, 596, 614, 143, 144, 145, 146, + 147, 148, 194, 597, 150, 151, 598, 153, + 181, 158, 154, 177, 608, 155, 156, 157, + 599, 160, 161, 162, 600, 164, 167, 175, + 601, 602, 603, 168, 172, 169, 170, 171, + 604, 173, 174, 605, 176, 606, 607, 179, + 180, 609, 182, 183, 184, 185, 186, 187, + 190, 610, 188, 189, 611, 191, 192, 193, + 612, 195, 196, 613, 198, 615, 200, 202, + 201, 617, 203, 204, 205, 206, 207, 618, + 713, 209, 210, 1, 4, 96, 208, 209, + 211, 209, 211, 209, 212, 213, 209, 213, + 209, 215, 216, 342, 5, 344, 345, 346, + 347, 22, 350, 39, 44, 356, 357, 54, + 361, 209, 215, 217, 218, 232, 233, 234, + 235, 241, 254, 261, 268, 275, 276, 284, + 292, 209, 217, 218, 232, 233, 234, 235, + 241, 254, 261, 268, 275, 276, 284, 333, + 341, 219, 332, 220, 221, 222, 223, 224, + 225, 226, 328, 227, 228, 229, 230, 231, + 209, 217, 218, 232, 233, 234, 235, 241, + 254, 261, 268, 275, 276, 284, 292, 209, + 217, 218, 232, 233, 234, 235, 241, 254, + 261, 268, 275, 276, 284, 325, 292, 209, + 217, 218, 232, 233, 234, 235, 241, 254, + 261, 268, 275, 276, 284, 292, 316, 209, + 217, 218, 232, 233, 234, 235, 322, 241, + 254, 261, 268, 275, 276, 284, 292, 209, + 236, 218, 232, 319, 234, 235, 241, 254, + 261, 268, 275, 276, 284, 240, 292, 237, + 238, 239, 209, 217, 218, 232, 233, 234, + 235, 241, 254, 261, 268, 275, 276, 284, + 292, 242, 253, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 209, 217, 218, + 232, 233, 234, 235, 241, 254, 261, 268, + 275, 276, 284, 292, 209, 217, 218, 232, + 255, 234, 235, 241, 254, 261, 268, 275, + 276, 284, 292, 256, 257, 258, 259, 260, + 233, 262, 263, 209, 217, 218, 232, 233, + 234, 235, 264, 241, 254, 261, 268, 275, + 276, 284, 292, 265, 266, 267, 269, 270, + 209, 217, 218, 232, 233, 234, 235, 271, + 254, 261, 268, 275, 276, 284, 292, 272, + 273, 274, 241, 209, 217, 218, 232, 277, + 234, 235, 241, 254, 261, 268, 275, 276, + 284, 314, 292, 278, 209, 217, 218, 232, + 233, 234, 235, 279, 241, 254, 261, 268, + 275, 276, 284, 292, 280, 281, 282, 283, + 285, 297, 301, 291, 303, 306, 286, 287, + 288, 289, 290, 209, 217, 218, 232, 233, + 234, 235, 241, 254, 261, 268, 275, 276, + 284, 292, 209, 217, 218, 232, 233, 234, + 235, 293, 241, 254, 261, 268, 275, 276, + 284, 292, 294, 295, 296, 298, 299, 300, + 209, 217, 218, 232, 233, 234, 235, 241, + 254, 261, 268, 275, 276, 284, 292, 302, + 209, 217, 218, 232, 233, 234, 235, 241, + 254, 261, 268, 275, 276, 284, 292, 304, + 305, 209, 217, 218, 232, 233, 234, 235, + 241, 254, 261, 268, 275, 276, 284, 292, + 307, 209, 217, 218, 232, 233, 234, 235, + 241, 254, 261, 268, 275, 276, 308, 292, + 309, 310, 311, 312, 313, 284, 315, 233, + 317, 318, 320, 321, 217, 233, 323, 324, + 326, 327, 329, 330, 331, 209, 217, 218, + 232, 233, 234, 235, 241, 254, 261, 268, + 275, 276, 284, 292, 334, 335, 336, 337, + 338, 339, 340, 209, 217, 218, 232, 233, + 234, 235, 241, 254, 261, 268, 275, 276, + 284, 292, 209, 342, 5, 344, 345, 346, + 347, 22, 350, 39, 44, 356, 357, 54, + 89, 209, 342, 5, 344, 345, 346, 347, + 22, 350, 39, 44, 356, 357, 54, 361, + 209, 342, 5, 344, 345, 346, 347, 22, + 350, 39, 44, 356, 357, 54, 83, 361, + 209, 342, 5, 344, 345, 346, 347, 22, + 350, 39, 44, 356, 357, 54, 361, 77, + 209, 342, 5, 344, 345, 346, 347, 81, + 22, 350, 39, 44, 356, 357, 54, 361, + 209, 18, 5, 344, 79, 346, 347, 22, + 350, 39, 44, 356, 357, 54, 361, 209, + 342, 5, 344, 345, 346, 347, 22, 350, + 39, 44, 356, 357, 54, 361, 209, 342, + 5, 344, 345, 346, 347, 22, 350, 39, + 44, 356, 357, 54, 361, 209, 342, 5, + 344, 34, 346, 347, 22, 350, 39, 44, + 356, 357, 54, 361, 345, 209, 342, 5, + 344, 345, 346, 347, 41, 22, 350, 39, + 44, 356, 357, 54, 361, 209, 342, 5, + 344, 345, 346, 347, 46, 350, 39, 44, + 356, 357, 54, 361, 22, 209, 342, 5, + 344, 49, 346, 347, 22, 350, 39, 44, + 356, 357, 54, 76, 361, 209, 342, 5, + 344, 345, 346, 347, 50, 22, 350, 39, + 44, 356, 357, 54, 361, 209, 342, 5, + 344, 345, 346, 347, 22, 350, 39, 44, + 356, 357, 54, 361, 209, 342, 5, 344, + 345, 346, 347, 61, 22, 350, 39, 44, + 356, 357, 54, 361, 209, 342, 5, 344, + 345, 346, 347, 22, 350, 39, 44, 356, + 357, 54, 361, 209, 342, 5, 344, 345, + 346, 347, 22, 350, 39, 44, 356, 357, + 54, 361, 209, 342, 5, 344, 345, 346, + 347, 22, 350, 39, 44, 356, 357, 54, + 361, 209, 342, 5, 344, 345, 346, 347, + 22, 350, 39, 44, 356, 357, 71, 361, + 54, 345, 342, 345, 209, 342, 5, 344, + 345, 346, 347, 22, 350, 39, 44, 356, + 357, 54, 361, 92, 209, 342, 5, 344, + 345, 346, 347, 22, 350, 39, 44, 356, + 357, 54, 361, 209, 377, 378, 466, 97, 115, 117, 120, 125, 131, 134, 139, 142, - 149, 152, 159, 163, 165, 166, 409, 410, - 206, 375, 97, 115, 117, 120, 125, 131, - 134, 139, 142, 149, 152, 159, 163, 165, - 166, 409, 410, 206, 375, 97, 115, 117, - 120, 125, 131, 134, 139, 142, 149, 152, - 159, 163, 165, 166, 409, 410, 206, 375, - 97, 115, 117, 120, 125, 131, 134, 139, - 142, 149, 152, 159, 163, 165, 166, 409, - 410, 206, 375, 97, 115, 117, 120, 125, - 131, 134, 139, 142, 149, 152, 159, 163, - 165, 166, 409, 410, 206, 375, 97, 115, + 149, 152, 159, 163, 165, 166, 412, 589, + 413, 209, 377, 378, 97, 412, 413, 209, + 378, 97, 412, 413, 209, 380, 381, 382, + 406, 408, 107, 209, 380, 381, 209, 381, + 383, 389, 395, 209, 381, 383, 384, 389, + 395, 385, 386, 387, 388, 390, 391, 392, + 393, 394, 396, 401, 402, 397, 398, 399, + 400, 209, 381, 383, 389, 395, 209, 381, + 403, 389, 395, 404, 405, 383, 209, 381, + 406, 98, 408, 107, 102, 209, 381, 406, + 408, 107, 209, 381, 113, 408, 107, 406, + 209, 97, 412, 413, 379, 414, 209, 382, + 415, 417, 419, 443, 449, 455, 209, 416, + 415, 417, 418, 382, 417, 382, 419, 420, + 426, 432, 209, 417, 420, 421, 426, 432, + 422, 423, 424, 425, 427, 428, 429, 430, + 431, 433, 438, 439, 434, 435, 436, 437, + 209, 417, 420, 426, 432, 209, 417, 440, + 426, 432, 441, 442, 420, 209, 417, 443, + 444, 449, 455, 445, 446, 447, 448, 450, + 451, 452, 453, 454, 456, 461, 462, 457, + 458, 459, 460, 209, 417, 443, 449, 455, + 209, 417, 463, 449, 455, 464, 465, 443, + 467, 470, 474, 480, 487, 491, 497, 501, + 509, 513, 521, 526, 529, 531, 468, 469, + 209, 378, 97, 467, 470, 474, 480, 487, + 491, 497, 501, 509, 513, 521, 526, 529, + 531, 412, 413, 471, 472, 473, 209, 378, + 97, 467, 470, 474, 480, 487, 491, 497, + 501, 509, 513, 521, 526, 529, 531, 412, + 413, 475, 578, 476, 477, 478, 479, 577, + 209, 378, 97, 467, 470, 474, 480, 487, + 491, 497, 501, 509, 513, 521, 526, 529, + 531, 412, 413, 481, 482, 483, 484, 485, + 486, 209, 378, 97, 467, 470, 474, 480, + 487, 491, 497, 501, 509, 513, 521, 526, + 529, 531, 412, 413, 488, 489, 490, 209, + 378, 97, 467, 470, 474, 480, 487, 491, + 497, 501, 509, 513, 521, 526, 529, 531, + 412, 413, 492, 493, 494, 495, 496, 209, + 378, 97, 467, 470, 474, 480, 487, 491, + 497, 501, 509, 513, 521, 526, 529, 531, + 412, 413, 498, 574, 499, 500, 573, 209, + 378, 97, 467, 470, 474, 480, 487, 491, + 497, 501, 509, 513, 521, 526, 529, 531, + 412, 413, 502, 503, 504, 505, 506, 507, + 569, 508, 209, 378, 97, 467, 470, 474, + 480, 487, 491, 497, 501, 509, 513, 521, + 526, 529, 531, 412, 413, 510, 511, 512, + 209, 378, 97, 467, 470, 474, 480, 487, + 491, 497, 501, 509, 513, 521, 526, 529, + 531, 412, 413, 514, 553, 519, 515, 546, + 548, 516, 517, 518, 520, 209, 378, 97, + 467, 470, 474, 480, 487, 491, 497, 501, + 509, 513, 521, 526, 529, 531, 412, 413, + 522, 523, 524, 525, 209, 378, 97, 467, + 470, 474, 480, 487, 491, 497, 501, 509, + 513, 521, 526, 529, 531, 412, 413, 527, + 532, 543, 528, 209, 378, 97, 467, 470, + 474, 480, 487, 491, 497, 501, 509, 513, + 521, 526, 529, 531, 412, 413, 530, 209, + 378, 97, 467, 470, 474, 480, 487, 491, + 497, 501, 509, 513, 521, 526, 529, 531, + 412, 413, 533, 534, 539, 209, 378, 97, + 467, 470, 474, 480, 487, 491, 497, 501, + 509, 513, 521, 526, 529, 531, 412, 413, + 535, 536, 537, 538, 209, 378, 97, 467, + 470, 474, 480, 487, 491, 497, 501, 509, + 513, 521, 526, 529, 531, 412, 413, 540, + 541, 542, 209, 378, 97, 467, 470, 474, + 480, 487, 491, 497, 501, 509, 513, 521, + 526, 529, 531, 412, 413, 544, 545, 209, + 378, 97, 467, 470, 474, 480, 487, 491, + 497, 501, 509, 513, 521, 526, 529, 531, + 412, 413, 547, 209, 378, 97, 467, 470, + 474, 480, 487, 491, 497, 501, 509, 513, + 521, 526, 529, 531, 412, 413, 209, 378, + 97, 467, 470, 474, 480, 487, 491, 497, + 549, 509, 513, 521, 526, 529, 531, 412, + 413, 550, 551, 552, 501, 554, 555, 556, + 557, 558, 560, 564, 559, 209, 378, 97, + 467, 470, 474, 480, 487, 491, 497, 501, + 509, 513, 521, 526, 529, 531, 412, 413, + 561, 562, 563, 209, 378, 97, 467, 470, + 474, 480, 487, 491, 497, 501, 509, 513, + 521, 526, 529, 531, 412, 413, 565, 566, + 567, 568, 209, 378, 97, 467, 470, 474, + 480, 487, 491, 497, 501, 509, 513, 521, + 526, 529, 531, 412, 413, 570, 571, 572, + 209, 378, 97, 467, 470, 474, 480, 487, + 491, 497, 501, 509, 513, 521, 526, 529, + 531, 412, 413, 209, 378, 97, 467, 470, + 474, 480, 487, 491, 497, 501, 509, 513, + 521, 526, 529, 531, 412, 413, 575, 576, + 209, 378, 97, 467, 470, 474, 480, 487, + 491, 497, 501, 509, 513, 521, 526, 529, + 531, 412, 413, 209, 378, 97, 467, 470, + 474, 480, 487, 491, 497, 501, 509, 513, + 521, 526, 529, 531, 412, 413, 579, 582, + 580, 581, 209, 378, 97, 467, 470, 474, + 480, 487, 491, 497, 501, 509, 513, 521, + 526, 529, 531, 412, 413, 583, 584, 585, + 586, 587, 588, 209, 378, 97, 467, 470, + 474, 480, 487, 491, 497, 501, 509, 513, + 521, 526, 529, 531, 412, 413, 619, 621, + 624, 638, 644, 647, 652, 657, 667, 670, + 695, 699, 711, 712, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, - 152, 159, 163, 165, 166, 409, 410, 206, - 375, 97, 115, 117, 120, 125, 131, 134, + 152, 159, 163, 165, 166, 412, 413, 209, + 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, 152, 159, 163, 165, 166, - 409, 410, 206, 375, 97, 115, 117, 120, + 412, 413, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, 152, 159, - 163, 165, 166, 409, 410, 206, 375, 97, + 163, 165, 166, 412, 413, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, - 149, 152, 159, 163, 165, 166, 409, 410, - 206, 375, 97, 115, 117, 120, 125, 131, + 149, 152, 159, 163, 165, 166, 412, 413, + 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, 152, 159, 163, 165, - 166, 409, 410, 206, 375, 97, 115, 117, + 166, 412, 413, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, 152, - 159, 163, 165, 166, 409, 410, 206, 375, + 159, 163, 165, 166, 412, 413, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, - 142, 149, 152, 159, 163, 165, 166, 409, - 410, 206, 375, 97, 115, 117, 120, 125, + 142, 149, 152, 159, 163, 165, 166, 412, + 413, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, 152, 159, 163, - 165, 166, 409, 410, 206, 375, 97, 115, - 117, 120, 125, 131, 134, 139, 175, 149, - 152, 159, 163, 165, 166, 409, 410, 142, - 206, 375, 97, 115, 117, 120, 125, 131, - 134, 139, 142, 149, 152, 159, 163, 165, - 166, 409, 410, 206, 375, 97, 115, 117, - 120, 125, 131, 134, 139, 142, 149, 152, - 159, 163, 165, 166, 409, 410, 206, 375, - 97, 115, 117, 120, 125, 131, 134, 139, - 142, 149, 152, 159, 163, 165, 166, 409, - 410, 206, 375, 97, 115, 117, 120, 125, - 131, 134, 139, 142, 149, 152, 159, 163, - 165, 166, 409, 410, 206, 375, 97, 115, + 165, 166, 412, 413, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, - 152, 159, 163, 165, 166, 409, 410, 206, - 375, 97, 115, 117, 120, 125, 131, 134, + 152, 159, 163, 165, 166, 412, 413, 209, + 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, 152, 159, 163, 165, 166, - 409, 410, 206, 375, 97, 115, 117, 120, + 412, 413, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, 152, 159, - 163, 165, 166, 409, 410, 206, 375, 97, + 163, 165, 166, 412, 413, 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, - 149, 152, 159, 163, 165, 166, 409, 410, - 206, 375, 97, 115, 117, 120, 125, 131, + 149, 152, 159, 163, 165, 166, 412, 413, + 209, 378, 97, 115, 117, 120, 125, 131, 134, 139, 142, 149, 152, 159, 163, 165, - 166, 409, 410, 612, 614, 615, 617, 621, - 618, 619, 620, 622, 624, 623, 625, 626, - 627, 628, 629, 631, 632, 633, 634, 635, - 637, 638, 640, 641, 642, 643, 645, 647, - 646, 648, 650, 651, 652, 653, 654, 655, - 656, 657, 658, 660, 661, 663, 674, 668, - 664, 669, 670, 665, 666, 667, 671, 672, - 673, 675, 676, 677, 678, 679, 680, 683, - 681, 682, 684, 685, 686, 688, 689, 690, - 692, 693, 698, 694, 695, 696, 697, 699, - 206, 703, 206, 704, 206, 206, 704 + 166, 412, 413, 209, 378, 97, 115, 117, + 120, 125, 131, 134, 139, 142, 149, 152, + 159, 163, 165, 166, 412, 413, 209, 378, + 97, 115, 117, 120, 125, 131, 134, 139, + 142, 149, 152, 159, 163, 165, 166, 412, + 413, 209, 378, 97, 115, 117, 120, 125, + 131, 134, 139, 142, 149, 152, 159, 163, + 165, 166, 412, 413, 209, 378, 97, 115, + 117, 120, 125, 131, 134, 139, 142, 149, + 152, 159, 163, 165, 166, 412, 413, 209, + 378, 97, 115, 117, 120, 125, 131, 134, + 139, 142, 149, 152, 159, 163, 165, 166, + 412, 413, 209, 378, 97, 115, 117, 120, + 125, 131, 134, 139, 178, 149, 152, 159, + 163, 165, 166, 412, 413, 142, 209, 378, + 97, 115, 117, 120, 125, 131, 134, 139, + 142, 149, 152, 159, 163, 165, 166, 412, + 413, 209, 378, 97, 115, 117, 120, 125, + 131, 134, 139, 142, 149, 152, 159, 163, + 165, 166, 412, 413, 209, 378, 97, 115, + 117, 120, 125, 131, 134, 139, 142, 149, + 152, 159, 163, 165, 166, 412, 413, 209, + 378, 97, 115, 117, 120, 125, 131, 134, + 139, 142, 149, 152, 159, 163, 165, 166, + 412, 413, 209, 378, 97, 115, 117, 120, + 125, 131, 134, 139, 142, 149, 152, 159, + 163, 165, 166, 412, 413, 209, 378, 97, + 115, 117, 120, 125, 131, 134, 139, 142, + 149, 152, 159, 163, 165, 166, 412, 413, + 209, 378, 97, 115, 117, 120, 125, 131, + 134, 139, 142, 149, 152, 159, 163, 165, + 166, 412, 413, 209, 378, 97, 115, 117, + 120, 125, 131, 134, 139, 142, 149, 152, + 159, 163, 165, 166, 412, 413, 209, 378, + 97, 115, 117, 120, 125, 131, 134, 139, + 142, 149, 152, 159, 163, 165, 166, 412, + 413, 620, 622, 623, 625, 629, 626, 627, + 628, 630, 632, 631, 633, 634, 635, 636, + 637, 639, 640, 641, 642, 643, 645, 646, + 648, 649, 650, 651, 653, 655, 654, 656, + 658, 659, 660, 661, 662, 663, 664, 665, + 666, 668, 669, 671, 682, 676, 672, 677, + 678, 673, 674, 675, 679, 680, 681, 683, + 684, 685, 686, 687, 688, 691, 689, 690, + 692, 693, 694, 696, 697, 698, 700, 701, + 709, 702, 706, 703, 704, 705, 707, 708, + 710, 209, 714, 209, 715, 209, 209, 715 }; static const short _demo_machine_parser_cmd_trans_actions[] = { - 0, 0, 410, 144, 144, 5, 0, 115, - 119, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 115, - 0, 0, 0, 115, 0, 115, 0, 0, + 0, 0, 415, 146, 146, 5, 0, 117, + 121, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, + 0, 0, 0, 117, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 115, 0, 115, 0, - 0, 115, 0, 115, 0, 0, 115, 115, - 0, 0, 0, 115, 0, 0, 0, 115, + 0, 0, 0, 0, 117, 0, 117, 0, + 0, 117, 0, 117, 0, 0, 117, 117, + 0, 0, 0, 117, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 115, 0, 0, 115, 115, 0, 115, - 115, 0, 0, 0, 0, 115, 115, 0, - 115, 0, 115, 0, 115, 0, 115, 0, - 0, 115, 0, 0, 115, 0, 0, 0, - 115, 115, 121, 115, 0, 0, 0, 115, - 0, 0, 0, 0, 0, 115, 115, 0, - 0, 0, 0, 0, 115, 0, 115, 0, - 0, 115, 0, 0, 0, 0, 0, 115, - 115, 0, 0, 0, 0, 0, 115, 0, - 0, 115, 0, 0, 0, 0, 115, 0, - 0, 0, 115, 115, 0, 0, 0, 0, - 0, 0, 0, 115, 0, 0, 115, 0, - 0, 0, 0, 0, 115, 0, 0, 0, - 115, 0, 0, 0, 115, 0, 0, 0, - 115, 115, 115, 0, 0, 0, 0, 115, - 0, 115, 115, 0, 0, 115, 0, 0, - 0, 0, 0, 0, 0, 115, 0, 0, - 115, 0, 0, 0, 115, 0, 0, 115, - 0, 115, 0, 0, 0, 115, 0, 0, - 0, 0, 0, 115, 0, 117, 0, 0, - 0, 0, 0, 398, 1, 147, 0, 875, - 0, 1, 414, 0, 402, 1, 1, 115, - 0, 115, 115, 115, 115, 0, 115, 0, - 0, 115, 115, 0, 115, 150, 0, 0, + 0, 117, 0, 0, 117, 117, 0, 117, + 117, 0, 0, 0, 0, 117, 117, 0, + 117, 0, 117, 0, 117, 0, 117, 0, + 0, 117, 0, 0, 117, 0, 0, 0, + 117, 117, 123, 117, 0, 0, 0, 117, + 0, 0, 0, 0, 0, 117, 117, 0, + 0, 0, 0, 0, 117, 0, 117, 0, + 0, 117, 0, 0, 0, 0, 0, 117, + 117, 0, 0, 0, 0, 0, 117, 0, + 0, 117, 0, 0, 0, 0, 117, 0, + 0, 0, 117, 117, 0, 0, 0, 0, + 0, 0, 0, 117, 0, 0, 117, 0, + 0, 0, 0, 0, 117, 0, 0, 0, + 117, 0, 0, 0, 117, 0, 0, 0, + 117, 117, 117, 0, 0, 0, 0, 0, + 117, 0, 0, 117, 0, 117, 117, 0, + 0, 117, 0, 0, 0, 0, 0, 0, + 0, 117, 0, 0, 117, 0, 0, 0, + 117, 0, 0, 117, 0, 117, 0, 0, + 0, 117, 0, 0, 0, 0, 0, 117, + 0, 119, 0, 0, 0, 0, 0, 403, + 1, 149, 0, 892, 0, 1, 419, 0, + 407, 1, 1, 117, 0, 117, 117, 117, + 117, 0, 117, 0, 0, 117, 117, 0, + 117, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 426, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, + 0, 431, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 434, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 442, 17, 17, 17, 17, + 0, 0, 0, 0, 0, 0, 0, 0, + 439, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 447, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 0, 17, 446, 19, 19, 19, 19, + 17, 17, 17, 17, 17, 0, 17, 451, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 0, 450, 21, 21, 21, 21, - 21, 21, 0, 21, 21, 21, 21, 21, - 21, 21, 21, 458, 0, 25, 25, 0, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 0, 25, 0, 0, 0, 454, 23, + 19, 19, 19, 19, 19, 19, 0, 455, + 21, 21, 21, 21, 21, 21, 0, 21, + 21, 21, 21, 21, 21, 21, 21, 463, + 0, 25, 25, 0, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 0, 25, 0, + 0, 0, 459, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 462, 27, 27, 27, 27, 27, 27, + 23, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 467, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 466, 29, 29, 29, 0, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 0, - 0, 0, 0, 0, 29, 0, 0, 470, - 31, 31, 31, 31, 31, 31, 0, 31, - 31, 31, 31, 31, 31, 31, 31, 0, - 0, 0, 0, 0, 474, 33, 33, 33, - 33, 33, 33, 0, 33, 33, 33, 33, - 33, 33, 33, 0, 0, 0, 33, 482, - 37, 37, 37, 0, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 0, 37, 0, - 478, 35, 35, 35, 35, 35, 35, 0, - 35, 35, 35, 35, 35, 35, 35, 35, + 27, 27, 27, 27, 471, 29, 29, 29, + 0, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 0, 0, 0, 0, 0, + 29, 0, 0, 475, 31, 31, 31, 31, + 31, 31, 0, 31, 31, 31, 31, 31, + 31, 31, 31, 0, 0, 0, 0, 0, + 479, 33, 33, 33, 33, 33, 33, 0, + 33, 33, 33, 33, 33, 33, 33, 0, + 0, 0, 33, 487, 37, 37, 37, 0, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 0, 37, 0, 483, 35, 35, 35, + 35, 35, 35, 0, 35, 35, 35, 35, + 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 486, + 0, 0, 0, 491, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 506, 49, - 49, 49, 49, 49, 49, 0, 49, 49, - 49, 49, 49, 49, 49, 49, 0, 0, - 0, 0, 0, 0, 490, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 0, 494, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 0, 0, 498, 45, 45, + 39, 39, 511, 49, 49, 49, 49, 49, + 49, 0, 49, 49, 49, 49, 49, 49, + 49, 49, 0, 0, 0, 0, 0, 0, + 495, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 0, + 499, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 0, + 0, 503, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 0, 502, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 0, 0, 0, 0, - 0, 47, 0, 37, 0, 0, 0, 0, - 25, 25, 0, 0, 0, 0, 0, 0, - 0, 438, 15, 15, 15, 15, 15, 15, + 0, 507, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 47, + 0, 0, 0, 0, 0, 47, 0, 37, + 0, 0, 0, 0, 25, 25, 0, 0, + 0, 0, 0, 0, 0, 443, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 0, 0, 0, 0, 0, 0, 0, 430, + 15, 15, 15, 15, 0, 0, 0, 0, + 0, 0, 0, 435, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 153, 237, - 9, 237, 237, 237, 237, 9, 237, 9, - 9, 237, 237, 9, 0, 159, 243, 13, - 243, 243, 243, 243, 13, 243, 13, 13, - 243, 243, 13, 243, 165, 249, 17, 249, - 249, 249, 249, 17, 249, 17, 17, 249, - 249, 17, 0, 249, 168, 252, 19, 252, - 252, 252, 252, 19, 252, 19, 19, 252, - 252, 19, 252, 0, 171, 255, 21, 255, - 255, 255, 255, 0, 21, 255, 21, 21, - 255, 255, 21, 255, 177, 0, 25, 261, - 0, 261, 261, 25, 261, 25, 25, 261, - 261, 25, 261, 174, 258, 23, 258, 258, - 258, 258, 23, 258, 23, 23, 258, 258, - 23, 258, 180, 264, 27, 264, 264, 264, - 264, 27, 264, 27, 27, 264, 264, 27, - 264, 183, 267, 29, 267, 0, 267, 267, - 29, 267, 29, 29, 267, 267, 29, 267, - 267, 186, 270, 31, 270, 270, 270, 270, - 0, 31, 270, 31, 31, 270, 270, 31, - 270, 189, 273, 33, 273, 273, 273, 273, - 0, 273, 33, 33, 273, 273, 33, 273, - 33, 195, 279, 37, 279, 0, 279, 279, - 37, 279, 37, 37, 279, 279, 37, 0, - 279, 192, 276, 35, 276, 276, 276, 276, - 0, 35, 276, 35, 35, 276, 276, 35, - 276, 198, 282, 39, 282, 282, 282, 282, - 39, 282, 39, 39, 282, 282, 39, 282, - 213, 297, 49, 297, 297, 297, 297, 0, - 49, 297, 49, 49, 297, 297, 49, 297, - 201, 285, 41, 285, 285, 285, 285, 41, - 285, 41, 41, 285, 285, 41, 285, 204, - 288, 43, 288, 288, 288, 288, 43, 288, - 43, 43, 288, 288, 43, 288, 207, 291, - 45, 291, 291, 291, 291, 45, 291, 45, - 45, 291, 291, 45, 291, 210, 294, 47, - 294, 294, 294, 294, 47, 294, 47, 47, - 294, 294, 0, 294, 47, 279, 261, 261, - 162, 246, 15, 246, 246, 246, 246, 15, - 246, 15, 15, 246, 246, 15, 246, 0, - 156, 240, 11, 240, 240, 240, 240, 11, - 240, 11, 11, 240, 240, 11, 240, 1392, - 634, 1060, 634, 885, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 1060, 1060, 885, 1224, 115, 231, - 418, 638, 418, 870, 115, 123, 225, 123, - 880, 1, 126, 1, 115, 115, 0, 422, - 0, 7, 132, 0, 0, 0, 0, 1055, - 222, 109, 0, 109, 109, 0, 0, 0, + 11, 11, 155, 239, 9, 239, 239, 239, + 239, 9, 239, 9, 9, 239, 239, 9, + 0, 161, 245, 13, 245, 245, 245, 245, + 13, 245, 13, 13, 245, 245, 13, 245, + 167, 251, 17, 251, 251, 251, 251, 17, + 251, 17, 17, 251, 251, 17, 0, 251, + 170, 254, 19, 254, 254, 254, 254, 19, + 254, 19, 19, 254, 254, 19, 254, 0, + 173, 257, 21, 257, 257, 257, 257, 0, + 21, 257, 21, 21, 257, 257, 21, 257, + 179, 0, 25, 263, 0, 263, 263, 25, + 263, 25, 25, 263, 263, 25, 263, 176, + 260, 23, 260, 260, 260, 260, 23, 260, + 23, 23, 260, 260, 23, 260, 182, 266, + 27, 266, 266, 266, 266, 27, 266, 27, + 27, 266, 266, 27, 266, 185, 269, 29, + 269, 0, 269, 269, 29, 269, 29, 29, + 269, 269, 29, 269, 269, 188, 272, 31, + 272, 272, 272, 272, 0, 31, 272, 31, + 31, 272, 272, 31, 272, 191, 275, 33, + 275, 275, 275, 275, 0, 275, 33, 33, + 275, 275, 33, 275, 33, 197, 281, 37, + 281, 0, 281, 281, 37, 281, 37, 37, + 281, 281, 37, 0, 281, 194, 278, 35, + 278, 278, 278, 278, 0, 35, 278, 35, + 35, 278, 278, 35, 278, 200, 284, 39, + 284, 284, 284, 284, 39, 284, 39, 39, + 284, 284, 39, 284, 215, 299, 49, 299, + 299, 299, 299, 0, 49, 299, 49, 49, + 299, 299, 49, 299, 203, 287, 41, 287, + 287, 287, 287, 41, 287, 41, 41, 287, + 287, 41, 287, 206, 290, 43, 290, 290, + 290, 290, 43, 290, 43, 43, 290, 290, + 43, 290, 209, 293, 45, 293, 293, 293, + 293, 45, 293, 45, 45, 293, 293, 45, + 293, 212, 296, 47, 296, 296, 296, 296, + 47, 296, 47, 47, 296, 296, 0, 296, + 47, 281, 263, 263, 164, 248, 15, 248, + 248, 248, 248, 15, 248, 15, 15, 248, + 248, 15, 248, 0, 158, 242, 11, 242, + 242, 242, 242, 11, 242, 11, 11, 242, + 242, 11, 242, 1425, 643, 1082, 643, 902, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 1082, 1082, + 902, 1251, 117, 233, 423, 647, 423, 887, + 117, 125, 227, 125, 897, 1, 128, 1, + 117, 117, 0, 427, 0, 7, 134, 0, + 0, 0, 0, 1077, 224, 111, 0, 111, + 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1050, 219, 107, - 107, 107, 1045, 216, 0, 105, 105, 0, - 0, 105, 626, 109, 387, 0, 387, 109, - 0, 622, 107, 384, 384, 107, 618, 105, - 0, 381, 105, 381, 406, 3, 115, 3, - 228, 228, 1200, 135, 1, 630, 135, 115, - 115, 115, 890, 3, 0, 234, 3, 0, - 115, 3, 3, 0, 0, 0, 1218, 866, - 109, 0, 109, 109, 0, 0, 0, 0, + 0, 1072, 221, 109, 109, 109, 1067, 218, + 0, 107, 107, 0, 0, 107, 635, 111, + 392, 0, 392, 111, 0, 631, 109, 389, + 389, 109, 627, 107, 0, 386, 107, 386, + 411, 3, 117, 3, 230, 230, 1227, 137, + 1, 639, 137, 117, 117, 117, 907, 3, + 0, 236, 3, 0, 117, 3, 3, 0, + 0, 0, 1245, 883, 111, 0, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1212, 862, 107, 107, - 107, 1206, 858, 0, 105, 105, 0, 0, - 105, 905, 387, 387, 115, 387, 387, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 900, - 384, 384, 384, 384, 895, 381, 115, 381, - 381, 115, 115, 381, 634, 634, 634, 634, - 634, 634, 634, 634, 634, 634, 634, 634, - 634, 634, 115, 115, 1399, 646, 910, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 1065, 910, 115, - 115, 115, 1406, 654, 915, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 1070, 915, 115, 115, 115, - 115, 115, 115, 115, 1413, 662, 920, 306, - 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 1075, 920, 115, - 115, 115, 115, 115, 115, 1441, 694, 940, - 318, 318, 318, 318, 318, 318, 318, 318, - 318, 318, 318, 318, 318, 318, 1095, 940, - 115, 115, 115, 1448, 702, 945, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 1100, 945, 115, 115, - 115, 115, 115, 1455, 710, 950, 324, 324, - 324, 324, 324, 324, 324, 324, 324, 324, - 324, 324, 324, 324, 1105, 950, 115, 115, - 115, 115, 115, 1462, 718, 955, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 1110, 955, 115, 115, - 115, 115, 115, 115, 115, 115, 1483, 742, - 970, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 1125, - 970, 115, 115, 115, 1497, 758, 980, 342, - 342, 342, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 1135, 980, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 1504, 766, 985, 345, 345, 345, 345, - 345, 345, 345, 345, 345, 345, 345, 345, - 345, 345, 1140, 985, 115, 115, 115, 115, - 1546, 814, 1015, 363, 363, 363, 363, 363, - 363, 363, 363, 363, 363, 363, 363, 363, - 363, 1170, 1015, 115, 115, 115, 115, 1553, - 822, 1020, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, - 1175, 1020, 115, 1581, 854, 1040, 378, 378, - 378, 378, 378, 378, 378, 378, 378, 378, - 378, 378, 378, 378, 1195, 1040, 115, 115, - 1560, 830, 1025, 369, 369, 369, 369, 369, - 369, 369, 369, 369, 369, 369, 369, 369, - 369, 1180, 1025, 115, 115, 115, 115, 1567, - 838, 1030, 372, 372, 372, 372, 372, 372, - 372, 372, 372, 372, 372, 372, 372, 372, - 1185, 1030, 115, 115, 1574, 846, 1035, 375, - 375, 375, 375, 375, 375, 375, 375, 375, - 375, 375, 375, 375, 375, 1190, 1035, 115, - 1511, 774, 990, 348, 348, 348, 348, 348, - 348, 348, 348, 348, 348, 348, 348, 348, - 348, 1145, 990, 1518, 782, 995, 351, 351, - 351, 351, 351, 351, 351, 115, 351, 351, - 351, 351, 351, 351, 1150, 995, 115, 115, - 115, 351, 115, 115, 115, 115, 115, 115, - 115, 115, 1525, 790, 1000, 354, 354, 354, - 354, 354, 354, 354, 354, 354, 354, 354, - 354, 354, 354, 1155, 1000, 115, 115, 115, - 1532, 798, 1005, 357, 357, 357, 357, 357, - 357, 357, 357, 357, 357, 357, 357, 357, - 357, 1160, 1005, 115, 115, 115, 115, 1539, - 806, 1010, 360, 360, 360, 360, 360, 360, - 360, 360, 360, 360, 360, 360, 360, 360, - 1165, 1010, 115, 115, 115, 1490, 750, 975, - 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 1130, 975, - 1469, 726, 960, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, - 330, 1115, 960, 115, 115, 1476, 734, 965, - 333, 333, 333, 333, 333, 333, 333, 333, - 333, 333, 333, 333, 333, 333, 1120, 965, - 1420, 670, 925, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 1080, 925, 115, 115, 115, 115, 1427, - 678, 930, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 1085, 930, 115, 115, 115, 115, 115, 115, - 1434, 686, 935, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, - 315, 1090, 935, 634, 634, 634, 634, 634, - 634, 634, 634, 634, 634, 634, 634, 634, - 634, 1230, 300, 510, 51, 51, 51, 51, + 0, 0, 0, 0, 0, 0, 0, 0, + 1239, 879, 109, 109, 109, 1233, 875, 0, + 107, 107, 0, 0, 107, 922, 392, 392, + 117, 392, 392, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 917, 389, 389, 389, 389, + 912, 386, 117, 386, 386, 117, 117, 386, + 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 117, 117, + 1432, 655, 927, 302, 302, 302, 302, 302, + 302, 302, 302, 302, 302, 302, 302, 302, + 302, 1087, 927, 117, 117, 117, 1439, 663, + 932, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 1092, + 932, 117, 117, 117, 117, 117, 117, 117, + 1446, 671, 937, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 1097, 937, 117, 117, 117, 117, 117, + 117, 1474, 703, 957, 320, 320, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, + 320, 320, 1117, 957, 117, 117, 117, 1481, + 711, 962, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, + 1122, 962, 117, 117, 117, 117, 117, 1488, + 719, 967, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, + 1127, 967, 117, 117, 117, 117, 117, 1495, + 727, 972, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, + 1132, 972, 117, 117, 117, 117, 117, 117, + 117, 117, 1516, 751, 987, 338, 338, 338, + 338, 338, 338, 338, 338, 338, 338, 338, + 338, 338, 338, 1147, 987, 117, 117, 117, + 1530, 767, 997, 344, 344, 344, 344, 344, + 344, 344, 344, 344, 344, 344, 344, 344, + 344, 1157, 997, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 1537, 775, 1002, + 347, 347, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 1162, 1002, + 117, 117, 117, 117, 1579, 823, 1032, 365, + 365, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 1192, 1032, 117, + 117, 117, 117, 1586, 831, 1037, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 1197, 1037, 117, 1621, + 871, 1062, 383, 383, 383, 383, 383, 383, + 383, 383, 383, 383, 383, 383, 383, 383, + 1222, 1062, 117, 117, 117, 1593, 839, 1042, + 371, 371, 371, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 371, 371, 1202, 1042, + 117, 117, 117, 117, 1600, 847, 1047, 374, + 374, 374, 374, 374, 374, 374, 374, 374, + 374, 374, 374, 374, 374, 1207, 1047, 117, + 117, 117, 1607, 855, 1052, 377, 377, 377, + 377, 377, 377, 377, 377, 377, 377, 377, + 377, 377, 377, 1212, 1052, 117, 117, 1614, + 863, 1057, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 1217, 1057, 117, 1544, 783, 1007, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 1167, 1007, 1551, 791, + 1012, 353, 353, 353, 353, 353, 353, 353, + 117, 353, 353, 353, 353, 353, 353, 1172, + 1012, 117, 117, 117, 353, 117, 117, 117, + 117, 117, 117, 117, 117, 1558, 799, 1017, + 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 1177, 1017, + 117, 117, 117, 1565, 807, 1022, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 1182, 1022, 117, 117, + 117, 117, 1572, 815, 1027, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 1187, 1027, 117, 117, 117, + 1523, 759, 992, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, + 341, 1152, 992, 1502, 735, 977, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 1137, 977, 117, 117, + 1509, 743, 982, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, + 335, 1142, 982, 1453, 679, 942, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 1102, 942, 117, 117, + 117, 117, 1460, 687, 947, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 1107, 947, 117, 117, 117, + 117, 117, 117, 1467, 695, 952, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 1112, 952, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 1257, 302, 515, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 642, 510, 1236, 303, 514, 53, + 51, 51, 51, 51, 51, 651, 515, 1263, + 305, 519, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 650, 514, 1242, - 306, 518, 55, 55, 55, 55, 55, 55, + 659, 519, 1269, 308, 523, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 658, 518, 1266, 318, 534, 63, 63, 63, + 55, 55, 55, 667, 523, 1293, 320, 539, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 690, 534, 1272, 321, 538, + 63, 63, 63, 63, 63, 63, 699, 539, + 1299, 323, 543, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 698, 538, - 1278, 324, 542, 67, 67, 67, 67, 67, + 65, 707, 543, 1305, 326, 547, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 706, 542, 1284, 327, 546, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 714, 546, 1302, 336, - 558, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 738, - 558, 1314, 342, 566, 79, 79, 79, 79, + 67, 67, 67, 67, 715, 547, 1311, 329, + 551, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 723, + 551, 1329, 338, 563, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 747, 563, 1341, 344, 571, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 754, 566, 1320, 345, 570, 81, + 79, 79, 79, 79, 79, 763, 571, 1347, + 347, 575, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 762, 570, 1356, - 363, 594, 93, 93, 93, 93, 93, 93, + 771, 575, 1383, 365, 599, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 810, 594, 1362, 366, 598, 95, 95, 95, + 93, 93, 93, 819, 599, 1389, 368, 603, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 818, 598, 1386, 378, 614, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 850, 614, - 1368, 369, 602, 97, 97, 97, 97, 97, + 95, 95, 95, 95, 95, 95, 827, 603, + 1419, 383, 623, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 867, 623, 1395, 371, 607, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 826, 602, 1374, 372, 606, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 834, 606, 1380, 375, - 610, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 842, - 610, 1326, 348, 574, 83, 83, 83, 83, + 97, 97, 97, 97, 835, 607, 1401, 374, + 611, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 843, + 611, 1407, 377, 615, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 851, 615, 1413, 380, 619, 103, + 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 859, 619, 1353, + 350, 579, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 770, 574, 1332, 351, 578, 85, - 85, 85, 85, 85, 85, 85, 0, 85, - 85, 85, 85, 85, 85, 778, 578, 85, - 1338, 354, 582, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 786, 582, 1344, 357, 586, 89, 89, + 779, 579, 1359, 353, 583, 85, 85, 85, + 85, 85, 85, 85, 0, 85, 85, 85, + 85, 85, 85, 787, 583, 85, 1365, 356, + 587, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 795, + 587, 1371, 359, 591, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 794, 586, 1350, 360, - 590, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 802, - 590, 1308, 339, 562, 77, 77, 77, 77, + 89, 89, 803, 591, 1377, 362, 595, 91, + 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 811, 595, 1335, + 341, 567, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 746, 562, 1290, 330, 550, 71, + 755, 567, 1317, 332, 555, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 722, 550, 1296, - 333, 554, 73, 73, 73, 73, 73, 73, + 71, 71, 71, 731, 555, 1323, 335, 559, 73, 73, 73, 73, 73, 73, 73, 73, - 730, 554, 1248, 309, 522, 57, 57, 57, + 73, 73, 73, 73, 73, 73, 739, 559, + 1275, 311, 527, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 666, 522, 1254, 312, 526, + 57, 675, 527, 1281, 314, 531, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 674, 526, - 1260, 315, 530, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 682, 530, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 394, 0, 390, 1, 141, 138, 0 + 59, 59, 59, 59, 683, 531, 1287, 317, + 535, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 691, + 535, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 399, 0, 395, 1, 143, 140, 0 }; static const short _demo_machine_parser_cmd_to_state_actions[] = { @@ -3591,7 +3651,8 @@ static const short _demo_machine_parser_cmd_to_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 111, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3654,7 +3715,7 @@ static const short _demo_machine_parser_cmd_to_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0 + 0, 0, 0, 0 }; static const short _demo_machine_parser_cmd_from_state_actions[] = { @@ -3683,7 +3744,8 @@ static const short _demo_machine_parser_cmd_from_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3746,7 +3808,7 @@ static const short _demo_machine_parser_cmd_from_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0 + 0, 0, 0, 0 }; static const short _demo_machine_parser_cmd_eof_trans[] = { @@ -3775,82 +3837,83 @@ static const short _demo_machine_parser_cmd_eof_trans[] = { 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 0, 0, 236, - 238, 240, 243, 245, 262, 245, 278, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 309, 324, 340, 356, - 372, 262, 262, 262, 262, 391, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 418, 433, 262, 262, 262, 262, - 262, 433, 262, 262, 456, 262, 262, 262, - 456, 262, 262, 477, 262, 262, 262, 477, - 340, 496, 262, 513, 262, 262, 262, 262, - 513, 262, 262, 262, 262, 262, 262, 262, - 544, 559, 262, 262, 262, 559, 262, 262, - 262, 581, 262, 597, 262, 262, 614, 262, - 630, 262, 262, 262, 262, 262, 630, 262, - 496, 262, 262, 340, 262, 262, 372, 262, - 262, 356, 262, 262, 324, 262, 262, 262, - 666, 262, 262, 262, 262, 278, 262, 262, - 262, 262, 688, 703, 718, 733, 749, 765, - 781, 796, 811, 826, 826, 842, 842, 858, - 858, 749, 874, 890, 890, 906, 921, 921, - 937, 952, 967, 982, 982, 874, 749, 781, - 765, 733, 1001, 703, 1017, 1032, 1054, 1060, - 1065, 1072, 1075, 1065, 1080, 1072, 1072, 1072, - 1072, 1080, 1080, 1072, 1072, 1072, 1072, 1072, - 1072, 1072, 1072, 1072, 1072, 1072, 1102, 1107, - 1072, 1072, 1107, 1115, 1115, 1115, 1122, 1127, - 1127, 1133, 1133, 1139, 1147, 1072, 1133, 1147, - 1139, 1159, 1147, 1147, 1147, 1147, 1159, 1159, - 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - 1147, 1147, 1147, 1181, 1186, 1147, 1147, 1186, - 1194, 1133, 1133, 1133, 1133, 1194, 1194, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1216, 1221, 1133, 1133, 1221, 1032, - 1054, 1054, 1245, 1054, 1054, 1054, 1267, 1054, - 1054, 1054, 1054, 1054, 1293, 1054, 1054, 1054, - 1054, 1054, 1054, 1318, 1054, 1054, 1054, 1340, - 1054, 1054, 1054, 1054, 1054, 1364, 1054, 1054, - 1054, 1388, 1054, 1054, 1054, 1054, 1054, 1054, - 1054, 1415, 1054, 1054, 1054, 1437, 1054, 1054, - 1054, 1054, 1054, 1054, 1054, 1466, 1054, 1054, - 1054, 1054, 1489, 1054, 1054, 1512, 1054, 1532, - 1054, 1054, 1553, 1054, 1054, 1054, 1054, 1576, - 1054, 1054, 1597, 1054, 1617, 1636, 1054, 1054, - 1054, 1636, 1054, 1054, 1054, 1054, 1054, 1054, - 1667, 1054, 1054, 1054, 1689, 1054, 1054, 1054, - 1054, 1712, 1054, 1054, 1054, 1734, 1753, 1054, - 1054, 1774, 1793, 1054, 1054, 1054, 1816, 1054, - 1054, 1054, 1054, 1054, 1054, 1841, 1032, 1874, - 1893, 1912, 1931, 1950, 1969, 1988, 2007, 2026, - 2045, 2064, 2083, 2102, 2121, 2140, 2159, 2178, - 2197, 2197, 2217, 2236, 2255, 2274, 2293, 2312, - 2331, 2350, 2369, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 2197, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 2465, 2465, - 2469 + 107, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 240, 242, 244, 247, 249, 266, + 249, 282, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 313, + 328, 344, 360, 376, 266, 266, 266, 266, + 395, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 422, 437, 266, + 266, 266, 266, 266, 437, 266, 266, 460, + 266, 266, 266, 460, 266, 266, 481, 266, + 266, 266, 481, 344, 500, 266, 517, 266, + 266, 266, 266, 517, 266, 266, 266, 266, + 266, 266, 266, 548, 563, 266, 266, 266, + 563, 266, 266, 266, 585, 266, 601, 266, + 266, 618, 266, 634, 266, 266, 266, 266, + 266, 634, 266, 500, 266, 266, 344, 266, + 266, 376, 266, 266, 360, 266, 266, 328, + 266, 266, 266, 670, 266, 266, 266, 266, + 282, 266, 266, 266, 266, 692, 707, 722, + 737, 753, 769, 785, 800, 815, 830, 830, + 846, 846, 862, 862, 753, 878, 894, 894, + 910, 925, 925, 941, 956, 971, 986, 986, + 878, 753, 785, 769, 737, 1005, 707, 1021, + 1036, 1058, 1064, 1069, 1076, 1079, 1069, 1084, + 1076, 1076, 1076, 1076, 1084, 1084, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1106, 1111, 1076, 1076, 1111, 1119, 1119, + 1119, 1126, 1131, 1131, 1137, 1137, 1143, 1151, + 1076, 1137, 1151, 1143, 1163, 1151, 1151, 1151, + 1151, 1163, 1163, 1151, 1151, 1151, 1151, 1151, + 1151, 1151, 1151, 1151, 1151, 1151, 1185, 1190, + 1151, 1151, 1190, 1198, 1137, 1137, 1137, 1137, + 1198, 1198, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1220, 1225, 1137, + 1137, 1225, 1036, 1058, 1058, 1249, 1058, 1058, + 1058, 1271, 1058, 1058, 1058, 1058, 1058, 1297, + 1058, 1058, 1058, 1058, 1058, 1058, 1322, 1058, + 1058, 1058, 1344, 1058, 1058, 1058, 1058, 1058, + 1368, 1058, 1058, 1058, 1392, 1058, 1058, 1058, + 1058, 1058, 1058, 1058, 1419, 1058, 1058, 1058, + 1441, 1058, 1058, 1058, 1058, 1058, 1058, 1058, + 1470, 1058, 1058, 1058, 1058, 1493, 1058, 1058, + 1516, 1058, 1536, 1058, 1058, 1558, 1058, 1058, + 1058, 1058, 1581, 1058, 1058, 1058, 1603, 1058, + 1058, 1624, 1058, 1644, 1663, 1058, 1058, 1058, + 1663, 1058, 1058, 1058, 1058, 1058, 1058, 1694, + 1058, 1058, 1058, 1716, 1058, 1058, 1058, 1058, + 1739, 1058, 1058, 1058, 1761, 1780, 1058, 1058, + 1801, 1820, 1058, 1058, 1058, 1843, 1058, 1058, + 1058, 1058, 1058, 1058, 1868, 1036, 1901, 1920, + 1939, 1958, 1977, 1996, 2015, 2034, 2053, 2072, + 2091, 2110, 2129, 2148, 2167, 2186, 2205, 2224, + 2243, 2243, 2263, 2282, 2301, 2320, 2339, 2358, + 2377, 2396, 2415, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 2243, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 2514, 2514, 2518 }; -static const int demo_machine_parser_cmd_start = 206; -static const int demo_machine_parser_cmd_first_final = 206; +static const int demo_machine_parser_cmd_start = 209; +static const int demo_machine_parser_cmd_first_final = 209; static const int demo_machine_parser_cmd_error = 0; -static const int demo_machine_parser_cmd_en_main = 206; +static const int demo_machine_parser_cmd_en_main = 209; -/* #line 322 "./dssl.rl" */ +/* #line 323 "./dssl.rl" */ -/* #line 3854 "./dssl.c" */ +/* #line 3917 "./dssl.c" */ { cs = demo_machine_parser_cmd_start; ts = 0; @@ -3858,7 +3921,7 @@ static const int demo_machine_parser_cmd_en_main = 206; act = 0; } -/* #line 323 "./dssl.rl" */ +/* #line 324 "./dssl.rl" */ /* default values */ *comment = tsk_false; @@ -3873,7 +3936,7 @@ static const int demo_machine_parser_cmd_en_main = 206; /* exec */ -/* #line 3877 "./dssl.c" */ +/* #line 3940 "./dssl.c" */ { int _klen; unsigned int _trans; @@ -3891,11 +3954,11 @@ _resume: _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { - case 65: + case 66: /* #line 1 "./dssl.rl" */ {ts = p;} break; -/* #line 3899 "./dssl.c" */ +/* #line 3962 "./dssl.c" */ } } @@ -4336,39 +4399,39 @@ replace: break; case 59: /* #line 276 "./dssl.rl" */ - { opt->type = opt_smsc; } + { opt->type = opt_silent; } break; case 60: /* #line 277 "./dssl.rl" */ - { opt->type = opt_to; } + { opt->type = opt_smsc; } break; case 61: -/* #line 284 "./dssl.rl" */ - { set_level(lv_stack); } +/* #line 278 "./dssl.rl" */ + { opt->type = opt_to; } break; case 62: -/* #line 284 "./dssl.rl" */ - { set_level(lv_session); } +/* #line 285 "./dssl.rl" */ + { set_level(lv_stack); } break; case 63: -/* #line 284 "./dssl.rl" */ +/* #line 285 "./dssl.rl" */ + { set_level(lv_session); } + break; + case 64: +/* #line 285 "./dssl.rl" */ { set_level(lv_action); } break; - case 66: + case 67: /* #line 1 "./dssl.rl" */ {te = p+1;} break; - case 67: -/* #line 297 "./dssl.rl" */ - {te = p+1;{ }} - break; case 68: -/* #line 299 "./dssl.rl" */ +/* #line 298 "./dssl.rl" */ {te = p+1;{ }} break; case 69: -/* #line 294 "./dssl.rl" */ - {te = p;p--;{ }} +/* #line 300 "./dssl.rl" */ + {te = p+1;{ }} break; case 70: /* #line 295 "./dssl.rl" */ @@ -4387,14 +4450,18 @@ replace: {te = p;p--;{ }} break; case 74: -/* #line 294 "./dssl.rl" */ - {{p = ((te))-1;}{ }} +/* #line 299 "./dssl.rl" */ + {te = p;p--;{ }} break; case 75: /* #line 295 "./dssl.rl" */ {{p = ((te))-1;}{ }} break; -/* #line 4398 "./dssl.c" */ + case 76: +/* #line 296 "./dssl.rl" */ + {{p = ((te))-1;}{ }} + break; +/* #line 4465 "./dssl.c" */ } } @@ -4403,11 +4470,11 @@ _again: _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { - case 64: + case 65: /* #line 1 "./dssl.rl" */ {ts = 0;} break; -/* #line 4411 "./dssl.c" */ +/* #line 4478 "./dssl.c" */ } } @@ -4427,12 +4494,12 @@ _again: _out: {} } -/* #line 337 "./dssl.rl" */ +/* #line 338 "./dssl.rl" */ if( cs < -/* #line 4434 "./dssl.c" */ -206 -/* #line 338 "./dssl.rl" */ +/* #line 4501 "./dssl.c" */ +209 +/* #line 339 "./dssl.rl" */ ){ TSK_DEBUG_ERROR("Failed to parse [%s] command-Line.", p); TSK_OBJECT_SAFE_FREE(cmd); diff --git a/trunk/tinyDEMO/dssl.rl b/trunk/tinyDEMO/dssl.rl index 6b619ffe..08e4fb3b 100644 --- a/trunk/tinyDEMO/dssl.rl +++ b/trunk/tinyDEMO/dssl.rl @@ -273,6 +273,7 @@ replace: "sec"i % { opt->type = opt_sec; } | "sid"i % { opt->type = opt_sid; } | "sigcomp"i % { opt->type = opt_sigcomp; } | + "silent"i % { opt->type = opt_silent; } | "smsc"i % { opt->type = opt_smsc; } | "to"i % { opt->type = opt_to; } )** >10 | diff --git a/trunk/tinyDEMO/invite.c b/trunk/tinyDEMO/invite.c index b496eb55..63476e28 100644 --- a/trunk/tinyDEMO/invite.c +++ b/trunk/tinyDEMO/invite.c @@ -23,7 +23,7 @@ extern ctx_t* ctx; -int invite_handle_event(const tsip_event_t *sipevent) +int invite_handle_event(const tsip_event_t *_event) { return 0; } diff --git a/trunk/tinyDEMO/message.c b/trunk/tinyDEMO/message.c index d3d34955..6059dd82 100644 --- a/trunk/tinyDEMO/message.c +++ b/trunk/tinyDEMO/message.c @@ -30,17 +30,17 @@ extern ctx_t* ctx; tsk_bool_t is_valid_telnum(const tsip_uri_t* uri); tsk_buffer_t* sms_submit(const tsip_uri_t* smsc, const tsip_uri_t* dest, const char* ascii_pay); -int message_handle_event(const tsip_event_t *sipevent) +int message_handle_event(const tsip_event_t *_event) { - const tsip_message_event_t* msg_event = TSIP_MESSAGE_EVENT(sipevent); + const tsip_message_event_t* msg_event = TSIP_MESSAGE_EVENT(_event); const session_t* session = tsk_null; tsip_ssession_id_t sid; int ret = 0; /* Find associated session */ - sid = tsip_ssession_get_id(sipevent->ss); + sid = tsip_ssession_get_id(_event->ss); if(!(session = session_get_by_sid(ctx->sessions, sid))){ - if(tsip_ssession_have_ownership(sipevent->ss)){ + if(tsip_ssession_have_ownership(_event->ss)){ /* it's or own session and we fail to match it ==> should never happen */ TSK_DEBUG_ERROR("Failed to match session event."); ret = -2; @@ -49,7 +49,7 @@ int message_handle_event(const tsip_event_t *sipevent) else{ /* it's a "server-side-session" */ session_t* _session; - if((_session = session_server_create(st_message, sipevent->ss)) && (session = _session)){ + if((_session = session_server_create(st_message, _event->ss)) && (session = _session)){ tsk_list_push_back_data(ctx->sessions, (void**)&_session); } else{ @@ -62,18 +62,10 @@ int message_handle_event(const tsip_event_t *sipevent) switch(msg_event->type){ - - /* Informational */ - case tsip_o_message: /* Outgoing MESSAGE */ - { /* Request successfully sent (you cannot suppose that the remote peer has received the request) ==> Informational */ - TSK_DEBUG_INFO("Transport layer successfully sent MESSAGE request"); - break; - } - case tsip_ao_message: /* Answer to outgoing MESSAGE */ { - TSK_DEBUG_INFO("Event: Answer to outgoing MESSAGE. Code=%d", TSIP_RESPONSE_CODE(sipevent->sipmessage)); - if(TSIP_RESPONSE_IS_2XX(sipevent->sipmessage)){ + TSK_DEBUG_INFO("Event: Answer to outgoing MESSAGE. Code=%d", TSIP_RESPONSE_CODE(_event->sipmessage)); + if(TSIP_RESPONSE_IS_2XX(_event->sipmessage)){ TSK_DEBUG_INFO("Message successfully sent."); } break; @@ -81,11 +73,11 @@ int message_handle_event(const tsip_event_t *sipevent) case tsip_i_message: /* Incoming MESSAGE */ { - const char* content_type = TSIP_MESSAGE_CONTENT_TYPE(sipevent->sipmessage); + const char* content_type = TSIP_MESSAGE_CONTENT_TYPE(_event->sipmessage); TSK_DEBUG_INFO("Event: Incoming MESSAGE."); - if(TSIP_MESSAGE_HAS_CONTENT(sipevent->sipmessage)){ - const tsk_buffer_t* content = TSIP_MESSAGE_CONTENT(sipevent->sipmessage); + if(TSIP_MESSAGE_HAS_CONTENT(_event->sipmessage)){ + const tsk_buffer_t* content = TSIP_MESSAGE_CONTENT(_event->sipmessage); TSK_DEBUG_INFO("MESSAGE Content-Type: %s", content_type); TSK_DEBUG_INFO("MESSAGE Content: %s", content->data); } @@ -105,13 +97,6 @@ int message_handle_event(const tsip_event_t *sipevent) break; } - /* Server events (For whose dev. Server Side IMS Services) */ - case tsip_ai_message: /* Answer to Incoming MESSAGE */ - { - TSK_DEBUG_WARN("Event not supported by Client Framework."); - break; - } - default: { /* Any other event */ TSK_DEBUG_WARN("%d not a valid SIP Messaging event.", msg_event->type); diff --git a/trunk/tinyDEMO/message.h b/trunk/tinyDEMO/message.h index 6e0cbec2..74ebf338 100644 --- a/trunk/tinyDEMO/message.h +++ b/trunk/tinyDEMO/message.h @@ -28,7 +28,7 @@ _BEGIN_DECLS -int message_handle_event(const tsip_event_t *sipevent); +int message_handle_event(const tsip_event_t *_event); tsip_ssession_id_t message_handle_cmd(cmd_type_t cmd, const opts_L_t* opts); _END_DECLS diff --git a/trunk/tinyDEMO/options.c b/trunk/tinyDEMO/options.c index c82eb0a9..dd167a7b 100644 --- a/trunk/tinyDEMO/options.c +++ b/trunk/tinyDEMO/options.c @@ -25,14 +25,14 @@ extern ctx_t* ctx; int options_hack_aor(const tsip_response_t* resp); -int options_handle_event(const tsip_event_t *sipevent) +int options_handle_event(const tsip_event_t *_event) { - const tsip_options_event_t* opt_event = TSIP_OPTIONS_EVENT(sipevent); + const tsip_options_event_t* opt_event = TSIP_OPTIONS_EVENT(_event); const session_t* session; tsip_ssession_id_t sid; /* Find associated session */ - sid = tsip_ssession_get_id(sipevent->ss); + sid = tsip_ssession_get_id(_event->ss); if(!(session = session_get_by_sid(ctx->sessions, sid))){ TSK_DEBUG_WARN("Failed to match session event."); return -1; @@ -40,13 +40,11 @@ int options_handle_event(const tsip_event_t *sipevent) switch(opt_event->type){ case tsip_i_options: /* incoming OPTIONS */ - case tsip_ai_options: /* answer to incoming OPTIONS */ - case tsip_o_options: /* outgoing OPTIONS */ break; case tsip_ao_options: /* answer to outgoing OPTIONS */ #if HACK_AOR - if(TSIP_MESSAGE_IS_RESPONSE(sipevent->sipmessage)){ - options_hack_aor(sipevent->sipmessage); + if(TSIP_MESSAGE_IS_RESPONSE(_event->sipmessage)){ + options_hack_aor(_event->sipmessage); } #endif break; diff --git a/trunk/tinyDEMO/publish.c b/trunk/tinyDEMO/publish.c index cafdd609..0cb1cab8 100644 --- a/trunk/tinyDEMO/publish.c +++ b/trunk/tinyDEMO/publish.c @@ -23,43 +23,44 @@ extern ctx_t* ctx; -int publish_handle_event(const tsip_event_t *sipevent) +int publish_handle_event(const tsip_event_t *_event) { - const tsip_publish_event_t* pub_event = TSIP_PUBLISH_EVENT(sipevent); + const tsip_publish_event_t* pub_event = TSIP_PUBLISH_EVENT(_event); const session_t* session; tsip_ssession_id_t sid; /* Find associated session */ - sid = tsip_ssession_get_id(sipevent->ss); + sid = tsip_ssession_get_id(_event->ss); if(!(session = session_get_by_sid(ctx->sessions, sid))){ TSK_DEBUG_WARN("Failed to match session event."); return -1; } switch(pub_event->type){ - - /* Informational */ - case tsip_o_publish: /* Outgoing PUBLISH */ - case tsip_o_unpublish: /* Outgoing PUBLISH */ - { /* Request successfully sent (you cannot suppose that the remote peer has received the request) ==> Informational */ - TSK_DEBUG_INFO("Transport layer successfully sent (un)PUBLISH request"); - break; - } - case tsip_ao_publish: /* Answer to outgoing PUBLISH */ { - TSK_DEBUG_INFO("Event: Answer to outgoing PUBLISH. Code=%d", TSIP_RESPONSE_CODE(sipevent->sipmessage)); - if(TSIP_RESPONSE_IS_2XX(sipevent->sipmessage)){ - SESSION(session)->connected = tsk_true; + if(_event->sipmessage){ + if(TSIP_MESSAGE_IS_RESPONSE(_event->sipmessage)){ + TSK_DEBUG_INFO("Event: Answer to outgoing PUBLISH. Code=%d and phrase=%s", + _event->sipmessage->line.response.status_code, _event->sipmessage->line.response.reason_phrase); + } + else{ + // request + } } break; } case tsip_ao_unpublish: /* Answer to outgoing unPUBLISH */ { - TSK_DEBUG_INFO("Event: Answer to outgoing unPUBLISH. Code=%d", TSIP_RESPONSE_CODE(sipevent->sipmessage)); - if(TSIP_RESPONSE_IS_2XX(sipevent->sipmessage)){ - SESSION(session)->connected = tsk_false; + if(_event->sipmessage){ + if(TSIP_MESSAGE_IS_RESPONSE(_event->sipmessage)){ + TSK_DEBUG_INFO("Event: Answer to outgoing UNPUBLISH. Code=%d and phrase=%s", + _event->sipmessage->line.response.status_code, _event->sipmessage->line.response.reason_phrase); + } + else{ + // request + } } break; } @@ -67,8 +68,6 @@ int publish_handle_event(const tsip_event_t *sipevent) /* Server events (For whose dev. Server Side IMS Services) */ case tsip_i_publish: /* Incoming PUBLISH */ case tsip_i_unpublish: /* Incoming unPUBLISH */ - case tsip_ai_publish: /* Answer to Incoming PUBLISH */ - case tsip_ai_unpublish: /* Answer to Incoming unPUBLISH */ { TSK_DEBUG_WARN("Event not support by Client Framework."); break; diff --git a/trunk/tinyDEMO/publish.h b/trunk/tinyDEMO/publish.h index a5d3b5dc..f52b7f15 100644 --- a/trunk/tinyDEMO/publish.h +++ b/trunk/tinyDEMO/publish.h @@ -28,7 +28,7 @@ _BEGIN_DECLS -int publish_handle_event(const tsip_event_t *sipevent); +int publish_handle_event(const tsip_event_t *_event); tsip_ssession_id_t publish_handle_cmd(cmd_type_t cmd, const opts_L_t* opts); _END_DECLS diff --git a/trunk/tinyDEMO/register.c b/trunk/tinyDEMO/register.c index 9b117562..527ca8eb 100644 --- a/trunk/tinyDEMO/register.c +++ b/trunk/tinyDEMO/register.c @@ -23,43 +23,43 @@ extern ctx_t* ctx; -int register_handle_event(const tsip_event_t *sipevent) +int register_handle_event(const tsip_event_t *_event) { - const tsip_register_event_t* reg_event = TSIP_REGISTER_EVENT(sipevent); + const tsip_register_event_t* reg_event = TSIP_REGISTER_EVENT(_event); const session_t* session; tsip_ssession_id_t sid; /* Find associated session */ - sid = tsip_ssession_get_id(sipevent->ss); + sid = tsip_ssession_get_id(_event->ss); if(!(session = session_get_by_sid(ctx->sessions, sid))){ TSK_DEBUG_WARN("Failed to match session event."); return -1; } - switch(reg_event->type){ - - /* Informational */ - case tsip_o_register: /* Outgoing REGISTER */ - case tsip_o_unregister: /* Outgoing REGISTER */ - { /* Request successfully sent (you cannot suppose that the remote peer has received the request) ==> Informational */ - TSK_DEBUG_INFO("Transport layer successfully sent (un)REGISTER request"); - break; - } - + switch(reg_event->type){ case tsip_ao_register: /* Answer to outgoing REGISTER */ { - TSK_DEBUG_INFO("Event: Answer to outgoing REGISTER. Code=%d", TSIP_RESPONSE_CODE(sipevent->sipmessage)); - if(TSIP_RESPONSE_IS_2XX(sipevent->sipmessage)){ - SESSION(session)->connected = tsk_true; + if(_event->sipmessage){ + if(TSIP_MESSAGE_IS_RESPONSE(_event->sipmessage)){ + TSK_DEBUG_INFO("Event: Answer to outgoing REGISTER. Code=%d and phrase=%s", + _event->sipmessage->line.response.status_code, _event->sipmessage->line.response.reason_phrase); + } + else{ + // request + } } break; } - case tsip_ao_unregister: /* Answer to outgoing unREGISTER */ { - TSK_DEBUG_INFO("Event: Answer to outgoing unREGISTER. Code=%d", TSIP_RESPONSE_CODE(sipevent->sipmessage)); - if(TSIP_RESPONSE_IS_2XX(sipevent->sipmessage)){ - SESSION(session)->connected = tsk_false; + if(_event->sipmessage){ + if(TSIP_MESSAGE_IS_RESPONSE(_event->sipmessage)){ + TSK_DEBUG_INFO("Event: Answer to outgoing unREGISTER. Code=%d and phrase=%s", + _event->sipmessage->line.response.status_code, _event->sipmessage->line.response.reason_phrase); + } + else{ + // request + } } break; } @@ -67,8 +67,6 @@ int register_handle_event(const tsip_event_t *sipevent) /* Server events (For whose dev. Server Side IMS Services) */ case tsip_i_register: /* Incoming REGISTER */ case tsip_i_unregister: /* Incoming unREGISTER */ - case tsip_ai_register: /* Answer to Incoming REGISTER */ - case tsip_ai_unregister: /* Answer to Incoming unREGISTER */ { TSK_DEBUG_WARN("Event not support by Client Framework."); break; diff --git a/trunk/tinyDEMO/register.h b/trunk/tinyDEMO/register.h index 2fc21e85..d8d7415f 100644 --- a/trunk/tinyDEMO/register.h +++ b/trunk/tinyDEMO/register.h @@ -28,7 +28,7 @@ _BEGIN_DECLS -int register_handle_event(const tsip_event_t *sipevent); +int register_handle_event(const tsip_event_t *_event); tsip_ssession_id_t register_handle_cmd(cmd_type_t cmd, const opts_L_t* opts); _END_DECLS diff --git a/trunk/tinyDEMO/subscribe.c b/trunk/tinyDEMO/subscribe.c index 1afcc74c..0b7d627f 100644 --- a/trunk/tinyDEMO/subscribe.c +++ b/trunk/tinyDEMO/subscribe.c @@ -23,14 +23,14 @@ extern ctx_t* ctx; -int subscribe_handle_event(const tsip_event_t *sipevent) +int subscribe_handle_event(const tsip_event_t *_event) { - const tsip_subscribe_event_t* sub_event = TSIP_SUBSCRIBE_EVENT(sipevent); + const tsip_subscribe_event_t* sub_event = TSIP_SUBSCRIBE_EVENT(_event); const session_t* session; tsip_ssession_id_t sid; /* Find associated session */ - sid = tsip_ssession_get_id(sipevent->ss); + sid = tsip_ssession_get_id(_event->ss); if(!(session = session_get_by_sid(ctx->sessions, sid))){ TSK_DEBUG_WARN("Failed to match session event."); return -1; @@ -38,29 +38,30 @@ int subscribe_handle_event(const tsip_event_t *sipevent) switch(sub_event->type){ - - /* Informational */ - case tsip_o_subscribe: /* Outgoing SUBSCRIBE */ - case tsip_o_unsubscribe: /* Outgoing SUBSCRIBE */ - { /* Request successfully sent (you cannot suppose that the remote peer has received the request) ==> Informational */ - TSK_DEBUG_INFO("Transport layer successfully sent (un)SUBSCRIBE request"); - break; - } - case tsip_ao_subscribe: /* Answer to outgoing SUBSCRIBE */ { - TSK_DEBUG_INFO("Event: Answer to outgoing SUBSCRIBE. Code=%d", TSIP_RESPONSE_CODE(sipevent->sipmessage)); - if(TSIP_RESPONSE_IS_2XX(sipevent->sipmessage)){ - SESSION(session)->connected = tsk_true; + if(_event->sipmessage){ + if(TSIP_MESSAGE_IS_RESPONSE(_event->sipmessage)){ + TSK_DEBUG_INFO("Event: Answer to outgoing SUBSCRIBE. Code=%d and phrase=%s", + _event->sipmessage->line.response.status_code, _event->sipmessage->line.response.reason_phrase); + } + else{ + // request + } } break; } case tsip_ao_unsubscribe: /* Answer to outgoing unSUBSCRIBE */ { - TSK_DEBUG_INFO("Event: Answer to outgoing unSUBSCRIBE. Code=%d", TSIP_RESPONSE_CODE(sipevent->sipmessage)); - if(TSIP_RESPONSE_IS_2XX(sipevent->sipmessage)){ - SESSION(session)->connected = tsk_false; + if(_event->sipmessage){ + if(TSIP_MESSAGE_IS_RESPONSE(_event->sipmessage)){ + TSK_DEBUG_INFO("Event: Answer to outgoing unSUBSCRIBE. Code=%d and phrase=%s", + _event->sipmessage->line.response.status_code, _event->sipmessage->line.response.reason_phrase); + } + else{ + // request + } } break; } @@ -68,9 +69,9 @@ int subscribe_handle_event(const tsip_event_t *sipevent) case tsip_i_notify: /* Incoming NOTIFY */ { TSK_DEBUG_INFO("Event: Incoming NOTIFY."); - if(TSIP_MESSAGE_HAS_CONTENT(sipevent->sipmessage)){ - const tsk_buffer_t* content = TSIP_MESSAGE_CONTENT(sipevent->sipmessage); - TSK_DEBUG_INFO("NOTIFY Content-Type: %s", TSIP_MESSAGE_CONTENT_TYPE(sipevent->sipmessage)); + if(TSIP_MESSAGE_HAS_CONTENT(_event->sipmessage)){ + const tsk_buffer_t* content = TSIP_MESSAGE_CONTENT(_event->sipmessage); + TSK_DEBUG_INFO("NOTIFY Content-Type: %s", TSIP_MESSAGE_CONTENT_TYPE(_event->sipmessage)); TSK_DEBUG_INFO("NOTIFY Content: %s", content->data); } break; @@ -79,8 +80,6 @@ int subscribe_handle_event(const tsip_event_t *sipevent) /* Server events (For whose dev. Server Side IMS Services) */ case tsip_i_subscribe: /* Incoming SUBSCRIBE */ case tsip_i_unsubscribe: /* Incoming unSUBSCRIBE */ - case tsip_ai_subscribe: /* Answer to Incoming SUBSCRIBE */ - case tsip_ai_unsubscribe: /* Answer to Incoming unSUBSCRIBE */ { TSK_DEBUG_WARN("Event not support by Client Framework."); break; diff --git a/trunk/tinyDEMO/subscribe.h b/trunk/tinyDEMO/subscribe.h index 51560899..a24ddde5 100644 --- a/trunk/tinyDEMO/subscribe.h +++ b/trunk/tinyDEMO/subscribe.h @@ -28,7 +28,7 @@ _BEGIN_DECLS -int subscribe_handle_event(const tsip_event_t *sipevent); +int subscribe_handle_event(const tsip_event_t *_event); tsip_ssession_id_t subscribe_handle_cmd(cmd_type_t cmd, const opts_L_t* opts); _END_DECLS diff --git a/trunk/tinyHTTP/src/thttp_session.c b/trunk/tinyHTTP/src/thttp_session.c index fbe55317..da814af3 100644 --- a/trunk/tinyHTTP/src/thttp_session.c +++ b/trunk/tinyHTTP/src/thttp_session.c @@ -367,10 +367,13 @@ int thttp_session_signal(thttp_session_t *self, thttp_action_type_t atype) tsk_safeobj_lock(self); again: tsk_list_foreach(item, self->dialogs){ + item = tsk_object_ref(item); thttp_dialog_fsm_act((thttp_dialog_t*)item->data, atype, tsk_null, tsk_null); /* As the above action could terminate the dialog (which means change the content of self->dialogs) * => list becomes unsafe */ - goto again; + if(!(item = tsk_object_unref(item))){ + goto again; + } } switch(atype){ diff --git a/trunk/tinySAK/src/tsk_list.c b/trunk/tinySAK/src/tsk_list.c index 12ed71ad..07c627fd 100644 --- a/trunk/tinySAK/src/tsk_list.c +++ b/trunk/tinySAK/src/tsk_list.c @@ -65,6 +65,44 @@ tsk_list_item_t* tsk_list_item_create() return tsk_object_new(tsk_list_item_def_t); } +/**@ingroup tsk_list_group +* Locks the list to avoid concurrent access. The list should be unlocked using +* @ref tsk_list_unlock. +* @param list The list to lock. +* @retval zero if succeed and non-zero error code otherwise. +* @sa @ref tsk_list_unlock +*/ +int tsk_list_lock(tsk_list_t* list) +{ + if(list){ + if(!list->mutex){ + list->mutex = tsk_mutex_create(); + } + return tsk_mutex_lock(list->mutex); + } + else{ + TSK_DEBUG_ERROR("Invalid parameter"); + return -1; + } +} + +/**@ingroup tsk_list_group +* UnLocks a previously locked list. +* @param list The list to unlock. +* @retval zero if succeed and non-zero error code otherwise. +* @sa @ref tsk_list_lock +*/ +int tsk_list_unlock(tsk_list_t* list) +{ + if(list && list->mutex){ + return tsk_mutex_unlock(list->mutex); + } + else{ + TSK_DEBUG_ERROR("Invalid parameter"); + return -1; + } +} + /**@ingroup tsk_list_group * Remove an item from the @a list. * @param list the list from which to remove the @a item. @@ -543,6 +581,11 @@ static tsk_object_t* tsk_list_dtor(tsk_object_t *self) tsk_object_unref(item); } #endif + + /* destroy the on-demand mutex */ + if(list->mutex){ + tsk_mutex_destroy(&list->mutex); + } } else{ TSK_DEBUG_WARN("Cannot free an uninitialized list"); diff --git a/trunk/tinySAK/src/tsk_list.h b/trunk/tinySAK/src/tsk_list.h index 7783186f..c83f722b 100644 --- a/trunk/tinySAK/src/tsk_list.h +++ b/trunk/tinySAK/src/tsk_list.h @@ -31,6 +31,7 @@ #define _TINYSAK_LIST_H_ #include "tinysak_config.h" +#include "tsk_mutex.h" #include "tsk_object.h" TSK_BEGIN_DECLS @@ -61,8 +62,10 @@ tsk_list_item_t; typedef struct tsk_list_s { TSK_DECLARE_OBJECT; + tsk_list_item_t* head; /**< The head of the linked list. */ tsk_list_item_t* tail; /**< The tail of the linked list. */ + tsk_mutex_handle_t* mutex; /**< on-demand mutex. */ } tsk_list_t; @@ -86,6 +89,9 @@ typedef int (*tsk_list_func_predicate)(const tsk_list_item_t* item, const void* TINYSAK_API tsk_list_t* tsk_list_create(); TINYSAK_API tsk_list_item_t* tsk_list_item_create(); +TINYSAK_API int tsk_list_lock(tsk_list_t* list); +TINYSAK_API int tsk_list_unlock(tsk_list_t* list); + TINYSAK_API void tsk_list_remove_item(tsk_list_t* list, tsk_list_item_t* item); TINYSAK_API tsk_list_item_t* tsk_list_pop_item_by_data(tsk_list_t* list, const tsk_object_t * tskobj); TINYSAK_API void tsk_list_remove_item_by_data(tsk_list_t* list, const tsk_object_t * tskobj); diff --git a/trunk/tinySAK/src/tsk_object.c b/trunk/tinySAK/src/tsk_object.c index 034642c9..318ca1dc 100644 --- a/trunk/tinySAK/src/tsk_object.c +++ b/trunk/tinySAK/src/tsk_object.c @@ -185,8 +185,13 @@ tsk_object_t* tsk_object_unref(tsk_object_t *self) { if(self){ tsk_object_header_t* objhdr = TSK_OBJECT_HEADER(self); - if(objhdr->refCount && !--objhdr->refCount){ // If refCount is == 0 then, nothing should happen. - tsk_object_delete(self); + if(objhdr->refCount){ // If refCount is == 0 then, nothing should happen. + if(!--objhdr->refCount){ + tsk_object_delete(self); + return tsk_null; + } + } + else{ return tsk_null; } } diff --git a/trunk/tinySAK/src/tsk_runnable.c b/trunk/tinySAK/src/tsk_runnable.c index aed475c5..161af82a 100644 --- a/trunk/tinySAK/src/tsk_runnable.c +++ b/trunk/tinySAK/src/tsk_runnable.c @@ -106,8 +106,8 @@ static int tsk_runnable_deinit(tsk_runnable_t *self) */ int tsk_runnable_start(tsk_runnable_t *self, const tsk_object_def_t *objdef) { - int ret = -1; if(self){ + int ret = -1; if(self->running) return -2; else if(!self->run) return -3; else if(tsk_runnable_init(self, objdef)) return -4; @@ -123,8 +123,30 @@ int tsk_runnable_start(tsk_runnable_t *self, const tsk_object_def_t *objdef) //self->running = tsk_true; self->started = tsk_true; + return 0; + } + else{ + TSK_DEBUG_ERROR("Invalid parameter"); + return -1; + } +} + +/**@ingroup tsk_runnable_group +* To indicate whether the enqueued data is important or not. +* @param self The runnable object +* @param important @a tsk_true or @a tsk_false. If set to @a tsk_true, the thread will not be joined +* until all data in the queue have been consumed. +*/ +int tsk_runnable_set_important(tsk_runnable_t *self, tsk_bool_t important) +{ + if(self){ + self->important = important; + return 0; + } + else{ + TSK_DEBUG_ERROR("Invalid parameter"); + return -1; } - return ret; } /**@ingroup tsk_runnable_group diff --git a/trunk/tinySAK/src/tsk_runnable.h b/trunk/tinySAK/src/tsk_runnable.h index 3d29d17f..6a51200a 100644 --- a/trunk/tinySAK/src/tsk_runnable.h +++ b/trunk/tinySAK/src/tsk_runnable.h @@ -52,14 +52,17 @@ typedef void * (*tsk_runnable_func_run)(void* self); /**@ingroup tsk_runnable_group * @def TSK_RUNNABLE_RUN_END */ -#define TSK_RUNNABLE_RUN_BEGIN(self) \ - TSK_RUNNABLE(self)->running = tsk_true; \ - for(;;) { \ +#define TSK_RUNNABLE_RUN_BEGIN(self) \ + TSK_RUNNABLE(self)->running = tsk_true; \ + for(;;) { \ tsk_semaphore_decrement(TSK_RUNNABLE(self)->semaphore); \ - if(!TSK_RUNNABLE(self)->running) break; \ + if(!TSK_RUNNABLE(self)->running && \ + (!TSK_RUNNABLE(self)->important) || (TSK_RUNNABLE(self)->important && TSK_LIST_IS_EMPTY(TSK_RUNNABLE(self)->objects))) \ + break; + -#define TSK_RUNNABLE_RUN_END(self) \ - } \ +#define TSK_RUNNABLE_RUN_END(self) \ + } \ TSK_RUNNABLE(self)->running = tsk_false; /**@ingroup tsk_runnable_group @@ -70,10 +73,10 @@ typedef void * (*tsk_runnable_func_run)(void* self); */ #define TSK_RUNNABLE_ENQUEUE(self, ...) \ { \ - if(TSK_RUNNABLE(self) && TSK_RUNNABLE(self)->initialized){ \ - tsk_object_t *object = tsk_object_new(TSK_RUNNABLE(self)->objdef, __VA_ARGS__); \ - tsk_list_push_back_data(TSK_RUNNABLE(self)->objects, &object); \ - tsk_semaphore_increment(TSK_RUNNABLE(self)->semaphore); \ + if((self) && TSK_RUNNABLE(self)->initialized){ \ + tsk_object_t *object = tsk_object_new(TSK_RUNNABLE(self)->objdef, ##__VA_ARGS__); \ + tsk_list_push_back_data(TSK_RUNNABLE(self)->objects, &object); \ + tsk_semaphore_increment(TSK_RUNNABLE(self)->semaphore); \ } \ else{ \ TSK_DEBUG_WARN("Invalid/uninitialized runnable object."); \ @@ -82,9 +85,9 @@ typedef void * (*tsk_runnable_func_run)(void* self); #define TSK_RUNNABLE_ENQUEUE_OBJECT(self, object) \ { \ - if(TSK_RUNNABLE(self) && TSK_RUNNABLE(self)->initialized){ \ - tsk_list_push_back_data(TSK_RUNNABLE(self)->objects, (void**)&object); \ - tsk_semaphore_increment(TSK_RUNNABLE(self)->semaphore); \ + if((self) && (self)->initialized){ \ + tsk_list_push_back_data(TSK_RUNNABLE(self)->objects, (void**)&object); \ + tsk_semaphore_increment(TSK_RUNNABLE(self)->semaphore); \ } \ else{ \ TSK_DEBUG_WARN("Invalid/uninitialized runnable object."); \ @@ -94,7 +97,8 @@ typedef void * (*tsk_runnable_func_run)(void* self); /**@ingroup tsk_runnable_group */ -#define TSK_RUNNABLE_POP_FIRST(self) tsk_list_pop_first_item(TSK_RUNNABLE(self)->objects) +#define TSK_RUNNABLE_POP_FIRST(self) \ + tsk_list_pop_first_item(TSK_RUNNABLE(self)->objects) /**@ingroup tsk_runnable_group @@ -113,6 +117,11 @@ typedef struct tsk_runnable_s tsk_bool_t running; tsk_bool_t started; tsk_bool_t initialized; + /** whether the enqueued data are important or not. + * if yes, the thread will not be joined until all data in the queue have been consumed. + * default value: tsk_false + */ + tsk_bool_t important; tsk_list_t *objects; } @@ -120,11 +129,12 @@ tsk_runnable_t; /**@ingroup tsk_runnable_group */ -#define TSK_DECLARE_RUNNABLE tsk_runnable_t runnable +#define TSK_DECLARE_RUNNABLE tsk_runnable_t __runnable__ TINYSAK_API tsk_runnable_t* tsk_runnable_create(); TINYSAK_API int tsk_runnable_start(tsk_runnable_t *self, const tsk_object_def_t *objdef); +TINYSAK_API int tsk_runnable_set_important(tsk_runnable_t *self, tsk_bool_t important); TINYSAK_API int tsk_runnable_enqueue(tsk_runnable_t *self, ...); TINYSAK_API int tsk_runnable_stop(tsk_runnable_t *self); diff --git a/trunk/tinySAK/src/tsk_timer.c b/trunk/tinySAK/src/tsk_timer.c index af827688..6f28d539 100644 --- a/trunk/tinySAK/src/tsk_timer.c +++ b/trunk/tinySAK/src/tsk_timer.c @@ -163,7 +163,8 @@ int tsk_timer_manager_stop(tsk_timer_manager_handle_t *self) return -1; } - tsk_mutex_lock(manager->mutex); + // all functions called below are thread-safe ==> do not lock + // "mainthread" uses manager->mutex and runs in a separate thread ==> deadlock if(TSK_RUNNABLE(manager)->running){ if(ret = tsk_runnable_stop(TSK_RUNNABLE(manager))){ @@ -177,12 +178,11 @@ int tsk_timer_manager_stop(tsk_timer_manager_handle_t *self) goto bail; } else{ - return 0; /* already running. */ + ret = 0; /* already running. */ + goto bail; } bail: - tsk_mutex_unlock(manager->mutex); - return ret; } @@ -257,6 +257,8 @@ static void *run(void* self) return tsk_null; } + TSK_DEBUG_INFO("Timer manager run()::enter"); + TSK_RUNNABLE_RUN_BEGIN(manager); if(curr = TSK_RUNNABLE_POP_FIRST(manager)){ @@ -269,6 +271,8 @@ static void *run(void* self) TSK_RUNNABLE_RUN_END(manager); + TSK_DEBUG_INFO("Timer manager run()::exit"); + return tsk_null; } diff --git a/trunk/tinySIP/include/tinysip/api/tsip_api_invite.h b/trunk/tinySIP/include/tinysip/api/tsip_api_invite.h index 83982ab3..565fef8e 100644 --- a/trunk/tinySIP/include/tinysip/api/tsip_api_invite.h +++ b/trunk/tinySIP/include/tinysip/api/tsip_api_invite.h @@ -41,8 +41,6 @@ TSIP_BEGIN_DECLS typedef enum tsip_invite_event_type_e { tsip_i_invite, - tsip_ai_invite, - tsip_o_invite, tsip_ao_invite, } tsip_invite_event_type_t; diff --git a/trunk/tinySIP/include/tinysip/api/tsip_api_message.h b/trunk/tinySIP/include/tinysip/api/tsip_api_message.h index 8d94eaf6..998a6928 100644 --- a/trunk/tinySIP/include/tinysip/api/tsip_api_message.h +++ b/trunk/tinySIP/include/tinysip/api/tsip_api_message.h @@ -41,8 +41,6 @@ TSIP_BEGIN_DECLS typedef enum tsip_message_event_type_e { tsip_i_message, - tsip_ai_message, - tsip_o_message, tsip_ao_message, } tsip_message_event_type_t; diff --git a/trunk/tinySIP/include/tinysip/api/tsip_api_options.h b/trunk/tinySIP/include/tinysip/api/tsip_api_options.h index f74ac2e4..b44b2a7f 100644 --- a/trunk/tinySIP/include/tinysip/api/tsip_api_options.h +++ b/trunk/tinySIP/include/tinysip/api/tsip_api_options.h @@ -41,8 +41,6 @@ TSIP_BEGIN_DECLS typedef enum tsip_options_event_type_e { tsip_i_options, - tsip_ai_options, - tsip_o_options, tsip_ao_options, } tsip_options_event_type_t; diff --git a/trunk/tinySIP/include/tinysip/api/tsip_api_publish.h b/trunk/tinySIP/include/tinysip/api/tsip_api_publish.h index 521f78c5..da3d20f3 100644 --- a/trunk/tinySIP/include/tinysip/api/tsip_api_publish.h +++ b/trunk/tinySIP/include/tinysip/api/tsip_api_publish.h @@ -41,13 +41,9 @@ TSIP_BEGIN_DECLS typedef enum tsip_publish_event_type_e { tsip_i_publish, - tsip_ai_publish, - tsip_o_publish, tsip_ao_publish, tsip_i_unpublish, - tsip_ai_unpublish, - tsip_o_unpublish, tsip_ao_unpublish } tsip_publish_event_type_t; diff --git a/trunk/tinySIP/include/tinysip/api/tsip_api_register.h b/trunk/tinySIP/include/tinysip/api/tsip_api_register.h index 7d307871..d7b6c9fa 100644 --- a/trunk/tinySIP/include/tinysip/api/tsip_api_register.h +++ b/trunk/tinySIP/include/tinysip/api/tsip_api_register.h @@ -41,13 +41,9 @@ TSIP_BEGIN_DECLS typedef enum tsip_register_event_type_e { tsip_i_register, - tsip_ai_register, - tsip_o_register, tsip_ao_register, - + tsip_i_unregister, - tsip_ai_unregister, - tsip_o_unregister, tsip_ao_unregister, } tsip_register_event_type_t; diff --git a/trunk/tinySIP/include/tinysip/api/tsip_api_subscribe.h b/trunk/tinySIP/include/tinysip/api/tsip_api_subscribe.h index d582be54..9895a89b 100644 --- a/trunk/tinySIP/include/tinysip/api/tsip_api_subscribe.h +++ b/trunk/tinySIP/include/tinysip/api/tsip_api_subscribe.h @@ -41,18 +41,12 @@ TSIP_BEGIN_DECLS typedef enum tsip_subscribe_event_type_e { tsip_i_subscribe, - tsip_ai_subscribe, - tsip_o_subscribe, tsip_ao_subscribe, tsip_i_unsubscribe, - tsip_ai_unsubscribe, - tsip_o_unsubscribe, tsip_ao_unsubscribe, tsip_i_notify, - tsip_ai_notify, - tsip_o_notify, tsip_ao_notify } tsip_subscribe_event_type_t; diff --git a/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog.h b/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog.h index 7c6ae64c..7faf35ba 100644 --- a/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog.h +++ b/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog.h @@ -60,8 +60,8 @@ TSIP_BEGIN_DECLS #define TSIP_DIALOG_TIMER_SCHEDULE(name, TX) \ self->timer##TX.id = tsk_timer_manager_schedule(TSIP_DIALOG_GET_STACK(self)->timer_mgr, self->timer##TX.timeout, TSK_TIMER_CALLBACK_F(tsip_dialog_##name##_timer_callback), self) -#define TSIP_DIALOG_SIGNAL(self, type, code, phrase) \ - tsip_event_signal(type, TSIP_DIALOG(self)->ss, code, phrase) +#define TSIP_DIALOG_SIGNAL(self, code, phrase) \ + tsip_event_signal(tsip_event_dialog, TSIP_DIALOG(self)->ss, code, phrase) #define TSIP_DIALOG_SHUTDOWN_TIMEOUT 2000 /* miliseconds. */ @@ -142,7 +142,7 @@ typedef struct tsip_dialog_s } tsip_dialog_t; -#define TSIP_DECLARE_DIALOG tsip_dialog_t dialog +#define TSIP_DECLARE_DIALOG tsip_dialog_t __dialog__ typedef tsk_list_t tsip_dialogs_L_t; /* diff --git a/trunk/tinySIP/include/tinysip/tsip_event.h b/trunk/tinySIP/include/tinysip/tsip_event.h index 952ca258..e3505506 100644 --- a/trunk/tinySIP/include/tinysip/tsip_event.h +++ b/trunk/tinySIP/include/tinysip/tsip_event.h @@ -47,29 +47,34 @@ typedef enum tsip_event_type_e tsip_event_register, tsip_event_subscribe, - tsip_event_dialog + tsip_event_dialog, + tsip_event_stack, } tsip_event_type_t; -/** SIP codes associated to an internal event */ -typedef enum tsip_event_code_e -{ - /* 100-699 are reserved codes */ +/* SIP codes associated to an internal event */ +// 100-699 are reserved codes - /* 7xx ==> errors */ - tsip_event_code_transport_error = 702, - tsip_event_code_global_error = 703, - tsip_event_code_message_error = 704, +// 7xx ==> errors +#define tsip_event_code_dialog_transport_error 702 +#define tsip_event_code_dialog_global_error 703 +#define tsip_event_code_dialog_message_error 704 - /* 8xx ==> success */ - tsip_event_code_request_incoming = 800, - tsip_event_code_request_cancelled = 801, - tsip_event_code_request_sent = 802, +// 8xx ==> success +#define tsip_event_code_dialog_request_incoming 800 +#define tsip_event_code_dialog_request_cancelled 801 +#define tsip_event_code_dialog_request_sent 802 + +// 9xx ==> Informational +#define tsip_event_code_dialog_connecting 900 +#define tsip_event_code_dialog_connected 901 +#define tsip_event_code_dialog_terminating 902 +#define tsip_event_code_dialog_terminated 903 +#define tsip_event_code_stack_started 950 +#define tsip_event_code_stack_stopped 951 +#define tsip_event_code_stack_failed_to_start 952 +#define tsip_event_code_stack_failed_to_stop 953 - /* 9xx ==> Informational */ - tsip_event_code_dialog_terminated = 900, -} -tsip_event_code_t; typedef struct tsip_event_s { @@ -82,9 +87,12 @@ typedef struct tsip_event_s tsip_event_type_t type; struct tsip_message_s *sipmessage; + + //! copy of stack user data (needed by sessionless events) + const void* userdata; } tsip_event_t; -#define TSIP_DECLARE_EVENT tsip_event_t sipevent +#define TSIP_DECLARE_EVENT tsip_event_t __sipevent__ TINYSIP_GEXTERN const tsk_object_def_t *tsip_event_def_t; diff --git a/trunk/tinySIP/include/tinysip/tsip_ssession.h b/trunk/tinySIP/include/tinysip/tsip_ssession.h index 3168ea90..a80bd1ac 100644 --- a/trunk/tinySIP/include/tinysip/tsip_ssession.h +++ b/trunk/tinySIP/include/tinysip/tsip_ssession.h @@ -66,7 +66,8 @@ typedef enum tsip_ssession_param_type_e sstype_to, sstype_from, sstype_nocontact, - sstype_expires + sstype_expires, + sstype_silent_hangup } tsip_ssession_param_type_t; @@ -79,6 +80,7 @@ tsip_ssession_param_type_t; #define TSIP_SSESSION_SET_FROM(FROM_URI_STR) sstype_from, (const char*)FROM_URI_STR #define TSIP_SSESSION_SET_NO_CONTACT(ENABLED_BOOL) sstype_nocontact, (tsk_bool_t)ENABLED_BOOL #define TSIP_SSESSION_SET_EXPIRES(VALUE_UINT) sstype_expires, (unsigned)VALUE_UINT +#define TSIP_SSESSION_SET_SILENT_HANGUP(ENABLED_BOOL) sstype_silent_hangup, (tsk_bool_t)ENABLED_BOOL #define TSIP_SSESSION_SET_NULL() sstype_null typedef struct tsip_ssession_s @@ -97,6 +99,7 @@ typedef struct tsip_ssession_s struct tsip_uri_s* from; struct tsip_uri_s* to; int64_t expires; + tsk_bool_t silent_hangup; } tsip_ssession_t; diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog.c b/trunk/tinySIP/src/dialogs/tsip_dialog.c index d6e0b9db..19508922 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog.c @@ -180,6 +180,15 @@ tsip_request_t *tsip_dialog_request_new(const tsip_dialog_t *self, const char* m case tsip_PUBLISH: { TSIP_MESSAGE_ADD_HEADER(request, TSIP_HEADER_EXPIRES_VA_ARGS(TSK_TIME_MS_2_S(self->expires))); + /* add caps in Accept-Contact headers */ + tsk_list_foreach(item, self->ss->caps){ + char* value = tsk_null; + tsk_sprintf(&value, "*;%s", TSK_PARAM(item->data)->value); + if(value){ + TSIP_MESSAGE_ADD_HEADER(request, TSIP_HEADER_DUMMY_VA_ARGS("Accept-Contact", value)); + TSK_FREE(value); + } + } break; } @@ -294,8 +303,7 @@ tsip_request_t *tsip_dialog_request_new(const tsip_dialog_t *self, const char* m TSK_OBJECT_SAFE_FREE(uri); } // Service routes - tsk_list_foreach(item, TSIP_DIALOG_GET_STACK(self)->service_routes) - { + tsk_list_foreach(item, TSIP_DIALOG_GET_STACK(self)->service_routes){ TSIP_MESSAGE_ADD_HEADER(request, TSIP_HEADER_ROUTE_VA_ARGS(item->data)); } } diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_invite.c b/trunk/tinySIP/src/dialogs/tsip_dialog_invite.c index 3f62ea03..48b731ca 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_invite.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_invite.c @@ -435,8 +435,7 @@ int tsip_dialog_invite_OnTerminated(tsip_dialog_invite_t *self) TSK_DEBUG_INFO("=== INVITE Dialog terminated ==="); /* Alert the user */ - TSIP_DIALOG_SIGNAL(self, tsip_event_dialog, - tsip_event_code_dialog_terminated, "Dialog terminated"); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminated, "Dialog terminated"); /* Remove from the dialog layer. */ return tsip_dialog_remove(TSIP_DIALOG(self)); diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_layer.c b/trunk/tinySIP/src/dialogs/tsip_dialog_layer.c index 0f695b01..138089be 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_layer.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_layer.c @@ -122,6 +122,7 @@ tsip_dialog_t* tsip_dialog_layer_find(const tsip_dialog_layer_t *self, const cha int tsip_dialog_layer_shutdownAll(tsip_dialog_layer_t *self) { if(self){ + tsk_bool_t wait = tsk_false; tsk_list_item_t *item; tsip_dialog_t *dialog; tsip_dialog_type_t regtype = tsip_dialog_REGISTER; @@ -146,37 +147,79 @@ int tsip_dialog_layer_shutdownAll(tsip_dialog_layer_t *self) } phase1: - /* Phase 1 - shutdown all except register */ + /* Phase 1 - shutdown all except register and silent_hangup */ TSK_DEBUG_INFO("== Shutting down - Phase-1 started =="); +phase1_loop: tsk_list_foreach(item, self->dialogs){ dialog = item->data; - if(dialog->type != tsip_dialog_REGISTER){ - tsip_dialog_shutdown(dialog, tsk_null); + if(dialog->type != tsip_dialog_REGISTER && !dialog->ss->silent_hangup){ + item = tsk_object_ref(item); + if(!tsip_dialog_shutdown(dialog, tsk_null)){ + wait = tsk_true; + } + + // if "tsip_dialog_shutdown()" remove the dialog, then + // "self->dialogs" will be unsafe + if(!(item = tsk_object_unref(item))){ + goto phase1_loop; + } } } tsk_safeobj_unlock(self); /* wait until phase-1 is completed */ - tsk_condwait_timedwait(self->shutdown.condwait, TSIP_DIALOG_SHUTDOWN_TIMEOUT); + if(wait){ + tsk_condwait_timedwait(self->shutdown.condwait, TSIP_DIALOG_SHUTDOWN_TIMEOUT); + } /* lock and goto phase2 */ tsk_safeobj_lock(self); + wait = tsk_false; goto phase2; phase2: /* Phase 2 - unregister */ TSK_DEBUG_INFO("== Shutting down - Phase-2 started =="); self->shutdown.phase2 = tsk_true; +phase2_loop: tsk_list_foreach(item, self->dialogs){ dialog = item->data; if(dialog->type == tsip_dialog_REGISTER){ - tsip_dialog_shutdown(dialog, tsk_null); + item = tsk_object_ref(item); + if(!tsip_dialog_shutdown(dialog, tsk_null)){ + wait = tsk_true; + } + // if "tsip_dialog_shutdown()" remove the dialog, then + // "self->dialogs" will be unsafe + if(!(item = tsk_object_unref(item))){ + goto phase2_loop; + } } } tsk_safeobj_unlock(self); /* wait until phase-2 is completed */ - tsk_condwait_timedwait(self->shutdown.condwait, TSIP_DIALOG_SHUTDOWN_TIMEOUT); + if(wait){ + tsk_condwait_timedwait(self->shutdown.condwait, TSIP_DIALOG_SHUTDOWN_TIMEOUT); + } + + + /* Phase 3 - silenthangup (dialogs will be terminated immediately) */ + TSK_DEBUG_INFO("== Shutting down - Phase-3 =="); +phase3_loop: + tsk_list_foreach(item, self->dialogs){ + dialog = item->data; + if(dialog->ss->silent_hangup){ + item = tsk_object_ref(item); + tsip_dialog_shutdown(dialog, tsk_null); + + // if "tsip_dialog_shutdown()" remove the dialog, then + // "self->dialogs" will be unsafe + if(!(item = tsk_object_unref(item))){ + goto phase3_loop; + } + } + } done: return 0; diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_message.c b/trunk/tinySIP/src/dialogs/tsip_dialog_message.c index 29b9746f..9948c5a3 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_message.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_message.c @@ -245,7 +245,7 @@ int tsip_dialog_message_Started_2_Receiving_X_recvMESSAGE(va_list *app) /* Alert the user. */ TSIP_DIALOG_MESSAGE_SIGNAL(self, tsip_i_message, - tsip_event_code_request_incoming, "Incoming Request.", request); + tsip_event_code_dialog_request_incoming, "Incoming Request.", request); /* Update last incoming MESSAGE */ TSK_OBJECT_SAFE_FREE(self->last_iMessage); @@ -452,8 +452,7 @@ int tsip_dialog_message_OnTerminated(tsip_dialog_message_t *self) TSK_DEBUG_INFO("=== MESSAGE Dialog terminated ==="); /* Alert the user */ - TSIP_DIALOG_SIGNAL(self, tsip_event_dialog, - tsip_event_code_dialog_terminated, "Dialog terminated"); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminated, "Dialog terminated"); /* Remove from the dialog layer. */ return tsip_dialog_remove(TSIP_DIALOG(self)); diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_options.c b/trunk/tinySIP/src/dialogs/tsip_dialog_options.c index 5107a0d5..9b5369d9 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_options.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_options.c @@ -232,6 +232,9 @@ int tsip_dialog_options_Started_2_Sending_X_sendOPTIONS(va_list *app) TSIP_DIALOG(self)->running = tsk_true; tsip_dialog_set_curr_action(TSIP_DIALOG(self), action); + /* alert the user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_connecting, "Dialog connecting"); + return send_OPTIONS(self); } @@ -244,7 +247,7 @@ int tsip_dialog_options_Started_2_Receiving_X_recvOPTIONS(va_list *app) /* Alert the user. */ TSIP_DIALOG_OPTIONS_SIGNAL(self, tsip_i_options, - tsip_event_code_request_incoming, "Incoming Request.", request); + tsip_event_code_dialog_request_incoming, "Incoming Request.", request); return send_response(self, 200, "OK", request); // Wait for accept } diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_publish.client.c b/trunk/tinySIP/src/dialogs/tsip_dialog_publish.client.c index 6b6a477b..2f7a6758 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_publish.client.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_publish.client.c @@ -63,19 +63,32 @@ int tsip_dialog_publish_Trying_2_Terminated_X_300_to_699(va_list *app); int tsip_dialog_publish_Trying_2_Terminated_X_cancel(va_list *app); int tsip_dialog_publish_Connected_2_Trying_X_publish(va_list *app); int tsip_dialog_publish_Any_2_Trying_X_hangup(va_list *app); +int tsip_dialog_publish_Any_2_Trying_X_shutdown(va_list *app); int tsip_dialog_publish_Any_2_Terminated_X_transportError(va_list *app); int tsip_dialog_publish_Any_2_Terminated_X_Error(va_list *app); + /* ======================== conds ======================== */ -int _fsm_cond_unpublishing(tsip_dialog_publish_t* dialog, tsip_message_t* message) +static tsk_bool_t _fsm_cond_unpublishing(tsip_dialog_publish_t* dialog, tsip_message_t* message) { - return dialog->unpublishing ? 1 : 0; + return dialog->unpublishing; } -int _fsm_cond_publishing(tsip_dialog_publish_t* dialog, tsip_message_t* message) +static tsk_bool_t _fsm_cond_publishing(tsip_dialog_publish_t* dialog, tsip_message_t* message) { return !_fsm_cond_unpublishing(dialog, message); } +static tsk_bool_t _fsm_cond_silent_hangup(tsip_dialog_publish_t* dialog, tsip_message_t* message) +{ + return TSIP_DIALOG(dialog)->ss->silent_hangup; +} +static tsk_bool_t _fsm_cond_not_silent_hangup(tsip_dialog_publish_t* dialog, tsip_message_t* message) +{ + return !TSIP_DIALOG(dialog)->ss->silent_hangup; +} +#define _fsm_cond_silent_shutdown _fsm_cond_silent_hangup +#define _fsm_cond_not_silent_shutdown _fsm_cond_not_silent_hangup + /* ======================== actions ======================== */ typedef enum _fsm_action_e @@ -89,7 +102,8 @@ typedef enum _fsm_action_e _fsm_action_2xx, _fsm_action_401_407_421_494, _fsm_action_423, - _fsm_action_300_to_699, + _fsm_action_300_to_699, + _fsm_action_shutdown_timedout, /* Any -> Terminated */ _fsm_action_transporterror, _fsm_action_error, } @@ -256,10 +270,18 @@ int tsip_dialog_publish_init(tsip_dialog_publish_t *self) */ // Any -> (transport error) -> Terminated TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_transporterror, _fsm_state_Terminated, tsip_dialog_publish_Any_2_Terminated_X_transportError, "tsip_dialog_publish_Any_2_Terminated_X_transportError"), - // Any -> (transport error) -> Terminated + // Any -> (error) -> Terminated TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_error, _fsm_state_Terminated, tsip_dialog_publish_Any_2_Terminated_X_Error, "tsip_dialog_publish_Any_2_Terminated_X_Error"), // Any -> (hangup) -> Trying - TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_hangup, _fsm_state_Trying, tsip_dialog_publish_Any_2_Trying_X_hangup, "tsip_dialog_publish_Any_2_Trying_X_hangup"), + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_hangup, _fsm_cond_not_silent_hangup, _fsm_state_Trying, tsip_dialog_publish_Any_2_Trying_X_hangup, "tsip_dialog_publish_Any_2_Trying_X_hangup"), + // Any -> (silenthangup) -> Terminated + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_hangup, _fsm_cond_silent_hangup, _fsm_state_Terminated, tsk_null, "tsip_dialog_publish_Any_2_Trying_X_silenthangup"), + // Any -> (shutdown) -> Trying + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_shutdown, _fsm_cond_not_silent_shutdown, _fsm_state_Trying, tsip_dialog_publish_Any_2_Trying_X_shutdown, "tsip_dialog_publish_Any_2_Trying_X_shutdown"), + // Any -> (silentshutdown) -> Terminated + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_shutdown, _fsm_cond_silent_shutdown, _fsm_state_Terminated, tsk_null, "tsip_dialog_publishe_Any_2_Trying_X_silentshutdown"), + // Any -> (shutdown timedout) -> Terminated + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_shutdown_timedout, _fsm_state_Terminated, tsk_null, "tsip_dialog_publish_shutdown_timedout"), TSK_FSM_ADD_NULL()); @@ -294,6 +316,9 @@ int tsip_dialog_publish_Started_2_Trying_X_publish(va_list *app) TSIP_DIALOG(self)->running = tsk_true; tsip_dialog_set_curr_action(TSIP_DIALOG(self), action); + /* alert the user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_connecting, "Dialog connecting"); + return send_PUBLISH(self); } @@ -329,6 +354,8 @@ int tsip_dialog_publish_Trying_2_Connected_X_2xx(va_list *app) const tsip_response_t *response = va_arg(*app, const tsip_response_t *); int ret; + tsk_bool_t first_time_to_connect = (TSIP_DIALOG(self)->state == tsip_initial); + /* RFC 3903 - 4.1. Identification of Published Event State For each successful PUBLISH request, the ESC will generate and assign an entity-tag and return it in the SIP-ETag header field of the 2xx @@ -339,11 +366,15 @@ int tsip_dialog_publish_Trying_2_Connected_X_2xx(va_list *app) tsk_strupdate(&self->etag, SIP_ETag->value); } - /* Alert the user. */ + /* Alert the user (session)*/ TSIP_DIALOG_PUBLISH_SIGNAL(self, self->unpublishing ? tsip_ao_unpublish : tsip_ao_publish, TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response); + /* Alert the user (dialog)*/ + if(first_time_to_connect){ /* PUBLISH not dialog oriented ...but */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_connected, "Dialog connected"); + } - /* Update the dialog state. */ + /* Update the dialog state */ if((ret = tsip_dialog_update(TSIP_DIALOG(self), response))){ return ret; } @@ -401,8 +432,7 @@ int tsip_dialog_publish_Trying_2_Trying_X_423(va_list *app) send_PUBLISH(self); } else{ - TSIP_DIALOG_PUBLISH_SIGNAL(self, self->unpublishing ? tsip_ao_unpublish : tsip_ao_publish, - tsip_event_code_message_error, "Invalid SIP response.", response); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_message_error, "Received invalid SIP response"); return -1; } @@ -436,8 +466,7 @@ int tsip_dialog_publish_Trying_2_Terminated_X_cancel(va_list *app) ret = tsip_transac_layer_cancel_by_dialog(TSIP_DIALOG_GET_STACK(self)->layer_transac, TSIP_DIALOG(self)); /* Alert the user. */ - TSIP_DIALOG_PUBLISH_SIGNAL(self, self->unpublishing ? tsip_ao_unpublish : tsip_ao_publish, - tsip_event_code_request_cancelled, "Subscription cancelled", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_request_cancelled, "Subscription cancelled"); return ret; } @@ -470,17 +499,28 @@ int tsip_dialog_publish_Any_2_Trying_X_hangup(va_list *app) va_arg(*app, const tsip_message_t *); action = va_arg(*app, const tsip_action_t *); - ///* Schedule timeout (shutdown). */ - //if(shuttingdown){ - // TSIP_DIALOG_PUBLISH_TIMER_SCHEDULE(shutdown); - //} - - //self->unpublishing = tsk_true; - //return send_PUBLISH(self, rt_remove); - /* Set current action */ tsip_dialog_set_curr_action(TSIP_DIALOG(self), action); + /* Alert the user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminating, "Terminating dialog"); + + self->unpublishing = tsk_true; + return send_PUBLISH(self); +} + +/* Any -> (shutdown) -> Trying +*/ +int tsip_dialog_publish_Any_2_Trying_X_shutdown(va_list *app) +{ + tsip_dialog_publish_t *self = va_arg(*app, tsip_dialog_publish_t *); + + /* schedule shutdow timeout */ + TSIP_DIALOG_PUBLISH_TIMER_SCHEDULE(shutdown); + + /* Alert the user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminating, "Terminating dialog"); + self->unpublishing = tsk_true; return send_PUBLISH(self); } @@ -493,8 +533,7 @@ int tsip_dialog_publish_Any_2_Terminated_X_transportError(va_list *app) /*const tsip_message_t *message = va_arg(*app, const tsip_message_t *);*/ /* Alert the user. */ - TSIP_DIALOG_PUBLISH_SIGNAL(self, self->unpublishing ? tsip_ao_unpublish : tsip_ao_publish, - tsip_event_code_transport_error, "Transport error.", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_transport_error, "Transport error."); return 0; } @@ -512,8 +551,7 @@ int tsip_dialog_publish_Any_2_Terminated_X_Error(va_list *app) TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response); } else{ - TSIP_DIALOG_PUBLISH_SIGNAL(self, self->unpublishing ? tsip_ao_unpublish : tsip_ao_publish, - tsip_event_code_global_error, "Global error.", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_global_error, "Global error."); } return 0; @@ -592,8 +630,7 @@ int tsip_dialog_publish_OnTerminated(tsip_dialog_publish_t *self) TSK_DEBUG_INFO("=== PUBLISH Dialog terminated ==="); /* Alert the user */ - TSIP_DIALOG_SIGNAL(self, tsip_event_dialog, - tsip_event_code_dialog_terminated, "Dialog terminated"); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminated, "Dialog terminated"); /* Remove from the dialog layer. */ return tsip_dialog_remove(TSIP_DIALOG(self)); diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_register.client.c b/trunk/tinySIP/src/dialogs/tsip_dialog_register.client.c index 0b99f892..d6a160d9 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_register.client.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_register.client.c @@ -47,7 +47,7 @@ #include "tsk_debug.h" #include "tsk_time.h" -#define DEBUG_STATE_MACHINE 0 +#define DEBUG_STATE_MACHINE 1 #define TSIP_DIALOG_REGISTER_TIMER_SCHEDULE(TX) TSIP_DIALOG_TIMER_SCHEDULE(register, TX) #define TSIP_DIALOG_REGISTER_SIGNAL(self, type, code, phrase, message) \ tsip_register_event_signal(type, TSIP_DIALOG(self)->ss, code, phrase, message) @@ -74,15 +74,26 @@ int tsip_dialog_register_Any_2_Terminated_X_Error(va_list *app); /* ======================== conds ======================== */ -tsk_bool_t _fsm_cond_unregistering(tsip_dialog_register_t* dialog, tsip_message_t* message) +static tsk_bool_t _fsm_cond_unregistering(tsip_dialog_register_t* dialog, tsip_message_t* message) { return dialog->unregistering; } -int _fsm_cond_registering(tsip_dialog_register_t* dialog, tsip_message_t* message) +static tsk_bool_t _fsm_cond_registering(tsip_dialog_register_t* dialog, tsip_message_t* message) { return !_fsm_cond_unregistering(dialog, message); } +static tsk_bool_t _fsm_cond_silent_hangup(tsip_dialog_register_t* dialog, tsip_message_t* message) +{ + return TSIP_DIALOG(dialog)->ss->silent_hangup; +} +static tsk_bool_t _fsm_cond_not_silent_hangup(tsip_dialog_register_t* dialog, tsip_message_t* message) +{ + return !TSIP_DIALOG(dialog)->ss->silent_hangup; +} +#define _fsm_cond_silent_shutdown _fsm_cond_silent_hangup +#define _fsm_cond_not_silent_shutdown _fsm_cond_not_silent_hangup + /* ======================== actions ======================== */ typedef enum _fsm_action_e { @@ -262,11 +273,15 @@ int tsip_dialog_register_init(tsip_dialog_register_t *self) * === Any === */ // Any -> (hangup) -> Trying - TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_hangup, _fsm_state_Trying, tsip_dialog_register_Any_2_Trying_X_hangup, "tsip_dialog_register_Any_2_Trying_X_hangup"), + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_hangup, _fsm_cond_not_silent_hangup, _fsm_state_Trying, tsip_dialog_register_Any_2_Trying_X_hangup, "tsip_dialog_register_Any_2_Trying_X_hangup"), + // Any -> (silenthangup) -> Terminated + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_hangup, _fsm_cond_silent_hangup, _fsm_state_Terminated, tsk_null, "tsip_dialog_register_Any_2_Trying_X_silenthangup"), // Any -> (shutdown) -> Trying - TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_shutdown, _fsm_state_Trying, tsip_dialog_register_Any_2_Trying_X_shutdown, "tsip_dialog_register_Any_2_Trying_X_shutdown"), + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_shutdown, _fsm_cond_not_silent_shutdown, _fsm_state_Trying, tsip_dialog_register_Any_2_Trying_X_shutdown, "tsip_dialog_register_Any_2_Trying_X_shutdown"), + // Any -> (silentshutdown) -> Terminated + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_shutdown, _fsm_cond_silent_shutdown, _fsm_state_Terminated, tsk_null, "tsip_dialog_register_Any_2_Trying_X_silentshutdown"), // Any -> (shutdown timedout) -> Terminated - TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_shutdown_timedout, _fsm_state_Terminated, tsk_null, "tsip_dialog_register_** Shutdown timedout"), + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_shutdown_timedout, _fsm_state_Terminated, tsk_null, "tsip_dialog_register_shutdown_timedout"), // Any -> (transport error) -> Terminated TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_transporterror, _fsm_state_Terminated, tsip_dialog_register_Any_2_Terminated_X_transportError, "tsip_dialog_register_Any_2_Terminated_X_transportError"), // Any -> (error) -> Terminated @@ -304,6 +319,9 @@ int tsip_dialog_register_Started_2_Trying_X_register(va_list *app) TSIP_DIALOG(self)->running = tsk_true; tsip_dialog_set_curr_action(TSIP_DIALOG(self), action); + /* alert the user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_connecting, "Dialog connecting"); + return send_REGISTER(self, tsk_true); } @@ -326,6 +344,8 @@ int tsip_dialog_register_Trying_2_Connected_X_2xx(va_list *app) tsip_dialog_register_t *self = va_arg(*app, tsip_dialog_register_t *); const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + tsk_bool_t first_time_to_connect = (TSIP_DIALOG(self)->state == tsip_initial); + /* - Set P-associated-uriS * - Update service-routes * - Update Pats @@ -375,7 +395,7 @@ int tsip_dialog_register_Trying_2_Connected_X_2xx(va_list *app) } /* 3GPP TS 24.229 - 5.1.1.2 Initial registration */ - if((TSIP_DIALOG(self)->state ==tsip_initial)){ + if(first_time_to_connect){ tsk_bool_t barred = tsk_true; const tsk_list_item_t *item; const tsip_uri_t *uri; @@ -409,7 +429,7 @@ int tsip_dialog_register_Trying_2_Connected_X_2xx(va_list *app) } } - /* Update the dialog state. */ + /* Update the dialog state */ if((ret = tsip_dialog_update(TSIP_DIALOG(self), response))){ return ret; } @@ -421,9 +441,13 @@ int tsip_dialog_register_Trying_2_Connected_X_2xx(va_list *app) self->timerrefresh.timeout = tsip_dialog_get_newdelay(TSIP_DIALOG(self), response); TSIP_DIALOG_REGISTER_TIMER_SCHEDULE(refresh); - /* Alert the user. */ + /* Alert the user (session) */ TSIP_DIALOG_REGISTER_SIGNAL(self, tsip_ao_register, TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response); + /* Alert the user (dialog) */ + if(first_time_to_connect){ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_connected, "Dialog connected"); + } return ret; } @@ -435,7 +459,7 @@ int tsip_dialog_register_Trying_2_Terminated_X_2xx(va_list *app) tsip_dialog_register_t *self = va_arg(*app, tsip_dialog_register_t *); const tsip_message_t *message = va_arg(*app, const tsip_message_t *); - /* Alert the user. */ + /* Alert the user */ TSIP_DIALOG_REGISTER_SIGNAL(self, tsip_ao_unregister, TSIP_RESPONSE_CODE(message), TSIP_RESPONSE_PHRASE(message), message); @@ -530,8 +554,7 @@ int tsip_dialog_register_Trying_2_Terminated_X_cancel(va_list *app) ret = tsip_transac_layer_cancel_by_dialog(TSIP_DIALOG_GET_STACK(self)->layer_transac, TSIP_DIALOG(self)); /* Alert the user. */ - TSIP_DIALOG_REGISTER_SIGNAL(self, self->unregistering ? tsip_ao_unregister : tsip_ao_register, - tsip_event_code_request_cancelled, "Registration cancelled", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_request_cancelled, "Registration cancelled"); return ret; } @@ -567,6 +590,9 @@ int tsip_dialog_register_Any_2_Trying_X_hangup(va_list *app) /* Set current action */ tsip_dialog_set_curr_action(TSIP_DIALOG(self), action); + /* Alert the user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminating, "Terminating dialog"); + self->unregistering = tsk_true; return send_REGISTER(self, tsk_true); } @@ -580,6 +606,9 @@ int tsip_dialog_register_Any_2_Trying_X_shutdown(va_list *app) /* schedule shutdow timeout */ TSIP_DIALOG_REGISTER_TIMER_SCHEDULE(shutdown); + /* alert user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminating, "Terminating dialog"); + self->unregistering = tsk_true; return send_REGISTER(self, tsk_true); } @@ -592,8 +621,7 @@ int tsip_dialog_register_Any_2_Terminated_X_transportError(va_list *app) /*const tsip_message_t *message = va_arg(*app, const tsip_message_t *);*/ /* Alert the user. */ - TSIP_DIALOG_REGISTER_SIGNAL(self, self->unregistering ? tsip_ao_unregister : tsip_ao_register, - tsip_event_code_transport_error, "Transport error.", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_transport_error, "Transport error."); return 0; } @@ -611,8 +639,7 @@ int tsip_dialog_register_Any_2_Terminated_X_Error(va_list *app) TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response); } else{ - TSIP_DIALOG_REGISTER_SIGNAL(self, self->unregistering ? tsip_ao_unregister : tsip_ao_register, - tsip_event_code_global_error, "Global error.", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_global_error, "Global error."); } return 0; @@ -716,12 +743,10 @@ int send_REGISTER(tsip_dialog_register_t *self, tsk_bool_t initial) } if(!(ret = tsip_dialog_request_send(TSIP_DIALOG(self), request))){ - TSIP_DIALOG_REGISTER_SIGNAL(self, self->unregistering ? tsip_o_unregister : tsip_o_register, - tsip_event_code_request_sent, "(un)REGISTER request successfully sent.", request); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_request_sent, "(un)REGISTER request successfully sent."); } else{ - TSIP_DIALOG_REGISTER_SIGNAL(self, self->unregistering ? tsip_ao_unregister : tsip_ao_register, - tsip_event_code_transport_error, "Transport error.", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_transport_error, "Transport error."); } TSK_OBJECT_SAFE_FREE(request); @@ -748,8 +773,7 @@ int tsip_dialog_register_OnTerminated(tsip_dialog_register_t *self) } /* Alert the user */ - TSIP_DIALOG_SIGNAL(self, tsip_event_dialog, - tsip_event_code_dialog_terminated, "Dialog terminated"); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminated, "Dialog terminated"); /* Remove from the dialog layer. */ return tsip_dialog_remove(TSIP_DIALOG(self)); diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_subscribe.client.c b/trunk/tinySIP/src/dialogs/tsip_dialog_subscribe.client.c index 1067c8bc..7f1b8e02 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_subscribe.client.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_subscribe.client.c @@ -43,7 +43,7 @@ -#define DEBUG_STATE_MACHINE 0 +#define DEBUG_STATE_MACHINE 1 #define TSIP_DIALOG_SUBSCRIBE_TIMER_SCHEDULE(TX) TSIP_DIALOG_TIMER_SCHEDULE(subscribe, TX) #define TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, type, code, phrase, message) \ tsip_subscribe_event_signal(type, TSIP_DIALOG(self)->ss, code, phrase, message) @@ -74,16 +74,16 @@ int tsip_dialog_subscribe_Any_2_Terminated_X_Error(va_list *app); /* ======================== conds ======================== */ -tsk_bool_t _fsm_cond_unsubscribing(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) +static tsk_bool_t _fsm_cond_unsubscribing(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) { return dialog->unsubscribing; } -tsk_bool_t _fsm_cond_subscribing(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) +static tsk_bool_t _fsm_cond_subscribing(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) { return !_fsm_cond_unsubscribing(dialog, message); } -tsk_bool_t _fsm_cond_notify_terminated(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) +static tsk_bool_t _fsm_cond_notify_terminated(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) { const tsip_header_Subscription_State_t *hdr_state; if((hdr_state = (const tsip_header_Subscription_State_t*)tsip_message_get_header(message, tsip_htype_Subscription_State))) @@ -93,12 +93,22 @@ tsk_bool_t _fsm_cond_notify_terminated(tsip_dialog_subscribe_t* dialog, tsip_mes } return tsk_false; } - -tsk_bool_t _fsm_cond_notify_not_terminated(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) +static tsk_bool_t _fsm_cond_notify_not_terminated(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) { return !_fsm_cond_notify_terminated(dialog, message); } +static tsk_bool_t _fsm_cond_silent_hangup(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) +{ + return TSIP_DIALOG(dialog)->ss->silent_hangup; +} +static tsk_bool_t _fsm_cond_not_silent_hangup(tsip_dialog_subscribe_t* dialog, tsip_message_t* message) +{ + return !TSIP_DIALOG(dialog)->ss->silent_hangup; +} +#define _fsm_cond_silent_shutdown _fsm_cond_silent_hangup +#define _fsm_cond_not_silent_shutdown _fsm_cond_not_silent_hangup + /* ======================== actions ======================== */ typedef enum _fsm_action_e { @@ -284,11 +294,15 @@ int tsip_dialog_subscribe_init(tsip_dialog_subscribe_t *self) * === Any === */ // Any -> (hangup) -> Trying - TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_hangup, _fsm_state_Trying, tsip_dialog_subscribe_Any_2_Trying_X_hangup, "tsip_dialog_subscribe_Any_2_Trying_X_hangup"), + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_hangup, _fsm_cond_not_silent_hangup, _fsm_state_Trying, tsip_dialog_subscribe_Any_2_Trying_X_hangup, "tsip_dialog_subscribe_Any_2_Trying_X_hangup"), + // Any -> (silenthangup) -> Terminated + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_hangup, _fsm_cond_silent_hangup, _fsm_state_Terminated, tsk_null, "tsip_dialog_subscribe_Any_2_Trying_X_silenthangup"), // Any -> (shutdown) -> Trying - TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_shutdown, _fsm_state_Trying, tsip_dialog_subscribe_Any_2_Trying_X_shutdown, "tsip_dialog_subscribe_Any_2_Trying_X_shutdown"), + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_shutdown, _fsm_cond_not_silent_shutdown, _fsm_state_Trying, tsip_dialog_subscribe_Any_2_Trying_X_shutdown, "tsip_dialog_subscribe_Any_2_Trying_X_shutdown"), + // Any -> (silentshutdown) -> Terminated + TSK_FSM_ADD(tsk_fsm_state_any, _fsm_action_shutdown, _fsm_cond_silent_shutdown, _fsm_state_Terminated, tsk_null, "tsip_dialog_subscribe_Any_2_Trying_X_silentshutdown"), // Any -> (shutdown timedout) -> Terminated - TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_shutdown_timedout, _fsm_state_Terminated, tsk_null, "tsip_dialog_subscribe_** Shutdown timedout"), + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_shutdown_timedout, _fsm_state_Terminated, tsk_null, "tsip_dialog_subscribe_shutdown_timedout"), // Any -> (transport error) -> Terminated TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_transporterror, _fsm_state_Terminated, tsip_dialog_subscribe_Any_2_Terminated_X_transportError, "tsip_dialog_subscribe_Any_2_Terminated_X_transportError"), // Any -> (error) -> Terminated @@ -327,6 +341,9 @@ int tsip_dialog_subscribe_Started_2_Trying_X_subscribe(va_list *app) TSIP_DIALOG(self)->running = tsk_true; tsip_dialog_set_curr_action(TSIP_DIALOG(self), action); + /* alert the user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_connecting, "Dialog connecting"); + return send_SUBSCRIBE(self); } @@ -362,15 +379,21 @@ int tsip_dialog_subscribe_Trying_2_Connected_X_2xx(va_list *app) tsip_dialog_subscribe_t *self = va_arg(*app, tsip_dialog_subscribe_t *); const tsip_response_t *response = va_arg(*app, const tsip_response_t *); - /* Alert the user. */ - TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, self->unsubscribing ? tsip_ao_unsubscribe : tsip_ao_subscribe, - TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response); + tsk_bool_t first_time_to_connect = (TSIP_DIALOG(self)->state == tsip_initial); /* Update the dialog state. */ if((ret = tsip_dialog_update(TSIP_DIALOG(self), response))){ return ret; } + /* Alert the user(session) */ + TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, self->unsubscribing ? tsip_ao_unsubscribe : tsip_ao_subscribe, + TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response); + /* Alert the user(dialog) */ + if(first_time_to_connect){ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_connected, "Dialog connected"); + } + /* Reset current action */ tsip_dialog_set_curr_action(TSIP_DIALOG(self), tsk_null); @@ -424,8 +447,7 @@ int tsip_dialog_subscribe_Trying_2_Trying_X_423(va_list *app) send_SUBSCRIBE(self); } else{ - TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, self->unsubscribing ? tsip_ao_unsubscribe : tsip_ao_subscribe, - tsip_event_code_message_error, "Invalid SIP response.", response); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_message_error, "Received invalid SIP response."); return -1; } @@ -459,8 +481,7 @@ int tsip_dialog_subscribe_Trying_2_Terminated_X_cancel(va_list *app) ret = tsip_transac_layer_cancel_by_dialog(TSIP_DIALOG_GET_STACK(self)->layer_transac, TSIP_DIALOG(self)); /* Alert the user. */ - TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, self->unsubscribing ? tsip_ao_unsubscribe : tsip_ao_subscribe, - tsip_event_code_request_cancelled, "Subscription cancelled", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_request_cancelled, "Subscription cancelled"); return ret; } @@ -508,7 +529,7 @@ int tsip_dialog_subscribe_Connected_2_Connected_X_NOTIFY(va_list *app) /* Alert the user */ TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, tsip_i_notify, - tsip_event_code_request_incoming, "Incoming NOTIFY.", request); + tsip_event_code_dialog_request_incoming, "Incoming NOTIFY.", request); return ret; } @@ -522,7 +543,7 @@ int tsip_dialog_subscribe_Connected_2_Terminated_X_NOTIFY(va_list *app) /* Alert the user */ TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, tsip_i_notify, - tsip_event_code_request_incoming, "Incoming NOTIFY.", request); + tsip_event_code_dialog_request_incoming, "Incoming NOTIFY.", request); return send_200NOTIFY(self, request); } @@ -541,6 +562,9 @@ int tsip_dialog_subscribe_Any_2_Trying_X_hangup(va_list *app) /* Set current action */ tsip_dialog_set_curr_action(TSIP_DIALOG(self), action); + /* Alert the user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminating, "Terminating dialog"); + self->unsubscribing = tsk_true; return send_SUBSCRIBE(self); } @@ -554,6 +578,9 @@ int tsip_dialog_subscribe_Any_2_Trying_X_shutdown(va_list *app) /* schedule shutdow timeout */ TSIP_DIALOG_SUBSCRIBE_TIMER_SCHEDULE(shutdown); + /* alert user */ + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminating, "Terminating dialog"); + self->unsubscribing = tsk_true; return send_SUBSCRIBE(self); } @@ -566,8 +593,7 @@ int tsip_dialog_subscribe_Any_2_Terminated_X_transportError(va_list *app) /* const tsip_response_t *response = va_arg(*app, const tsip_response_t *); */ /* Alert the user. */ - TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, self->unsubscribing ? tsip_ao_unsubscribe : tsip_ao_subscribe, - tsip_event_code_transport_error, "Transport error.", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_transport_error, "Transport error."); return 0; } @@ -585,8 +611,7 @@ int tsip_dialog_subscribe_Any_2_Terminated_X_Error(va_list *app) TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response); } else{ - TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, self->unsubscribing ? tsip_ao_unsubscribe : tsip_ao_subscribe, - tsip_event_code_global_error, "Global error.", tsk_null); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_global_error, "Global error."); } return 0; @@ -653,8 +678,7 @@ int tsip_dialog_subscribe_OnTerminated(tsip_dialog_subscribe_t *self) TSK_DEBUG_INFO("=== SUBSCRIBE Dialog terminated ==="); /* Alert the user */ - TSIP_DIALOG_SIGNAL(self, tsip_event_dialog, - tsip_event_code_dialog_terminated, "Dialog terminated"); + TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminated, "Dialog terminated"); /* Remove from the dialog layer. */ return tsip_dialog_remove(TSIP_DIALOG(self)); diff --git a/trunk/tinySIP/src/tsip.c b/trunk/tinySIP/src/tsip.c index 76059b1f..0f712149 100644 --- a/trunk/tinySIP/src/tsip.c +++ b/trunk/tinySIP/src/tsip.c @@ -29,6 +29,8 @@ */ #include "tsip.h" +#include "tinysip/tsip_event.h" + #include "tinysip/parsers/tsip_parser_uri.h" #include "tinysip/transactions/tsip_transac_layer.h" @@ -60,6 +62,14 @@ static void *run(void* self); /**@defgroup tsip_stack_group 3GPP IMS/LTE Stack */ +extern tsip_event_t* tsip_event_create(tsip_ssession_t* ss, short code, const char* phrase, const tsip_message_t* sipmessage, tsip_event_type_t type); +#define TSIP_STACK_SIGNAL(self, code, phrase) \ + { \ + tsip_event_t* e; \ + if((e = tsip_event_create(tsk_null, code, phrase, tsk_null, tsip_event_stack))){ \ + TSK_RUNNABLE_ENQUEUE_OBJECT(TSK_RUNNABLE(self), e); \ + } \ + } /* Internal function used to set all user's parameters */ int __tsip_stack_set(tsip_stack_t *self, va_list* app) @@ -403,6 +413,8 @@ tsip_stack_handle_t* tsip_stack_create(tsip_stack_callback_f callback, const cha stack->network.proxy_cscf_port = 5060; stack->network.proxy_cscf_type = tnet_socket_type_udp_ipv4; + // all events should be delivered to the user before the stack stop + tsk_runnable_set_important(TSK_RUNNABLE(stack), tsk_true); /* === DNS context === * Because of TSIP_STACK_SET_DNS_SERVER(), ctx should be created before calling __tsip_stack_set() @@ -543,12 +555,16 @@ int tsip_stack_start(tsip_stack_handle_t *self) stack->started = tsk_true; + /* Signal to the end-user that the stack has been started */ + TSIP_STACK_SIGNAL(self, tsip_event_code_stack_started, "Stack started"); + TSK_DEBUG_INFO("SIP STACK -- START"); return ret; } bail: + TSIP_STACK_SIGNAL(self, tsip_event_code_stack_failed_to_start, "Stack failed to start"); return ret; } @@ -641,6 +657,19 @@ int tsip_stack_stop(tsip_stack_handle_t *self) one_failed = tsk_true; } + /* Signal to the end-user that the stack has been stopped + * should be done before tsk_runnable_stop() which will stop the thread + * responsible for the callbacks. The enqueued data have been marked as "important". + * As both the timer manager and the transport layer have been stoped there is no + * chance to got additional events */ + if(one_failed){ + TSIP_STACK_SIGNAL(self, tsip_event_code_stack_failed_to_stop, "Stack failed to stop"); + } + else{ + TSIP_STACK_SIGNAL(self, tsip_event_code_stack_stopped, "Stack stopped"); + } + + /* Stop runnable (run() thread) */ if((ret = tsk_runnable_stop(TSK_RUNNABLE(stack)))){ TSK_DEBUG_WARN("Failed to stop the stack"); one_failed = tsk_true; @@ -735,6 +764,7 @@ static void *run(void* self) if((curr = TSK_RUNNABLE_POP_FIRST(stack))){ tsip_event_t *sipevent = (tsip_event_t*)curr->data; if(stack->callback){ + sipevent->userdata = stack->userdata; // needed by sessionless events stack->callback(sipevent); } tsk_object_unref(curr); diff --git a/trunk/tinySIP/src/tsip_event.c b/trunk/tinySIP/src/tsip_event.c index 39a4cfe6..601ae516 100644 --- a/trunk/tinySIP/src/tsip_event.c +++ b/trunk/tinySIP/src/tsip_event.c @@ -50,20 +50,19 @@ tsip_event_t* tsip_event_create(tsip_ssession_t* ss, short code, const char* phr /* initialize a sip sevent */ int tsip_event_init(tsip_event_t* self, tsip_ssession_t *ss, short code, const char *phrase, const tsip_message_t* sipmessage, tsip_event_type_t type) { - if(self && ss && ss->stack){ - self->ss = tsk_object_ref(ss); - self->code = code; - tsk_strupdate(&(self->phrase), phrase); - self->type = type; - if(sipmessage){ - self->sipmessage = tsk_object_ref((void*)sipmessage); - } - return 0; - } - else{ + if(!self){ TSK_DEBUG_ERROR("Invalid parameter"); return -1; } + + self->ss = tsk_object_ref(ss); + self->code = code; + tsk_strupdate(&(self->phrase), phrase); + self->type = type; + if(sipmessage){ + self->sipmessage = tsk_object_ref((void*)sipmessage); + } + return 0; } /* signal new event (enque) */ diff --git a/trunk/tinySIP/src/tsip_ssession.c b/trunk/tinySIP/src/tsip_ssession.c index 12aa0e3b..adc98efc 100644 --- a/trunk/tinySIP/src/tsip_ssession.c +++ b/trunk/tinySIP/src/tsip_ssession.c @@ -196,6 +196,12 @@ int __tsip_ssession_set(tsip_ssession_t *self, va_list *app) break; } + case sstype_silent_hangup: + { /* sstype_silent_hangup, (tsk_bool_t)ENABLED_BOOL */ + self->silent_hangup = va_arg(*app, tsk_bool_t); + break; + } + default: { /* va_list will be unsafe => exit */ TSK_DEBUG_ERROR("NOT SUPPORTED as valid pname %d.", curr);