BEAST/BSE - Better Audio System and Sound Engine
0.8.2
|
00001 00002 /*-------- begin ../sfi/sfidl generated code --------*/ 00003 00004 00005 00006 #include <bse/bsecxxplugin.hh> 00007 00008 00009 /* enum prototypes */ 00010 00011 00012 /* choice prototypes */ 00013 00014 00015 /* record prototypes */ 00016 00017 00018 /* sequence prototypes */ 00019 00020 00021 /* class prototypes */ 00022 namespace Bse { 00023 namespace Arts { 00024 class CompressorBase; 00025 class Compressor; 00026 #define BSE_ARTS_TYPE_COMPRESSOR BSE_CXX_DECLARED_CLASS_TYPE (Bse::Arts, Compressor) 00027 #define BSE_ARTS_IS_COMPRESSOR(o) (::Bse::CxxBase::instance_is_a (o, BSE_ARTS_TYPE_COMPRESSOR)) 00028 00029 00030 /* enum definitions */ 00031 00032 00033 /* sequence definitions */ 00034 00035 00036 /* record definitions */ 00037 00038 00039 /* enum declarations */ 00040 00041 00042 /* sequence type declarations */ 00043 00044 00045 /* record type declarations */ 00046 00047 00048 /* procedure prototypes */ 00049 00050 00051 /* class definitions */ 00052 BSE_CXX_DECLARE_CLASS (Compressor); 00053 class CompressorBase : public ::Bse::Effect { 00054 template<bool> static inline const unsigned char* inlined_pixstream(); 00055 public: 00056 static inline const unsigned char* pixstream () { return inlined_pixstream<true>(); } 00057 static void class_init (::Bse::CxxBaseClass *klass); 00058 static inline const char* options () { return ""; } 00059 static inline const char* category () { static const char *c = NULL; 00060 return c ? c : c = sfi_category_concat ("/Modules", ("/Enhance/ArtsCompressor")); } 00061 static inline const char* i18n_category () { static const char *c = NULL; 00062 return c ? c : c = sfi_category_concat ("/Modules", _("/Enhance/ArtsCompressor")); } 00063 static inline const char* blurb () { return _("ArtsCompressor compresses the sound.\n\nCompression is a dynamic operation that consists of two parts:\n(1) the current input volume of the signal is detected\n(2) if it exceeds a given theshold, the volume of the output signal will be reduced\n\nThe input volume detection has an attack and a release half-life time which can be specified - in milliseconds - with the corresponding properties. This envelope causes the compressor to adapt slowly to the actual input signal level.\n\nThe ratio specifies how the volume of a signal should be reduced, if it exceeds the threshold. A compression ratio of 2:1 means for instance that if the input volume is 2 dB over the threshold, the output volume will be 1 dB over the threshold. Example (threshold = -10, ratio 2:1):\ninput = -20 dB => output = -20 dB\ninput = -10 dB => output = -10 dB\ninput = 0 dB => output = -5 dB\ninput = 10 dB => output = 0 dB\ninput = 20 dB => output = 5 dB\n\nCompression is often thought off as an operation to make music \"sound louder\". To achieve this, the first step is to reduce the dynamic range like in the example above. As the loud parts of the music have been reduced in volume, we can now amplify everything, without risking distortion or clipping. This has the overall effect of the music sounding louder. In our example, an output amplification of 5 dB would be okay, if the input signal never exceeded 0 dB."); } 00064 static inline const char* authors () { return "Matthias Kretz, Stefan Westerfeld"; } 00065 static inline const char* license () { return _("GNU Lesser General Public License"); } 00066 static inline const char* type_name () { return "BseArtsCompressor"; } 00067 public: 00068 enum { 00069 ICHANNEL_AUDIO_IN1, 00070 ICHANNEL_AUDIO_IN2, 00071 N_ICHANNELS 00072 }; 00073 public: 00074 enum { 00075 OCHANNEL_AUDIO_OUT1, 00076 OCHANNEL_AUDIO_OUT2, 00077 N_OCHANNELS 00078 }; 00079 protected: 00080 enum CompressorPropertyID { 00081 PROP_ATTACK = 1, 00082 PROP_RELEASE, 00083 PROP_THRESHOLD_DB, 00084 PROP_RATIO_TO_ONE, 00085 PROP_OUTPUT_DB, 00086 PROP_AUTO_OUTPUT, 00087 PROP_THRESHOLD, 00088 PROP_RATIO, 00089 PROP_OUTPUT, 00090 }; 00091 public: 00092 /* "transport" structure to configure synthesis modules from properties */ 00093 struct CompressorProperties { 00094 typedef CompressorPropertyID IDType; 00095 Sfi::Real attack; 00096 Sfi::Real release; 00097 Sfi::Real threshold_db; 00098 Sfi::Real ratio_to_one; 00099 Sfi::Real output_db; 00100 bool auto_output; 00101 Sfi::Real threshold; 00102 Sfi::Real ratio; 00103 Sfi::Real output; 00104 explicit CompressorProperties (CompressorBase *p) : 00105 attack (p->attack), 00106 release (p->release), 00107 threshold_db (p->threshold_db), 00108 ratio_to_one (p->ratio_to_one), 00109 output_db (p->output_db), 00110 auto_output (p->auto_output), 00111 threshold (p->threshold), 00112 ratio (p->ratio), 00113 output (p->output) 00114 { 00115 } 00116 }; 00117 protected: 00118 typedef void AutoUpdateCategory; 00119 protected: 00120 Sfi::Real attack; 00121 Sfi::Real release; 00122 Sfi::Real threshold_db; 00123 Sfi::Real ratio_to_one; 00124 Sfi::Real output_db; 00125 bool auto_output; 00126 Sfi::Real threshold; 00127 Sfi::Real ratio; 00128 Sfi::Real output; 00129 public: 00130 void get_property (CompressorPropertyID prop_id, ::Bse::Value &value, GParamSpec *pspec) 00131 { 00132 switch (prop_id) { 00133 case PROP_ATTACK: 00134 sfi_value_set_real (&value, attack); 00135 break; 00136 case PROP_RELEASE: 00137 sfi_value_set_real (&value, release); 00138 break; 00139 case PROP_THRESHOLD_DB: 00140 sfi_value_set_real (&value, threshold_db); 00141 break; 00142 case PROP_RATIO_TO_ONE: 00143 sfi_value_set_real (&value, ratio_to_one); 00144 break; 00145 case PROP_OUTPUT_DB: 00146 sfi_value_set_real (&value, output_db); 00147 break; 00148 case PROP_AUTO_OUTPUT: 00149 sfi_value_set_bool (&value, auto_output); 00150 break; 00151 case PROP_THRESHOLD: 00152 sfi_value_set_real (&value, threshold); 00153 break; 00154 case PROP_RATIO: 00155 sfi_value_set_real (&value, ratio); 00156 break; 00157 case PROP_OUTPUT: 00158 sfi_value_set_real (&value, output); 00159 break; 00160 }; 00161 } 00162 void set_property (CompressorPropertyID prop_id, const ::Bse::Value &value, GParamSpec *pspec) 00163 { 00164 switch (prop_id) { 00165 case PROP_ATTACK: 00166 attack = sfi_value_get_real (&value); 00167 break; 00168 case PROP_RELEASE: 00169 release = sfi_value_get_real (&value); 00170 break; 00171 case PROP_THRESHOLD_DB: 00172 threshold_db = sfi_value_get_real (&value); 00173 break; 00174 case PROP_RATIO_TO_ONE: 00175 ratio_to_one = sfi_value_get_real (&value); 00176 break; 00177 case PROP_OUTPUT_DB: 00178 output_db = sfi_value_get_real (&value); 00179 break; 00180 case PROP_AUTO_OUTPUT: 00181 auto_output = sfi_value_get_bool (&value); 00182 break; 00183 case PROP_THRESHOLD: 00184 threshold = sfi_value_get_real (&value); 00185 break; 00186 case PROP_RATIO: 00187 ratio = sfi_value_get_real (&value); 00188 break; 00189 case PROP_OUTPUT: 00190 output = sfi_value_get_real (&value); 00191 break; 00192 }; 00193 property_changed (CompressorPropertyID (prop_id)); 00194 update_modules(); 00195 switch (prop_id) { 00196 default: ; 00197 }; 00198 } 00199 virtual bool editable_property (CompressorPropertyID prop_id, GParamSpec *pspec) 00200 { 00201 return true; 00202 } 00203 virtual void get_candidates (CompressorPropertyID prop_id, ::Bse::PropertyCandidatesHandle &pch, GParamSpec *pspec) 00204 { 00205 } 00206 void property_updated (CompressorPropertyID prop_id, guint64 tick_stamp, double prop_value, GParamSpec *pspec) 00207 { 00208 bool seen_change = false; 00209 switch (prop_id) { 00210 default: ; 00211 }; 00212 if (seen_change && 00213 property_changed (CompressorPropertyID (prop_id))) 00214 update_modules(); 00215 } 00216 private: 00217 static struct StaticData { 00218 int dummy; 00219 } static_data; 00220 protected: 00221 virtual bool property_changed (CompressorPropertyID) { return false; } 00222 virtual ~CompressorBase () 00223 { 00224 } 00225 public: 00226 }; 00227 00228 00229 /* choice implementations */ 00230 00231 00232 /* record implementations */ 00233 00234 00235 /* sequence implementations */ 00236 00237 00238 /* class implementations */ 00239 void 00240 CompressorBase::class_init (::Bse::CxxBaseClass *klass) 00241 { 00242 klass->set_accessors (::Bse::cxx_get_property_trampoline<CompressorBase, CompressorPropertyID>, 00243 ::Bse::cxx_set_property_trampoline<CompressorBase, CompressorPropertyID>, 00244 ::Bse::cxx_editable_property_trampoline<CompressorBase, CompressorPropertyID>, 00245 ::Bse::cxx_get_candidates_trampoline<CompressorBase, CompressorPropertyID>, 00246 NULL); 00247 klass->add_param (PROP_ATTACK, sfidl_pspec_SfiReal (_("Parameters"),"/opt/src/beast/plugins/artscompressor.idl",768,"attack",_ ( "Attack [ms]" ) , _ ( "Set the attack time in milliseconds" ) , 1.00000000000000000e+01 , 1.00000000000000006e-01 , 2.50000000000000000e+02 , 1.00000000000000000e+01 , ":r:w:S:G:" ":scale")); 00248 klass->add_param (PROP_RELEASE, sfidl_pspec_SfiReal (_("Parameters"),"/opt/src/beast/plugins/artscompressor.idl",769,"release",_ ( "Release [ms]" ) , _ ( "Set the release time in milliseconds" ) , 1.00000000000000000e+01 , 1.00000000000000006e-01 , 2.50000000000000000e+02 , 1.00000000000000000e+01 , ":r:w:S:G:" ":scale")); 00249 klass->add_param (PROP_THRESHOLD_DB, sfidl_pspec_Gain (_("Parameters"),"/opt/src/beast/plugins/artscompressor.idl",770,"threshold_db",_ ( "Threshold [dB]" ) , _ ( "Only parts louder than threshold are compressed" ) , 0LL , - 100LL , 0LL , 1LL , ":r:w:S:G:" ":scale")); 00250 klass->add_param (PROP_RATIO_TO_ONE, sfidl_pspec_SfiReal (_("Parameters"),"/opt/src/beast/plugins/artscompressor.idl",771,"ratio_to_one",_ ( "Ratio [x:1]" ) , _ ( "Set the compression ratio to x:1" ) , 2LL , 1.00000000000000000e+00 , 2.00000000000000000e+01 , 1LL , ":r:w:S:G:" ":scale")); 00251 klass->add_param (PROP_OUTPUT_DB, sfidl_pspec_Gain (_("Parameters"),"/opt/src/beast/plugins/artscompressor.idl",772,"output_db",_ ( "Output [dB]" ) , _ ( "Set the output amplification" ) , 0LL , - 20LL , 20LL , 1LL , ":r:w:S:G:" ":scale")); 00252 klass->add_param (PROP_AUTO_OUTPUT, sfidl_pspec_Bool (_("Parameters"),"/opt/src/beast/plugins/artscompressor.idl",773,"auto_output",_ ( "Auto Output" ) , _ ( "Adjust the output amplification automatically according to threshold and ratio" ) , FALSE , ":r:w:G:")); 00253 klass->add_param (PROP_THRESHOLD, sfidl_pspec_SfiReal ("compat","/opt/src/beast/plugins/artscompressor.idl",776,"threshold","" , "" , 1LL , 1.00000000000000008e-05 , 1LL , 1.00000000000000002e-02 , "w")); 00254 klass->add_param (PROP_RATIO, sfidl_pspec_SfiReal ("compat","/opt/src/beast/plugins/artscompressor.idl",777,"ratio","" , "" , 8.00000000000000044e-01 , 0.00000000000000000e+00 , 1.00000000000000000e+00 , 1.00000000000000006e-01 , "w")); 00255 klass->add_param (PROP_OUTPUT, sfidl_pspec_SfiReal ("compat","/opt/src/beast/plugins/artscompressor.idl",778,"output","" , "" , 1LL , 1.00000000000000006e-01 , 1.00000000000000000e+01 , 1LL , "w")); 00256 klass->add_ichannel ("audio_in1", _("Audio In1"), _("Audio input 1"), ICHANNEL_AUDIO_IN1); 00257 klass->add_ichannel ("audio_in2", _("Audio In2"), _("Audio input 2"), ICHANNEL_AUDIO_IN2); 00258 klass->add_ochannel ("audio_out1", _("Audio Out1"), _("Compressed audio output 1"), OCHANNEL_AUDIO_OUT1); 00259 klass->add_ochannel ("audio_out2", _("Audio Out2"), _("Compressed audio output 2"), OCHANNEL_AUDIO_OUT2); 00260 } 00261 00262 00263 /* procedure implementations */ 00264 00265 00266 /* artscompressor.idl type registrations */ 00267 #define BSE_CXX_REGISTER_ALL_TYPES_FROM_ARTSCOMPRESSOR_IDL() \ 00268 BSE_CXX_REGISTER_EFFECT (Compressor); \ 00269 /* artscompressor.idl type registrations done */ 00270 } // Arts 00271 } // Bse 00272 template<bool> const unsigned char* 00273 ::Bse::Arts::CompressorBase::inlined_pixstream() 00274 { 00275 /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ 00276 00277 #ifdef __SUNPRO_C 00278 #pragma align 4 (local_pixstream) 00279 #endif 00280 #ifdef __GNUC__ 00281 static const guint8 local_pixstream[] __attribute__ ((__aligned__ (4))) = 00282 #else 00283 static const guint8 local_pixstream[] = 00284 #endif 00285 { "" 00286 /* Pixbuf magic (0x47646b50) */ 00287 "GdkP" 00288 /* length: header (24) + pixel_data (5128) */ 00289 "\0\0\24\40" 00290 /* pixdata_type (0x2010002) */ 00291 "\2\1\0\2" 00292 /* rowstride (256) */ 00293 "\0\0\1\0" 00294 /* width (64) */ 00295 "\0\0\0@" 00296 /* height (64) */ 00297 "\0\0\0@" 00298 /* pixel_data: */ 00299 "\206\0\0\0\0\230\0\0\0\1\243\0\0\0\0\3\0\0\0\1\0\0\0\4\0\0\0\10\202\0" 00300 "\0\0\13\230\0\0\0\14\5\0\0\0\13\0\0\0\12\0\0\0\10\0\0\0\3\0\0\0\1\236" 00301 "\0\0\0\0\5\0\0\0\4\0\0\0\17\0\0\0\36\0\0\0(\0\0\0*\230\0\0\0,\5\0\0\0" 00302 "*\0\0\0&\0\0\0\32\0\0\0\12\0\0\0\2\235\0\0\0\0\7\0\0\0\1\0\0\0\10\0\0" 00303 "\0\37\0\0\0;\0\0\0I\0\0\0J\0\0\0K\226\0\0\0L\6\0\0\0K\0\0\0I\0\0\0D\0" 00304 "\0\0.\0\0\0\20\0\0\0\2\235\0\0\0\0\6\0\0\0\1\0\0\0\13\0\0\0(\0\0\0I\0" 00305 "\0\0\270\0\0\0\343\230\0\0\0\377\5\12\27\12\377\33\77\33\377\0\0\0""8" 00306 "\0\0\0\23\0\0\0\2\235\0\0\0\0\7\0\0\0\1\0\0\0\14\0\0\0+\0\0\0J\0\0\0" 00307 "\343nnn\262\276\276\276\222\221\377\377\377\177\202&w&\377\11S\241R\377" 00308 "P\241P\377N\241M\377@\210\77\377+`,\377\12\27\12\377\0\0\0;\0\0\0\25" 00309 "\0\0\0\2\235\0\0\0\0\6\0\0\0\1\0\0\0\14\0\0\0,\0\0\0K\0\0\0\377\276\276" 00310 "\276\222\221\377\377\377\177\202&w&\377\12V\242U\377T\242R\377Q\241P" 00311 "\377N\241M\377K\240K\377>\211=\377\0\0\0\377\0\0\0<\0\0\0\26\0\0\0\2" 00312 "\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\221\377\377\377" 00313 "\177\202&w&\377\13X\242W\377V\242U\377T\242R\377Q\241P\377N\241M\377" 00314 "L\241K\377I\240I\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5" 00315 "\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\220\377\377\377\177\202&w&" 00316 "\377\14[\242Z\377Y\242X\377V\241U\377T\241S\377P\241P\377N\241N\377K" 00317 "\241K\377I\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5\0" 00318 "\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\217\377\377\377\177\202&w&\377" 00319 "\15^\242\\\377[\242Z\377X\241W\377V\241U\377T\241S\377Q\241P\377N\240" 00320 "N\377K\240K\377I\241H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0" 00321 "\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\216\377\377\377\177\202" 00322 "&w&\377\16`\243^\377^\242\\\377[\242Z\377Y\242W\377V\241U\377S\241R\377" 00323 "Q\241P\377N\241M\377L\241K\377H\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0" 00324 "\0\0\2\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\215\377" 00325 "\377\377\177\202&w&\377\17c\243a\377a\242_\377^\243]\377[\242Z\377Y\242" 00326 "W\377V\241T\377S\241R\377Q\241O\377N\241M\377L\240K\377H\240I\377\0\0" 00327 "\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0," 00328 "\0\0\0L\0\0\0\377\214\377\377\377\177\202&w&\377\20e\243d\377c\242a\377" 00329 "a\243_\377^\243]\377\\\242Z\377Y\241X\377U\241U\377T\241S\377P\241P\377" 00330 "N\241N\377K\240K\377H\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235" 00331 "\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\213\377\377\377\177" 00332 "\202&w&\377\21h\243g\377f\243d\377d\243b\377`\243_\377^\242\\\377[\242" 00333 "Z\377Y\242X\377V\242U\377S\241R\377P\241P\377N\241M\377K\241K\377I\240" 00334 "H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\4\0\0\0\1\0\0\0\14" 00335 "\0\0\0,\0\0\0L\234\0\0\0\377\3\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5" 00336 "\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\211\377\377\377\177\202&w&" 00337 "\377\23n\244k\377k\243h\377h\243f\377f\243d\377c\243a\377a\243_\377^" 00338 "\243\\\377\\\242Z\377Y\242X\377V\242U\377S\241S\377Q\241P\377N\241M\377" 00339 "K\240K\377H\240I\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5" 00340 "\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\210\377\377\377\177\202&w&" 00341 "\377\24p\245n\377m\244k\377k\244h\377h\244f\377f\243c\377c\243a\377a" 00342 "\243_\377^\243]\377[\242Z\377X\241W\377V\242U\377S\241S\377P\241P\377" 00343 "N\241M\377L\241K\377I\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235" 00344 "\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\207\377\377\377\177" 00345 "\202&w&\377\25s\245p\377q\244m\377n\244k\377k\243h\377i\243f\377f\243" 00346 "d\377d\243b\377a\242_\377]\243\\\377[\242Z\377Y\242W\377V\242U\377S\241" 00347 "S\377Q\241P\377N\241N\377L\240K\377H\240H\377\0\0\0\377\0\0\0=\0\0\0" 00348 "\26\0\0\0\2\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\206" 00349 "\377\377\377\177\202&w&\377\26v\245s\377s\244p\377q\244n\377n\244k\377" 00350 "l\244h\377i\243f\377e\243c\377c\243a\377`\242_\377^\242\\\377[\242Z\377" 00351 "Y\241W\377V\242U\377S\241S\377Q\241P\377N\240N\377K\241K\377I\240H\377" 00352 "\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0" 00353 "\0,\0\0\0L\0\0\0\377\205\377\377\377\177\202&w&\377\27x\245u\377v\245" 00354 "s\377t\245p\377p\244n\377n\244k\377k\244i\377i\244f\377f\243d\377c\243" 00355 "a\377a\242_\377]\243]\377[\242Y\377X\242W\377V\242U\377S\241R\377P\241" 00356 "P\377N\241N\377K\241K\377I\240I\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2" 00357 "\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\204\377\377\377" 00358 "\177\202&w&\377\30{\246x\377x\245u\377v\245s\377s\244p\377p\244n\377" 00359 "n\243k\377k\243i\377i\243f\377f\243c\377c\243b\377`\242_\377^\243]\377" 00360 "[\242Z\377Y\242X\377V\242U\377S\242S\377P\241P\377N\241N\377K\240K\377" 00361 "I\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\6\0\0\0\1\0" 00362 "\0\0\14\0\0\0,\0\0\0K\0\0\0\377\276\276\276\222\202\377\377\377\177\202" 00363 "&w&\377\31~\246z\377{\245w\377y\245u\377v\244r\377s\245p\377q\245m\377" 00364 "n\244k\377k\244i\377i\243f\377f\244d\377d\243b\377`\243_\377]\242\\\377" 00365 "[\242Z\377X\242X\377U\241T\377S\242S\377Q\241O\377N\241M\377K\241K\377" 00366 ">\210>\377\0\0\0\377\0\0\0<\0\0\0\26\0\0\0\2\235\0\0\0\0\7\0\0\0\1\0" 00367 "\0\0\13\0\0\0+\0\0\0J\0\0\0\343nnn\262\276\276\276\222\202&w&\377\32" 00368 "\201\246|\377~\246z\377{\245w\377x\244u\377v\245r\377t\245p\377p\244" 00369 "n\377n\244k\377k\243i\377h\244f\377e\243c\377c\243a\377a\243_\377^\242" 00370 "]\377[\242Z\377X\242W\377V\242U\377S\241R\377Q\241O\377N\241N\377@\210" 00371 "@\377,`+\377\12\27\12\377\0\0\0:\0\0\0\24\0\0\0\2\235\0\0\0\0\6\0\0\0" 00372 "\1\0\0\0\12\0\0\0&\0\0\0E\0\0\0\266\0\0\0\342\230\0\0\0\377\5\12\27\12" 00373 "\377\33\77\33\377\0\0\0""7\0\0\0\21\0\0\0\2\235\0\0\0\0\7\0\0\0\1\0\0" 00374 "\0\10\0\0\0\33\0\0\0.\0\0\0""8\0\0\0;\0\0\0<\223\0\0\0=\11\0\0\0>\0\0" 00375 "\0@\0\0\0D\0\0\0F\0\0\0G\0\0\0B\0\0\0+\0\0\0\14\0\0\0\1\236\0\0\0\0\5" 00376 "\0\0\0\3\0\0\0\12\0\0\0\20\0\0\0\23\0\0\0\24\223\0\0\0\26\12\0\0\0\27" 00377 "\0\0\0\31\0\0\0\34\0\0\0!\0\0\0&\0\0\0'\0\0\0$\0\0\0\26\0\0\0\7\0\0\0" 00378 "\1\236\0\0\0\0\1\0\0\0\1\227\0\0\0\2\11\0\0\0\3\0\0\0\4\0\0\0\6\0\0\0" 00379 "\10\0\0\0\12\3173\27\367\307+\23\364\0\0\0\27\0\0\0\5\272\0\0\0\0\12" 00380 "\0\0\0\1\3173\27\367\332=\34\377\331<\33\377\271'\21\343\0\0\0\34\0\0" 00381 "\0\3\302&\21\377\0\0\0\16\0\0\0\3\266\0\0\0\0\12\3173\27\344\332=\34" 00382 "\377\331<\33\377\330:\33\377\3248\31\376\263\40\16\350\302(\22\353\314" 00383 "0\26\377\0\0\0I\0\0\0\21\265\0\0\0\0\13\3204\27\360\332=\34\377\330<" 00384 "\33\377\327;\32\377\3269\32\377\3248\32\377\3237\31\377\3226\30\377\313" 00385 "0\25\377\0\0\0e\0\0\0\25\264\0\0\0\0\14\3204\30\352\332=\34\377\331<" 00386 "\33\377\327;\33\377\3269\32\377\3258\32\377\3236\31\377\3226\30\377\321" 00387 "5\30\377\312/\25\377\0\0\0j\0\0\0\25\264\0\0\0\0\14\307,\23\377\331<" 00388 "\33\377\330;\33\377\3269\32\377\3258\32\377\3237\31\377\3226\31\377\321" 00389 "4\30\377\3173\27\377\311.\25\377\0\0\0j\0\0\0\25\264\0\0\0\0\14\0\0\0" 00390 "\21\273(\21\352\3248\31\377\3248\32\377\3237\31\377\3226\31\377\3204" 00391 "\30\377\3173\27\377\3162\27\377\310-\24\377\0\0\0j\0\0\0\25\264\0\0\0" 00392 "\0\14\0\0\0\3\0\0\0\35\264\40\16\352\3236\31\377\3226\30\377\3215\30" 00393 "\377\3173\30\377\3162\27\377\3151\26\377\307,\23\377\0\0\0j\0\0\0\25" 00394 "\265\0\0\0\0\13\0\0\0\3\302(\22\353\3226\31\377\3214\30\377\3173\27\377" 00395 "\3161\27\377\3151\26\377\3140\25\377\306+\23\377\0\0\0j\0\0\0\25\265" 00396 "\0\0\0\0\13\303'\22\367\3141\26\377\313/\26\377\312.\25\377\311.\25\377" 00397 "\310-\24\377\307,\23\377\306+\23\377\302&\21\377\0\0\0j\0\0\0\25\265" 00398 "\0\0\0\0\3\0\0\0\15\0\0\0G\0\0\0d\202\0\0\0i\204\0\0\0j\2\0\0\0Y\0\0" 00399 "\0\22\265\0\0\0\0\6\0\0\0\3\0\0\0\20\0\0\0\25\0\0\0\30\0\0\0\36\0\0\0" 00400 "!\202\0\0\0#\6\0\0\0\"\0\0\0\34\0\0\0\14\0\0\0\6\0\0\0\4\0\0\0\3\225" 00401 "\0\0\0\2\1\0\0\0\1\236\0\0\0\0\14\0\0\0\3\0\0\0\20\0\0\0'\0\0\0""7\0" 00402 "\0\0:\0\0\0;\0\0\0""9\0\0\0""3\0\0\0*\0\0\0!\0\0\0\32\0\0\0\27\221\0" 00403 "\0\0\26\5\0\0\0\24\0\0\0\22\0\0\0\20\0\0\0\12\0\0\0\3\236\0\0\0\0\14" 00404 "\0\0\0\5\0\0\0\32\0\0\0C\0\0\0\\\0\0\0_\0\0\0^\0\0\0]\0\0\0W\0\0\0N\0" 00405 "\0\0F\0\0\0@\0\0\0>\220\0\0\0=\7\0\0\0<\0\0\0;\0\0\0""8\0\0\0.\0\0\0" 00406 "\32\0\0\0\10\0\0\0\1\235\0\0\0\0\5\0\0\0\4\0\0\0\31\0\0\0D\0\0\0\272" 00407 "\0\0\0\344\230\0\0\0\377\6\0\0\0\342\0\0\0\266\0\0\0D\0\0\0&\0\0\0\12" 00408 "\0\0\0\1\235\0\0\0\0\6\0\0\0\3\0\0\0\27\0\0\0>\0\0\0\343nnn\262\276\276" 00409 "\276\222\226\377\377\377\177\7\276\276\276\222nnn\262\0\0\0\342\0\0\0" 00410 "I\0\0\0+\0\0\0\13\0\0\0\1\235\0\0\0\0\5\0\0\0\2\0\0\0\26\0\0\0<\0\0\0" 00411 "\377\276\276\276\222\230\377\377\377\177\6\276\276\276\222\0\0\0\377" 00412 "\0\0\0K\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0" 00413 "=\0\0\0\377\232\377\377\377\177\5\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0" 00414 "\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\227\377\377\377" 00415 "\177\10c\235c\306*y*\372&w&\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0" 00416 "\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\224\377\377\377" 00417 "\177\2c\235c\306*y*\372\202&w&\377\7G\226F\377O\237O\377\0\0\0\377\0" 00418 "\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0" 00419 "\0\0\377\221\377\377\377\177\2\310\334\310\2226\2016\354\202&w&\377\12" 00420 "G\226F\377O\237O\377N\241M\377K\240J\377H\240I\377\0\0\0\377\0\0\0L\0" 00421 "\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377" 00422 "\217\377\377\377\177\1>\206>\344\202&w&\377\15:\2079\377T\235S\377V\241" 00423 "U\377T\241R\377Q\241P\377N\241M\377L\241K\377I\240I\377\0\0\0\377\0\0" 00424 "\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0" 00425 "\0\377\214\377\377\377\177\2\246\307\246\240-{-\366\202&w&\377\17X\235" 00426 "V\377^\242\\\377[\242Z\377Y\241W\377V\241U\377S\241R\377Q\241P\377N\240" 00427 "M\377L\240K\377H\240H\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235" 00428 "\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\213\377\377\377\177\202" 00429 "&w&\377\22F\214F\377b\240a\377c\242a\377`\242_\377^\242\\\377[\242Z\377" 00430 "Y\241X\377V\241U\377S\241R\377P\241P\377N\241M\377K\240K\377I\240H\377" 00431 "\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\3\0\0\0\2\0\0\0" 00432 "\26\0\0\0=\234\0\0\0\377\4\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0" 00433 "\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\211\377\377\377\177\202&w&\377\24" 00434 "n\244k\377k\243h\377h\243f\377f\243d\377c\243a\377a\243_\377^\243\\\377" 00435 "\\\242Z\377Y\242X\377V\242U\377S\241S\377Q\241P\377N\241M\377K\240K\377" 00436 "H\240I\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0" 00437 "\0\2\0\0\0\26\0\0\0=\0\0\0\377\210\377\377\377\177\202&w&\377\25p\245" 00438 "n\377m\244k\377k\244h\377h\244f\377f\243c\377c\243a\377a\243_\377^\243" 00439 "]\377[\242Z\377X\241W\377V\242U\377S\241S\377P\241P\377N\241M\377L\241" 00440 "K\377I\240H\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0" 00441 "\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\207\377\377\377\177\202&w&\377\26" 00442 "s\245p\377q\244m\377n\244k\377k\243h\377i\243f\377f\243d\377d\243b\377" 00443 "a\242_\377]\243\\\377[\242Z\377Y\242W\377V\242U\377S\241S\377Q\241P\377" 00444 "N\241N\377L\240K\377H\240H\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0" 00445 "\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\206\377\377\377\177" 00446 "\202&w&\377\27v\245s\377s\244p\377q\244n\377n\244k\377l\244h\377i\243" 00447 "f\377e\243c\377c\243a\377`\242_\377^\242\\\377[\242Z\377Y\241W\377V\242" 00448 "U\377S\241S\377Q\241P\377N\240N\377K\241K\377I\240H\377\0\0\0\377\0\0" 00449 "\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0" 00450 "\0\377\205\377\377\377\177\202&w&\377\30x\245u\377v\245s\377t\245p\377" 00451 "p\244n\377n\244k\377k\244i\377i\244f\377f\243d\377c\243a\377a\242_\377" 00452 "]\243]\377[\242Y\377X\242W\377V\242U\377S\241R\377P\241P\377N\241N\377" 00453 "K\241K\377I\240I\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0" 00454 "\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\204\377\377\377\177\202&w&\377" 00455 "\31{\246x\377x\245u\377v\245s\377s\244p\377p\244n\377n\243k\377k\243" 00456 "i\377i\243f\377f\243c\377c\243b\377`\242_\377^\243]\377[\242Z\377Y\242" 00457 "X\377V\242U\377S\242S\377P\241P\377N\241N\377K\240K\377I\240H\377\0\0" 00458 "\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\5\0\0\0\2\0\0\0\26" 00459 "\0\0\0<\0\0\0\377\276\276\276\222\202\377\377\377\177\202&w&\377\32~" 00460 "\246z\377{\245w\377y\245u\377v\244r\377s\245p\377q\245m\377n\244k\377" 00461 "k\244i\377i\243f\377f\244d\377d\243b\377`\243_\377]\242\\\377[\242Z\377" 00462 "X\242X\377U\241T\377S\242S\377Q\241O\377N\241M\377K\241K\377>\210>\377" 00463 "\0\0\0\377\0\0\0K\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\6\0\0\0\2\0\0\0" 00464 "\24\0\0\0:\0\0\0\342nnn\262\276\276\276\222\202&w&\377\33\201\246|\377" 00465 "~\246z\377{\245w\377x\244u\377v\245r\377t\245p\377p\244n\377n\244k\377" 00466 "k\243i\377h\244f\377e\243c\377c\243a\377a\243_\377^\242]\377[\242Z\377" 00467 "X\242W\377V\242U\377S\241R\377Q\241O\377N\241N\377@\210@\377,`+\377\12" 00468 "\27\12\377\0\0\0J\0\0\0+\0\0\0\14\0\0\0\1\235\0\0\0\0\5\0\0\0\2\0\0\0" 00469 "\22\0\0\0""8\0\0\0\266\0\0\0\342\230\0\0\0\377\6\12\27\12\377\33\77\33" 00470 "\377\0\0\0H\0\0\0(\0\0\0\13\0\0\0\1\235\0\0\0\0\6\0\0\0\2\0\0\0\20\0" 00471 "\0\0.\0\0\0D\0\0\0I\0\0\0K\226\0\0\0L\7\0\0\0K\0\0\0J\0\0\0I\0\0\0;\0" 00472 "\0\0\37\0\0\0\10\0\0\0\1\235\0\0\0\0\5\0\0\0\2\0\0\0\12\0\0\0\32\0\0" 00473 "\0&\0\0\0*\230\0\0\0,\5\0\0\0*\0\0\0(\0\0\0\36\0\0\0\17\0\0\0\4\236\0" 00474 "\0\0\0\5\0\0\0\1\0\0\0\3\0\0\0\10\0\0\0\12\0\0\0\13\230\0\0\0\14\202" 00475 "\0\0\0\13\3\0\0\0\10\0\0\0\4\0\0\0\1\243\0\0\0\0\230\0\0\0\1\206\0\0" 00476 "\0\0"}; 00477 00478 00479 00480 return local_pixstream; 00481 } 00482 00483 /*-------- end ../sfi/sfidl generated code --------*/ 00484 00485