Files
MiPi_TEST/__pycache__/mipi_test.cpython-312.pyc

141 lines
16 KiB
Plaintext
Raw Normal View History

2026-04-08 14:19:31 +01:00
<EFBFBD>
<00>U<EFBFBD>ik><00><00><><00>dZddlZddlZddlZddlZddlZddlmZddlZddlZdZ dZ
dZ dZ dZ d Zd
Zd Zd Zd Zd ZdZdZdZdaej0<00>Zej0<00>Z ej6e <0B>Zej6e
<EFBFBD>Zde_de_d<15>Z#d<16>Z$d<17>Z%d"d<18>Z&d<19>Z'd<1A>Z(d<1B>Z)d<1C>Z*d<1D>Z+d<1E>Z,d<1F>Z-d <20>Z.e/d!k(re.<2E>yy#e$r'Z e!de <20><00><02>ejDd<14>YdZ [ <20>ZdZ [ wwxYw)#u{
MIPI TEST APPLICATION - MIPI_TEST.PY
- ENTRY POINT OF APPLICATION
VERSION: 0.3
AUTHOR: D. RICE 25/03/2026
© 2026 ARRIVE
<EFBFBD>N)<01>datetimez http://192.168.45.8:5000/displayz 192.168.45.4z 192.168.45.3<EFBFBD><g<><67>&<26> .!><3E> <20>g<><67><EFBFBD><EFBFBD><EFBFBD>ư>g<><67><EFBFBD><EFBFBD><EFBFBD>Ơ>i@ <><E79A99><EFBFBD><EFBFBD><EFBFBD>?g333333<33>?<3F><00>?F<><00>z&ERROR: CANNOT CONNECT TO INSTRUMENTS: <20>c<00><><00>td<01>gd<02>}|D],}tj|<01>tjd<03><00>.td<04>t <00>y)z6Initialises DSO80204B for MIPI DSI signals (~210 MHz).zCONFIGURING SCOPE...)(z*RST<53>:RUNz:STOPz:CHANnel1:DISPlay ONz:CHANnel1:INPut DC50z:CHANnel1:PROBe 19.2z:CHANnel1:SCALe 0.1z:CHANnel1:OFFSet 0.0z:CHANnel1:LABel 'CLK+'z:CHANnel2:DISPlay ONz:CHANnel2:INPut DC50z:CHANnel2:PROBe 19.2z:CHANnel2:SCALe 0.1z:CHANnel2:OFFSet 0.0z:CHANnel2:LABel 'CLK-'z:CHANnel3:DISPlay ONz:CHANnel3:INPut DC50z:CHANnel3:PROBe 19.2z:CHANnel3:SCALe 0.1z:CHANnel3:OFFSet 0.0z:CHANnel3:LABel 'DAT0+'z:CHANnel4:DISPlay ONz:CHANnel4:INPut DC50z:CHANnel4:PROBe 19.2z:CHANnel4:SCALe 0.1z:CHANnel4:OFFSet 0.0z:CHANnel4:LABel 'DAT0-'z:TIMebase:SCALe 5E-9z:TIMebase:POSition 0z:TIMebase:REFerence CENTerz:TRIGger:MODE EDGE<47>:TRIGger:EDGE:SOURce CHANnel1<6C>:TRIGger:EDGE:SLOPe POSitive<76>:TRIGger:EDGE:LEVel 0.05z:TRIGger:SWEep NORMalz:ACQuire:MODE RTIMez:ACQuire:INTerpolate ONz:ACQuire:POINts 500000z:DISPlay:LAYout STACKEDr <><E79A99><EFBFBD><EFBFBD><EFBFBD>?zCHANNEL SETUP COMPLETE.N)<06>print<6E>scope<70>write<74>time<6D>sleep<65>setup_math_channels)<02>cmds<64>cmds <20> mipi_test.py<70> setup_scoper>sM<00><00> <09>
<20>!<21>; <06>D<EFBFBD>z<14><19><03> <0A> <0B> <0B>C<EFBFBD><18> <0C>
<EFBFBD>
<EFBFBD>4<EFBFBD><18><19>
<EFBFBD>
#<23>$<24><17><19>c<00><><00>td<01>tjd<02>tjd<03>gd<04>}|D],}tj|<01>tjd<03><00>. tjd<05>tj d<06>}td|j <00><00>d<08><03> tj d <0B>}|j <00>jd <0C>rtd <0A>td<0E>y
td|j <00><00><00><02>y
#t$r}td |<03>d<08><03>Yd
}~<03><>d
}~wwxYw#t$r}td|<03>d<08><03>Yd
}~y
d
}~wwxYw)z<>
F1 = Ch1 - Ch2 (clock differential)
F2 = Ch3 - Ch4 (lane 0 differential)
DSO80204B firmware 05.30.0005 confirmed syntax:
:FUNCtion<n>:DISPlay ON
:FUNCtion<n>:SUBTract CHANnel<a>,CHANnel<b>
zSETTING UP MATH CHANNELS...z*CLSr)z:FUNCtion1:DISPlay ONz%:FUNCtion1:SUBTract CHANnel1,CHANnel2z:FUNCtion1:RANGe 0.8z:FUNCtion1:OFFSet 0.0z:FUNCtion2:DISPlay ONz%:FUNCtion2:SUBTract CHANnel3,CHANnel4z:FUNCtion2:RANGe 0.8z:FUNCtion2:OFFSet 0.0r<00>*OPC?z SCOPE SYNC OK (OPC=<3D>)z WARNING: OPC SYNC FAILED (Nz:SYSTem:ERRor?<3F>0u, MATH COMMANDS ACCEPTED — NO SCPI ERRORS.z3 F1 = CLK DIFF (CH1-CH2), F2 = DAT DIFF (CH3-CH4)z SCPI ERROR: z COULD NOT READ ERROR QUEUE () rrrrr<00>ask<73>strip<69> Exception<6F>
startswith)<05> math_cmdsr<00>opc<70>e<>errs rrr<00>s%<00><00>
<EFBFBD>
'<27>(<28> <09>K<EFBFBD>K<EFBFBD><06><17><08>J<EFBFBD>J<EFBFBD>s<EFBFBD>O<EFBFBD> <06>I<EFBFBD><19><18><03> <0A> <0B> <0B>C<EFBFBD><18> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F><18>3<> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F><13>i<EFBFBD>i<EFBFBD><07> <20><03> <0A>%<25>c<EFBFBD>i<EFBFBD>i<EFBFBD>k<EFBFBD>]<5D>!<21>4<>5<>5<><13>i<EFBFBD>i<EFBFBD>(<28>)<29><03> <0E>9<EFBFBD>9<EFBFBD>;<3B> !<21> !<21>#<23> &<26> <11>@<40> A<> <11>G<> H<> <11>N<EFBFBD>3<EFBFBD>9<EFBFBD>9<EFBFBD>;<3B>-<2D>0<> 1<><31> <15>3<> <0A>,<2C>Q<EFBFBD>C<EFBFBD>q<EFBFBD>1<>2<>2<><32>3<><33> <15>5<> <0A>.<2E>q<EFBFBD>c<EFBFBD><11>3<>4<>4<><34>5<>s8<00>,AD<00>4A
E<00>?E<00> D><03>%D9<03>9D><03> E#<03>
E<03>E#c<00><><00>tjd|d<02><04><02>tjd|<01><00><02>tjd<04>y)zBApply timebase scale and record length, then let the scope settle.z:TIMebase:SCALe z.3Ez:ACQuire:POINts g333333<33>?N<>rrrr)<02>scale<6C>pointss r<00> _set_timebaser,<00>s7<00><00> <09>K<EFBFBD>K<EFBFBD>"<22>5<EFBFBD><13>+<2B>.<2E>/<2F> <09>K<EFBFBD>K<EFBFBD>"<22>6<EFBFBD>(<28>+<2B>,<2C><08>J<EFBFBD>J<EFBFBD>s<EFBFBD>Orc<00>N<00>tj} |dzt_tjd<02>tjd<03>j <00>}|dk(|t_S#t
$r#}t d|<03><00><02>Yd}~|t_yd}~wwxYw#|t_wxYw)z<>
Fire a single acquisition using :DIGitize (blocking on Infiniium) and
confirm completion with *OPC?. Temporarily extends scope.timeout to
cover the full wait period.
Returns True on success, False on error/timeout.
r z :DIGitizer<00>1z ACQUIRE ERROR: NF)r<00>timeoutrr r!r"r)r/<00> prev_timeout<75>respr&s r<00> _arm_and_waitr2<00>s<><00><00><19>=<3D>=<3D>L<EFBFBD> %<25><1F>!<21> <0B><05> <0A> <0A> <0B> <0B>K<EFBFBD> <20><14>y<EFBFBD>y<EFBFBD><17>!<21>'<27>'<27>)<29><04><13>s<EFBFBD>{<7B>
%<25><05> <0A><> <15><15> <0A>!<21>!<21><13>%<25>&<26><14>$<24><05> <0A><> <15><>%<25><05> <0A>s*<00>A
A(<00>( B<03>1B<03>?B<00>B<03>B<00> B$c<00>H<00>d|<02>d|<00>d|d<03><04>} tjd|<03>d<05><03>tjd<06>tjd|<03>d<08><03>tjd<06>t d |<03>d
|<03>d <0B><05>y#t
$r}t d |<00>d |<04><00><04>Yd}~yd}~wwxYw)z<>
Save F1 (CLK diff) and F2 (DAT diff) as CSV, plus a PNG screenshot.
Files land in C:\TEMP on the scope's local disk.
Naming: <YYYYMMDD_HHMMSS>_<tag>_<iter>_clk.csv (date-first for easy sorting/deletion)
<20>C:\TEMP\<5C>_<>04dz:DISK:SAVE:WAVeform FUNCtion1,"<22> _clk.csv",CSV<53>@z:DISK:SAVE:WAVeform FUNCtion2,"<22> _dat.csv",CSV<53> SAVED: <20>
_clk.csv <20>_dat.csv<73> SAVE ERROR (<28>): N<>rrrrrr"<00><05>tag<61> iteration<6F>ts<74>baser&s r<00>
_save_passrE<00>s<><00><00> <18><02>t<EFBFBD>1<EFBFBD>S<EFBFBD>E<EFBFBD><11>9<EFBFBD>S<EFBFBD>/<2F> 2<>D<EFBFBD>,<2C> <0A> <0B> <0B>5<>d<EFBFBD>V<EFBFBD>=<3D>I<>J<> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0A> <0B> <0B>5<>d<EFBFBD>V<EFBFBD>=<3D>I<>J<> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0A> <09>$<24><16>z<EFBFBD>$<24><16>x<EFBFBD>8<>9<><39> <14>,<2C> <0A><0E>s<EFBFBD>e<EFBFBD>3<EFBFBD>q<EFBFBD>c<EFBFBD>*<2A>+<2B>+<2B><>,<2C><><00>A.A=<00>= B!<03>B<03>B!c<00>H<00>d|<02>d|<00>d|d<03><04>} tjd|<03>d<05><03>tjd<06>tjd|<03>d<08><03>tjd<06>t d |<03>d
|<03>d <0B><05>y#t
$r}t d |<00>d |<04><00><04>Yd}~yd}~wwxYw)u<>
Save Ch1 (CLK+) and Ch3 (DAT0+) as single-ended CSV for LP state analysis.
Single-ended is required for LP because differential (F1/F2) cannot distinguish
LP-11 (Vcm=1.2 V) from LP-00 (Vcm=0 V) — both give Vdiff=0.
r4r5r6z:DISK:SAVE:WAVeform CHANnel1,"r7r8z:DISK:SAVE:WAVeform CHANnel3,"r9r:r;r<r=r>Nr?r@s r<00>_save_pass_channelsrH<00>s<><00><00> <18><02>t<EFBFBD>1<EFBFBD>S<EFBFBD>E<EFBFBD><11>9<EFBFBD>S<EFBFBD>/<2F> 2<>D<EFBFBD>,<2C> <0A> <0B> <0B>4<>T<EFBFBD>F<EFBFBD>-<2D>H<>I<> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0A> <0B> <0B>4<>T<EFBFBD>F<EFBFBD>-<2D>H<>I<> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0A> <09>$<24><16>z<EFBFBD>$<24><16>x<EFBFBD>8<>9<><39> <14>,<2C> <0A><0E>s<EFBFBD>e<EFBFBD>3<EFBFBD>q<EFBFBD>c<EFBFBD>*<2A>+<2B>+<2B><>,<2C>rFc<00>t<00>dD]W}tjd|<00>dtd<04><04><04>tjd|<00>dtd<04><04><04>t j
d<06><00>Ytjd<07>tjd<08>tjd t d<04><04><02>t j
d
<EFBFBD>y ) u<>
Widen channel vertical scales to capture LP states and switch to a
falling-edge trigger to catch the LP-11 → LP-01 SoT transition.
<20>r
<00><00><00><00>:CHANnelz:SCALe z.3fz:OFFSet rz:TRIGger:EDGE:SOURce CHANnel3z:TRIGger:EDGE:SLOPe NEGativez:TRIGger:EDGE:LEVel 皙<><E79A99><EFBFBD><EFBFBD><EFBFBD>?N)rr<00>
LP_V_SCALE<EFBFBD> LP_V_OFFSETrr<00> LP_TRIG_LEVEL<45><01>chs r<00>_configure_for_lprU<00>s<><00><00>
<1B><19><02> <0A> <0B> <0B>h<EFBFBD>r<EFBFBD>d<EFBFBD>'<27>*<2A>S<EFBFBD>)9<>:<3A>;<3B> <0A> <0B> <0B>h<EFBFBD>r<EFBFBD>d<EFBFBD>(<28>;<3B>s<EFBFBD>*;<3B><<3C>=<3D> <0C>
<EFBFBD>
<EFBFBD>4<EFBFBD><18><19> 
<EFBFBD>K<EFBFBD>K<EFBFBD>/<2F>0<> <09>K<EFBFBD>K<EFBFBD>.<2E>/<2F> <09>K<EFBFBD>K<EFBFBD>&<26>}<7D>S<EFBFBD>&9<>:<3A>;<3B><08>J<EFBFBD>J<EFBFBD>s<EFBFBD>Orc<00>H<00>dD]I}tjd|<00>d<03><03>tjd|<00>d<04><03>tjd<05><00>Ktjd<06>tjd<07>tjd<08>tjd <09>y
) zFRestore HS-mode channel scales, offsets, and trigger after LP capture.rJrNz
:SCALe 0.1z :OFFSet 0.0rr rrrONr)rSs r<00>_restore_hs_configrWs{<00><00><1A><19><02> <0A> <0B> <0B>h<EFBFBD>r<EFBFBD>d<EFBFBD>*<2A>-<2D>.<2E> <0A> <0B> <0B>h<EFBFBD>r<EFBFBD>d<EFBFBD>+<2B>.<2E>/<2F> <0C>
<EFBFBD>
<EFBFBD>4<EFBFBD><18><19>
<EFBFBD>K<EFBFBD>K<EFBFBD>/<2F>0<> <09>K<EFBFBD>K<EFBFBD>.<2E>/<2F> <09>K<EFBFBD>K<EFBFBD>*<2A>,<2C><08>J<EFBFBD>J<EFBFBD>s<EFBFBD>Orc<00><><00>tj<00>tj<00>j d<01>}t d|d<03>d|<01>d<05><05>t d<06>t tt<00>t<00>rtd||<01>n t d<08>t d <09>t tt<00>t<00>rtd
||<01>n t d <0B>t d <0C>t<00>t tt<00>td <0A><0E>rt!d||<01>n t d<10>t#<00>t dd<12>t$j'd<13>tj)<00>y)u<>
Two-pass capture per test iteration:
Pass 1 — signal quality (SIG_SCALE / SIG_POINTS)
Pass 2 — frame structure (PROTO_SCALE / PROTO_POINTS)
Restores the original 5 ns/div timebase when done.
z %Y%m%d_%H%M%SzDUAL CAPTURE #r6z [<5B>]z PASS 1: SIGNAL QUALITY...<2E>sigz SKIPPING PASS 1 SAVE.z PASS 2: FRAME STRUCTURE...<2E>protoz SKIPPING PASS 2 SAVE.z PASS 3: LP TRANSITION...r)r/<00>lpz SKIPPING PASS 3 SAVE.g:<3A>0<EFBFBD><30>y5>rr N)<15> capture_done<6E>clearr<00>now<6F>strftimerr,<00> SIG_SCALE<4C>
SIG_POINTSr2rE<00> PROTO_SCALE<4C> PROTO_POINTSrU<00>LP_SCALE<4C> LP_POINTSrHrWrr<00>set)rBrCs r<00> dual_capturerhs<><00><00><11><16><16><18> <11><1C><1C><1E> <20> <20><1F> 1<>B<EFBFBD> <09>N<EFBFBD>9<EFBFBD>S<EFBFBD>/<2F><13>R<EFBFBD>D<EFBFBD><01>
2<EFBFBD>3<>
<EFBFBD>
'<27>(<28><11>)<29>Z<EFBFBD>(<28><14><EFBFBD><12>5<EFBFBD>)<29>R<EFBFBD>(<28> <0A>'<27>(<28>
<EFBFBD>
(<28>)<29><11>+<2B>|<7C>,<2C><14><EFBFBD><12>7<EFBFBD>I<EFBFBD>r<EFBFBD>*<2A> <0A>'<27>(<28>

<EFBFBD>
&<26>'<27><15><17><11>(<28>I<EFBFBD>&<26><14>R<EFBFBD> <20><1B>D<EFBFBD>)<29>R<EFBFBD>0<> <0A>'<27>(<28><16><18><12>$<24><07> <20> <09>K<EFBFBD>K<EFBFBD><06><17><10><14><14>rc<00>z<00>tr<>tjt<00>tsyt d<01>t
j <00>t d<02>tj<00> tj<00>\}}t d|<00>d|<01>d<05><05>|dkDr tj<00>tj<00>t d
<EFBFBD>tr<01><>yy#t$r}t d|<02><00><02>Yd}~<02>Dd}~wwxYw#t$r}t d |<02><00><02>Yd}~<02>hd}~wwxYw#tj<00>t d
<EFBFBD>wxYw) z<>
Fires every MGMT_INTERVAL seconds while a test is running:
- Pauses test_worker via resume_event
- Runs ai_mgmt CSV scan
- Resumes test_worker
z2
[MGMT] WAITING FOR CURRENT CAPTURE TO COMPLETE...u3[MGMT] PAUSING TEST — RUNNING MANAGEMENT TASKS...z[MGMT] TRANSFERRED z FILE(S) TO DATA FOLDER. z FAILED.rz[MGMT] ANALYSIS ERROR: Nz[MGMT] TRANSFER ERROR: z[MGMT] RESUMING TEST.
)<0F> test_runningrr<00> MGMT_INTERVALrr]<00>wait<69> resume_eventr^<00>ai_mgmt<6D>transfer_csv_files<65>analyze_captures<65> run_analysisr"rg)<03>copied<65>failedr&s r<00> mgmt_workerrt@s <00><00> <17> <0C>
<EFBFBD>
<EFBFBD>=<3D>!<21><1B> <11> <0A>C<>D<><14><19><19><1B> <0A>C<>D<><14><1A><1A><1C> -<2D>$<24>7<>7<>9<>N<EFBFBD>F<EFBFBD>F<EFBFBD> <11>'<27><06>x<EFBFBD>/H<><16><08>PX<50>Y<> Z<><15><01>z<EFBFBD>9<>$<24>1<>1<>3<> <19> <1C> <1C> <1E> <11>+<2B> ,<2C>+ <17>,<2C><>!<21>9<><19>3<>A<EFBFBD>3<EFBFBD>7<>8<>8<><38>9<><39><18> 1<> <11>+<2B>A<EFBFBD>3<EFBFBD>/<2F> 0<> 0<><30> 1<><31> <19> <1C> <1C> <1E> <11>+<2B> ,<2C>sN<00>&.C5<00>C<00> C2<03>C-<03>(C5<00>-C2<03>2C5<00>5 D<03>>D<03> D<00>D<03>D<00>!D:c<00>N<00>d}tr<>tj<00>tsytjt
ddid<04><05>t jt<00>t|<00>|dz }tjt
ddid<04><05>t jd<07>tr<01><>yy) a'
Background loop:
- Waits if mgmt_worker has paused via resume_event
- Turns display ON, waits DISPLAY_SETTLE_S for it to stabilise
- Runs dual_capture (signal quality + frame structure)
- Turns display OFF for 1 second
- Repeats until test_running = False
r
<00>state<74>onrK)<02>jsonr/<00>offrN)
rjrmrl<00>requests<74>put<75>URLrr<00>DISPLAY_SETTLE_Srh)<01>counts r<00> test_workerr_sw<00><00> <0E>E<EFBFBD>
<16><14><19><19><1B><1B> <11><10> <0C> <0C>S<EFBFBD><07><14><EFBFBD><01>:<3A> <0C>
<EFBFBD>
<EFBFBD>#<23>$<24><14>U<EFBFBD><1B> <0A><11>
<EFBFBD><05><10> <0C> <0C>S<EFBFBD><07><15>/<2F><11>;<3B> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <17>,rc<00><><00> td<02>td<03>td<04>td<05>td<06>td<07>td<08>td <09>td
<EFBFBD>j<00>}|d k(r`td tj d <0A>j<00><00><00><02>tdt
j d <0A>j<00><00><00><02><00>n<>|dk(r t <00><00>n<>|dk(r7tjd<11>tjd<12>td<13><00>nP|dk(r_td<15>j<00>j<00>}|dvr(tjd|<01><00><02>td|<01>d<19><03>n<>td<1A>n<>|dk(r<>ts|da tj<00>tjtd<01><1C>j<00>tjt d<01><1C>j<00>tdt"<00>d<1E><03>netd<1F>nY|d k(rtd!<21>d"a nF|d#k(r6d"a tj%<00>t
j%<00>td$<24>ytd%<25><00><02>u)&NTz
===== MIPI TEST CONTROL =====z1. RUN IDN CHECK (PSU & SCOPE)z2. SETUP SCOPE (RUN FIRST)z%3. CONFIGURE PSU (DEFAULT 24V / 1.5A)z4. PSU OUTPUT ON/OFF (CH1)z5. START TEST & CAPTUREz 6. STOP TESTz7. EXITz
SELECT OPTION (1-7): r.zPSU : z*IDN?zSCOPE: <20>2<>3z CH1:VOLT 24.0z CH1:CURR 1.5zPSU CONFIGURED: 24V / 1.5A<EFBFBD>4zTYPE 'ON' OR 'OFF': )<02>ON<4F>OFFz OUTP CH1,z PSU OUTPUT <20>.uINVALID — TYPE 'ON' OR 'OFF'.<2E>5)<02>target<65>daemonz#TEST STARTED. MANAGEMENT INTERVAL: zs.zTEST IS ALREADY RUNNING!<21>6zSTOPPING TEST...F<>7zINSTRUMENTS CLOSED. BYE.z!INVALID ENTRY. PLEASE CHOOSE 1-7.)r<00>inputr!<00>psur rrr<00>upperrjrmrg<00> threading<6E>Threadr<00>startrtrk<00>close)<02>choicervs r<00> main_menur<75>ws<><00><00> <0F> <0A>/<2F>0<> <0A>.<2E>/<2F> <0A>*<2A>+<2B> <0A>5<>6<> <0A>*<2A>+<2B> <0A>'<27>(<28> <0A>n<EFBFBD><1D> <0A>i<EFBFBD><18><16>0<>1<>7<>7<>9<><06> <11>S<EFBFBD>=<3D> <11>G<EFBFBD>C<EFBFBD>G<EFBFBD>G<EFBFBD>G<EFBFBD>,<2C>2<>2<>4<>5<>6<> 7<> <11>G<EFBFBD>E<EFBFBD>I<EFBFBD>I<EFBFBD>g<EFBFBD>.<2E>4<>4<>6<>7<>8<> 9<> <13>s<EFBFBD>]<5D> <17>M<EFBFBD> <13>s<EFBFBD>]<5D> <0F>I<EFBFBD>I<EFBFBD>o<EFBFBD> &<26> <0F>I<EFBFBD>I<EFBFBD>n<EFBFBD> %<25> <11>.<2E> /<2F> <13>s<EFBFBD>]<5D><19>0<>1<>7<>7<>9<>?<3F>?<3F>A<>E<EFBFBD><14> <0A>%<25><13> <09> <09>I<EFBFBD>e<EFBFBD>W<EFBFBD>-<2D>.<2E><15> <0B>E<EFBFBD>7<EFBFBD>!<21>,<2C>-<2D><15>7<>8<> <13>s<EFBFBD>]<5D><1F>#<23> <0C><1C> <20> <20>"<22><19> <20> <20> <0B>D<EFBFBD>A<>G<>G<>I<><19> <20> <20> <0B>D<EFBFBD>A<>G<>G<>I<><15>;<3B>M<EFBFBD>?<3F>"<22>M<>N<><15>0<>1<> <13>s<EFBFBD>]<5D> <11>$<24> %<25> <20>L<EFBFBD> <13>s<EFBFBD>]<5D> <20>L<EFBFBD> <0F>I<EFBFBD>I<EFBFBD>K<EFBFBD> <11>K<EFBFBD>K<EFBFBD>M<EFBFBD> <11>,<2C> -<2D> <11> <12>5<> 6<>m r<00>__main__)<01>)0<>__doc__<5F>vxi11r<00>sysrzr<>rrnrpr|<00>SCOPE_IP<49>PSU_IPrkrarbrcrdrerfrPrQrRr}rj<00>Eventrmr]<00>
Instrumentr<EFBFBD>rr/r"r&r<00>exitrrr,r2rErHrUrWrhrtrr<><00>__name__<5F>rr<00><module>r<>sR<00><01><04> <0A> <0B>
<EFBFBD><0F><10><1D><0E><17>3<><03><1E><08><1E><06><12> <0A><12> <09> <14>
<EFBFBD><14> <0B><16> <0C> <18><08><18> <09><14>
<EFBFBD><14> <0B><14> <0A><16><10><15> <0C><1F> <09><0F><0F>!<21> <0C><1F> <09><0F><0F>!<21> <0C><10> <1C>E<EFBFBD> <1C> <1C>V<EFBFBD> $<24>C<EFBFBD> <1C>E<EFBFBD> <1C> <1C>X<EFBFBD> &<26>E<EFBFBD><16>E<EFBFBD>M<EFBFBD><15>C<EFBFBD>K<EFBFBD>F<1A>R/5<>d<14>%<25>(,<2C>",<2C>"<14>" <14>*<17>Z-<2D>><18>097<>x <0C>z<EFBFBD><19> <0A>K<EFBFBD><1A><>w <11><10> <09> 2<>1<EFBFBD>#<23>
6<EFBFBD>7<> <0C>C<EFBFBD>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD>K<EFBFBD><4B><10>s<00>&2C <00> C7<03>C2<03>2C7