diff --git a/pcb_calculator/CMakeLists.txt b/pcb_calculator/CMakeLists.txt index 23188e167d..087a7916dd 100644 --- a/pcb_calculator/CMakeLists.txt +++ b/pcb_calculator/CMakeLists.txt @@ -19,6 +19,7 @@ set( PCB_CALCULATOR_SRCS datafile_read_write.cpp regulators_funct.cpp tracks_width_versus_current.cpp + via.cpp transline_ident.cpp UnitSelector.cpp pcb_calculator_datafile_keywords.cpp diff --git a/pcb_calculator/bitmaps/sources/via.svg b/pcb_calculator/bitmaps/sources/via.svg new file mode 100644 index 0000000000..4137239954 --- /dev/null +++ b/pcb_calculator/bitmaps/sources/via.svg @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Right and Down Arrow + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + D + + + + T + + + diff --git a/pcb_calculator/bitmaps/via.xpm b/pcb_calculator/bitmaps/via.xpm new file mode 100644 index 0000000000..a287ab19f3 --- /dev/null +++ b/pcb_calculator/bitmaps/via.xpm @@ -0,0 +1,1053 @@ +/* XPM */ +const static char *via_xpm[] = { +"175 176 874 2", +" c None", +". c #FFFFFF", +"+ c #6E6DFD", +"@ c #0402FC", +"# c #0806FC", +"$ c #1513FC", +"% c #3332FD", +"& c #6463FD", +"* c #BABAFE", +"= c #4A48FD", +"- c #6867FD", +"; c #5D5BFD", +"> c #4543FD", +", c #2524FC", +"' c #4B49FD", +") c #EEEEFF", +"! c #B2B2FE", +"~ c #D0CFFE", +"{ c #4241FD", +"] c #F7F7FF", +"^ c #FBFBFF", +"/ c #4F4DFD", +"( c #7B7AFD", +"_ c #E5E5FF", +": c #0705FC", +"< c #1816FC", +"[ c #FAFAFF", +"} c #3F3EFD", +"| c #C8C7FE", +"1 c #605EFD", +"2 c #ACACFE", +"3 c #A8A8FE", +"4 c #4947FD", +"5 c #C5C4FE", +"6 c #F3F3FF", +"7 c #0E0CFC", +"8 c #7271FD", +"9 c #F2F2FF", +"0 c #706FFD", +"a c #2625FC", +"b c #6260FD", +"c c #8A89FE", +"d c #8685FE", +"e c #7170FD", +"f c #5553FD", +"g c #1311FC", +"h c #2E2DFD", +"i c #DEDDFF", +"j c #7D7CFD", +"k c #EAEAFF", +"l c #8988FE", +"m c #9291FE", +"n c #3635FD", +"o c #9190FE", +"p c #F5F5FF", +"q c #6E6CFD", +"r c #9494FE", +"s c #D5D4FE", +"t c #B6B6FE", +"u c #E2E2FF", +"v c #ABABFE", +"w c #4645FD", +"x c #2321FC", +"y c #1412FC", +"z c #D3D2FE", +"A c #CDCCFE", +"B c #DAD9FF", +"C c #E0E0FF", +"D c #9C9CFE", +"E c #0B09FC", +"F c #2624FC", +"G c #4C4BFD", +"H c #B7B7FE", +"I c #FDFDFF", +"J c #B3B3FE", +"K c #7E7DFD", +"L c #CCCBFE", +"M c #5A59FD", +"N c #2B29FC", +"O c #0C0AFC", +"P c #3C3BFD", +"Q c #2826FC", +"R c #0E0DFC", +"S c #2D2CFC", +"T c #6361FD", +"U c #D6D5FF", +"V c #E6E6FF", +"W c #4847FD", +"X c #2423FC", +"Y c #110FFC", +"Z c #403FFC", +"` c #BCBCFE", +" . c #2B2AFC", +".. c #1F1EFC", +"+. c #5351FD", +"@. c #EFEFFF", +"#. c #ADADFE", +"$. c #2A28FD", +"%. c #2928FC", +"&. c #7574FD", +"*. c #1E1CFC", +"=. c #0502FC", +"-. c #1210FC", +";. c #3B3AFD", +">. c #D2D1FE", +",. c #DBDAFF", +"'. c #6D6BFD", +"). c #3432FC", +"!. c #1211FC", +"~. c #4342FD", +"{. c #1918FC", +"]. c #3635FC", +"^. c #8583FE", +"/. c #F8F8FF", +"(. c #FEFEFF", +"_. c #BDBCFE", +":. c #4F4EFD", +"<. c #0906FC", +"[. c #2422FC", +"}. c #C4C3FE", +"|. c #0F0EFC", +"1. c #2E2DFC", +"2. c #6765FD", +"3. c #F6F6FF", +"4. c #9B9BFE", +"5. c #3532FD", +"6. c #4D4AFD", +"7. c #4B4AFD", +"8. c #BCBBFE", +"9. c #F8F8F8", +"0. c #E4E4E4", +"a. c #D0D0D0", +"b. c #CCCCCC", +"c. c #C0C0C0", +"d. c #BBBBBB", +"e. c #BFBFBF", +"f. c #D9D9D9", +"g. c #EAEAEA", +"h. c #FCFCFC", +"i. c #E2E2E2", +"j. c #B5B5B5", +"k. c #898989", +"l. c #696969", +"m. c #484848", +"n. c #282828", +"o. c #0D0D0D", +"p. c #000000", +"q. c #010101", +"r. c #111111", +"s. c #0A0A0A", +"t. c #161616", +"u. c #323232", +"v. c #4E4E4E", +"w. c #707070", +"x. c #989898", +"y. c #C2C2C2", +"z. c #ECECEC", +"A. c #F2F2F2", +"B. c #B9B9B9", +"C. c #7E7E7E", +"D. c #444444", +"E. c #0F0F0F", +"F. c #3A3A3A", +"G. c #5D5D5D", +"H. c #9E9E9E", +"I. c #B7B7B7", +"J. c #CDCDCD", +"K. c #FDFDFD", +"L. c #DCDCDC", +"M. c #CACACA", +"N. c #B2B2B2", +"O. c #939393", +"P. c #777777", +"Q. c #565656", +"R. c #2C2C2C", +"S. c #060606", +"T. c #1F1F1F", +"U. c #8C8C8C", +"V. c #C6C6C6", +"W. c #FBFBFB", +"X. c #E8E8FF", +"Y. c #FEFEFE", +"Z. c #858585", +"`. c #3C3C3C", +" + c #040404", +".+ c #0B0B0B", +"++ c #404040", +"@+ c #7C7C7C", +"#+ c #B1B1B1", +"$+ c #DFDFDF", +"%+ c #D5D5D5", +"&+ c #A1A1A1", +"*+ c #6B6B6B", +"=+ c #343434", +"-+ c #0E0E0E", +";+ c #949494", +">+ c #E1E1E1", +",+ c #C8C8C8", +"'+ c #727272", +")+ c #1D1D1D", +"!+ c #020202", +"~+ c #363636", +"{+ c #7F7F7F", +"]+ c #C7C7C7", +"^+ c #F1F1F1", +"/+ c #6E6E6E", +"(+ c #262626", +"_+ c #828282", +":+ c #DADADA", +"<+ c #7C7BFD", +"[+ c #E5E5E5", +"}+ c #848484", +"|+ c #212121", +"1+ c #030303", +"2+ c #434343", +"3+ c #9A9A9A", +"4+ c #D6D6D6", +"5+ c #868686", +"6+ c #F0F0F0", +"7+ c #D4D3FE", +"8+ c #B5B5FE", +"9+ c #BEBEBE", +"0+ c #505050", +"a+ c #919191", +"b+ c #E9E9E9", +"c+ c #D7D7D7", +"d+ c #797979", +"e+ c #0C0C0C", +"f+ c #686868", +"g+ c #D4D4D4", +"h+ c #A8A8A8", +"i+ c #333333", +"j+ c #5E5E5E", +"k+ c #C5C5C5", +"l+ c #454545", +"m+ c #A6A6FE", +"n+ c #F1F1FF", +"o+ c #A5A5A5", +"p+ c #242424", +"q+ c #767676", +"r+ c #626262", +"s+ c #050505", +"t+ c #3B3B3B", +"u+ c #2D2D2D", +"v+ c #808080", +"w+ c #E0E0E0", +"x+ c #070707", +"y+ c #C9C9C9", +"z+ c #D3D3D3", +"A+ c #090909", +"B+ c #757575", +"C+ c #FFF9F0", +"D+ c #FEEED3", +"E+ c #FEE4BB", +"F+ c #FEDAA2", +"G+ c #FDD38F", +"H+ c #FDCD80", +"I+ c #FDC66E", +"J+ c #FDC163", +"K+ c #FDC162", +"L+ c #FCBC56", +"M+ c #FCBE5B", +"N+ c #FDC56D", +"O+ c #FDC772", +"P+ c #FDCC7D", +"Q+ c #FDCF85", +"R+ c #FDD595", +"S+ c #FEE0B1", +"T+ c #FEEBCC", +"U+ c #FFF5E7", +"V+ c #FFFEFD", +"W+ c #5C5C5C", +"X+ c #575757", +"Y+ c #E3E3E3", +"Z+ c #6D6D6D", +"`+ c #545454", +" @ c #FEE8C4", +".@ c #FDD799", +"+@ c #FCBA4F", +"@@ c #FCB23C", +"#@ c #FCB441", +"$@ c #FCBE5A", +"%@ c #FDCC7E", +"&@ c #FEDEAC", +"*@ c #FEF1DC", +"=@ c #3F3F3F", +"-@ c #8B8B8B", +";@ c #FAFAFA", +">@ c #1C1C1C", +",@ c #2B2B2B", +"'@ c #FFFDFA", +")@ c #FEEBCD", +"!@ c #FDBF5E", +"~@ c #FCB23D", +"{@ c #FCB748", +"]@ c #FDC975", +"^@ c #FEDBA4", +"/@ c #FEF2DD", +"(@ c #A3A3A3", +"_@ c #181818", +":@ c #EFEFEF", +"<@ c #FEEDD1", +"[@ c #FDD390", +"}@ c #FCB84C", +"|@ c #FCBF5C", +"1@ c #FDD89D", +"2@ c #FFF3E0", +"3@ c #636363", +"4@ c #2F2F2F", +"5@ c #FFF4E3", +"6@ c #FCB94D", +"7@ c #FDC061", +"8@ c #FEDBA5", +"9@ c #1A1A1A", +"0@ c #838383", +"a@ c #FFFFFE", +"b@ c #FEEAC9", +"c@ c #FDC771", +"d@ c #FCB544", +"e@ c #FDD28D", +"f@ c #EDEDED", +"g@ c #4F4F4F", +"h@ c #A1A1AE", +"i@ c #4C4C4C", +"j@ c #141414", +"k@ c #B3B3B3", +"l@ c #FEE5BC", +"m@ c #FDC060", +"n@ c #FCB33E", +"o@ c #FDCB7B", +"p@ c #8E8E8E", +"q@ c #6F6F6F", +"r@ c #292929", +"s@ c #2E2E2E", +"t@ c #DEDEDE", +"u@ c #FEE8C5", +"v@ c #FDC770", +"w@ c #FEF1DD", +"x@ c #191919", +"y@ c #464646", +"z@ c #C1C1C1", +"A@ c #7776F8", +"B@ c #FDCE83", +"C@ c #FFF8EE", +"D@ c #A1A1EA", +"E@ c #272727", +"F@ c #ABABAB", +"G@ c #080808", +"H@ c #787878", +"I@ c #FFFAF3", +"J@ c #FDD28C", +"K@ c #FEDDA9", +"L@ c #FFFDFB", +"M@ c #F5F5F5", +"N@ c #515151", +"O@ c #CFCFCF", +"P@ c #959595", +"Q@ c #FEE7C3", +"R@ c #FCBA50", +"S@ c #FDBF5D", +"T@ c #FEF1DB", +"U@ c #656565", +"V@ c #AAAAAA", +"W@ c #FFFAF4", +"X@ c #FDCD81", +"Y@ c #7A7A7A", +"Z@ c #8F8F8F", +"`@ c #AEAEAE", +" # c #FEEFD6", +".# c #FCBD57", +"+# c #FDC66F", +"@# c #FFF7EA", +"## c #BCBCBC", +"$# c #999999", +"%# c #AFAFAF", +"&# c #FEDDA8", +"*# c #FCB33F", +"=# c #FCB84B", +"-# c #ADADAD", +";# c #A6A6A6", +"># c #929292", +",# c #FFF9EF", +"'# c #FDC366", +")# c #131313", +"!# c #FFF5E6", +"~# c #FFFBF4", +"{# c #474747", +"]# c #F3F3F3", +"^# c #E1D6E1", +"/# c #FCB94E", +"(# c #B3AFF3", +"_# c #F7B54B", +":# c #F3B857", +"<# c #F1B95F", +"[# c #EEBA67", +"}# c #EBBC6F", +"|# c #EABC71", +"1# c #ECBC6C", +"2# c #EFBA64", +"3# c #F0B95F", +"4# c #F4B755", +"5# c #F9B343", +"6# c #EFB463", +"7# c #E8E2EF", +"8# c #101010", +"9# c #FBB340", +"0# c #F1B85F", +"a# c #E4BF81", +"b# c #DDC499", +"c# c #D5C9AF", +"d# c #CFCCC5", +"e# c #CCCECC", +"f# c #D1CBBF", +"g# c #D7C7AC", +"h# c #DEC396", +"i# c #E8BD77", +"j# c #F4B754", +"k# c #FFF5E5", +"l# c #F5B651", +"m# c #E5BF7F", +"n# c #D9C6A4", +"o# c #CECDC6", +"p# c #D0CCC1", +"q# c #DBC5A0", +"r# c #E9BD73", +"s# c #F9B446", +"t# c #FDC264", +"u# c #FFFBF6", +"v# c #171717", +"w# c #E7E7E7", +"x# c #FFF8ED", +"y# c #FCBD58", +"z# c #7B56A0", +"A# c #E7A34C", +"B# c #F9B445", +"C# c #E8BD76", +"D# c #D7C7AB", +"E# c #CCCECB", +"F# c #CDCDC8", +"G# c #DAC6A1", +"H# c #EABC70", +"I# c #FAB341", +"J# c #D2935D", +"K# c #B37F74", +"L# c #FDC875", +"M# c #393939", +"N# c #4A4A4A", +"O# c #FDC368", +"P# c #4E36C3", +"Q# c #DF9E52", +"R# c #F5B650", +"S# c #DFC395", +"T# c #CECEC8", +"U# c #D0CCC0", +"V# c #E4C084", +"W# c #F8B448", +"X# c #B17D76", +"Y# c #7D589E", +"Z# c #FDD089", +"`# c #BABABA", +" $ c #FDD088", +".$ c #F4B752", +"+$ c #DEC498", +"@$ c #CDCECA", +"#$ c #CECDC7", +"$$ c #E0C391", +"%$ c #FEDFAD", +"&$ c #7D7D7D", +"*$ c #A5757F", +"=$ c #EEA847", +"-$ c #F8B447", +";$ c #DFC394", +">$ c #CCCDCA", +",$ c #CECCC5", +"'$ c #FAB240", +")$ c #CB8E62", +"!$ c #A6767E", +"~$ c #FCB440", +"{$ c #FEECD0", +"]$ c #494949", +"^$ c #747474", +"/$ c #FEEFD7", +"($ c #EABD72", +"_$ c #D2CABA", +":$ c #EDBA6A", +"<$ c #B6B6B6", +"[$ c #FCBC55", +"}$ c #D7C7A9", +"|$ c #F4F4F4", +"1$ c #F5AD41", +"2$ c #EEBA68", +"3$ c #CFCCC2", +"4$ c #F1B85E", +"5$ c #F6AE41", +"6$ c #F2AB44", +"7$ c #F7F7F7", +"8$ c #DDDDDD", +"9$ c #FBB23E", +"0$ c #E2C18A", +"a$ c #E7BE79", +"b$ c #FFF4E4", +"c$ c #FCBA51", +"d$ c #F9B344", +"e$ c #D8C6A7", +"f$ c #E2C28C", +"g$ c #676767", +"h$ c #A9A9A9", +"i$ c #FDD79A", +"j$ c #D6C8AC", +"k$ c #DBC69E", +"l$ c #FAB342", +"m$ c #FEE4B9", +"n$ c #FFF6E9", +"o$ c #D4C9B4", +"p$ c #D8C7A6", +"q$ c #EFA946", +"r$ c #E6A34D", +"s$ c #5F5F5F", +"t$ c #F7B449", +"u$ c #D3CAB8", +"v$ c #FEEDD3", +"w$ c #DDC498", +"x$ c #FCB442", +"y$ c #373737", +"z$ c #737373", +"A$ c #FDC265", +"B$ c #7A55A0", +"C$ c #FBB23D", +"D$ c #DAC6A0", +"E$ c #606060", +"F$ c #4D4D4D", +"G$ c #E1C28F", +"H$ c #ECBB6B", +"I$ c #FDC873", +"J$ c #EDBB69", +"K$ c #F4B653", +"L$ c #F7B54C", +"M$ c #D4C9B3", +"N$ c #E3C189", +"O$ c #FEDAA1", +"P$ c #646464", +"Q$ c #FFF7EB", +"R$ c #E8BE77", +"S$ c #CDCDC9", +"T$ c #FCBB52", +"U$ c #121212", +"V$ c #D6C8AD", +"W$ c #FEE9C7", +"X$ c #FDC05F", +"Y$ c #E1C28C", +"Z$ c #E9BD74", +"`$ c #585858", +" % c #D2CBBD", +".% c #969696", +"+% c #252525", +"@% c #E9BD76", +"#% c #FEE3B7", +"$% c #EEEEEE", +"%% c #525252", +"&% c #D2CBBB", +"*% c #FBB33F", +"=% c #FCB543", +"-% c #FFFCF8", +";% c #CBCBCB", +">% c #FEDCA7", +",% c #CFCCC4", +"'% c #FDCA79", +")% c #FDD492", +"!% c #F6F6F6", +"~% c #C3C3C3", +"{% c #D9C6A3", +"]% c #E4C187", +"^% c #888888", +"/% c #FFF2DF", +"(% c #FFFBF5", +"_% c #6C6C6C", +":% c #FEE0B0", +"<% c #F2B85A", +"[% c #A7767E", +"}% c #FDCE82", +"|% c #DBC59D", +"1% c #D0CBBF", +"2% c #D9C7A4", +"3% c #7B7B7B", +"4% c #D1935D", +"5% c #EDB257", +"6% c #F5AF44", +"7% c #FDC161", +"8% c #6A6A6A", +"9% c #CEA884", +"0% c #AA818C", +"a% c #FCB646", +"b% c #8D8D8D", +"c% c #FEEED5", +"d% c #C7AC9E", +"e% c #A4849C", +"f% c #595959", +"g% c #232323", +"h% c #FEE4BA", +"i% c #4F37C2", +"j% c #C1B0AF", +"k% c #9F88AB", +"l% c #FEDAA0", +"m% c #D3CBB9", +"n% c #D1BCA4", +"o% c #D4CAB5", +"p% c #FEE2B5", +"q% c #EBEBEB", +"r% c #DBDBDB", +"s% c #FDD18B", +"t% c #F6B54E", +"u% c #FEDCA6", +"v% c #ACACAC", +"w% c #1B1B1B", +"x% c #7658AC", +"y% c #BBBDD0", +"z% c #ABAAD0", +"A% c #B27E75", +"B% c #B4B4B4", +"C% c #FDCA7A", +"D% c #4B38CC", +"E% c #B5B7D2", +"F% c #8F91DA", +"G% c #7C58A0", +"H% c #FDD698", +"I% c #4B38CE", +"J% c #7B59A4", +"K% c #C4C4C4", +"L% c #FDC46A", +"M% c #9D7B9A", +"N% c #C1C3CF", +"O% c #A4A5D5", +"P% c #A47886", +"Q% c #FDD491", +"R% c #D2D2D2", +"S% c #FDC56B", +"T% c #F0B961", +"U% c #F3B85A", +"V% c #FDCA78", +"W% c #F4B651", +"X% c #FDCE84", +"Y% c #F7B549", +"Z% c #D1CBBC", +"`% c #FEDFAF", +" & c #FDD594", +".& c #D7C8A9", +"+& c #909090", +"@& c #151515", +"#& c #DEC495", +"$& c #FEECCF", +"%& c #2A2A2A", +"&& c #9D9D9D", +"*& c #FEE3B9", +"=& c #666666", +"-& c #FEEDD2", +";& c #E3C087", +">& c #EBBC6D", +",& c #F6B54C", +"'& c #9C9C9C", +")& c #878787", +"!& c #3E3E3E", +"~& c #FDC469", +"{& c #BDBDBD", +"]& c #FEE1B4", +"^& c #EDBB68", +"/& c #CDCECB", +"(& c #F7B54A", +"_& c #FFF6E7", +":& c #FFF3E1", +"<& c #D8C7A7", +"[& c #E0C392", +"}& c #A4A4A4", +"|& c #FDCB7C", +"1& c #F1B95C", +"2& c #FEDFAE", +"3& c #E6E6E6", +"4& c #DFDEFF", +"5& c #D3CAB7", +"6& c #9F9F9F", +"7& c #FFF7EC", +"8& c #FCBB53", +"9& c #D9C6A5", +"0& c #FDD697", +"a& c #222222", +"b& c #9B9B9B", +"c& c #E7BF7B", +"d& c #EFB964", +"e& c #FEF1DA", +"f& c #CFCEFE", +"g& c #FCFCFF", +"h& c #F4B756", +"i& c #FDD89C", +"j& c #8584FE", +"k& c #0A08FC", +"l& c #D8C7A8", +"m& c #E0C291", +"n& c #100EFC", +"o& c #FDC05E", +"p& c #FDCF86", +"q& c #FAB443", +"r& c #818181", +"s& c #F0B962", +"t& c #CFCDC4", +"u& c #B8B8B8", +"v& c #F0BA61", +"w& c #FFF6E8", +"x& c #FFFEFC", +"y& c #E6BE7B", +"z& c #DEC497", +"A& c #FDC977", +"B& c #D8D8D8", +"C& c #FFF4E2", +"D& c #616161", +"E& c #FDC874", +"F& c #E9BD75", +"G& c #EFBA65", +"H& c #1715FC", +"I& c #9796FE", +"J& c #D7D6FF", +"K& c #AFAFFE", +"L& c #F5B64E", +"M& c #FFFDF9", +"N& c #F9F9F9", +"O& c #2120FD", +"P& c #302EFC", +"Q& c #504FFD", +"R& c #5250FD", +"S& c #413FFD", +"T& c #A1A1FE", +"U& c #FEE1B3", +"V& c #F8B549", +"W& c #DAC5A2", +"X& c #2927FC", +"Y& c #1C1AFD", +"Z& c #5453FD", +"`& c #FCBC54", +" * c #DCC49C", +".* c #DFC392", +"+* c #3A39FD", +"@* c #1110FC", +"#* c #C2C1FE", +"$* c #FEF0D9", +"%* c #1E1E1E", +"&* c #8D8CFE", +"** c #0704FC", +"=* c #302FFC", +"-* c #FEE6BF", +";* c #EBBC6E", +">* c #F2B85C", +",* c #FEE5BD", +"'* c #1816FD", +")* c #313131", +"!* c #3634FD", +"~* c #F6B64E", +"{* c #E8BE78", +"]* c #DDC49A", +"^* c #DFC293", +"/* c #414141", +"(* c #D9D8FF", +"_* c #1614FC", +":* c #E1E1FF", +"<* c #B4B4FE", +"[* c #DDDCFF", +"}* c #B0B0FE", +"|* c #AAA9CC", +"1* c #A7A7A7", +"2* c #A6A4F9", +"3* c #DCAC83", +"4* c #DC9C54", +"5* c #A47480", +"6* c #AF7C77", +"7* c #B07D77", +"8* c #DB9A56", +"9* c #DC9B55", +"0* c #AB7F84", +"a* c #9A7A9E", +"b* c #957DAB", +"c* c #C3AAA2", +"d* c #B4B1CA", +"e* c #8686D9", +"f* c #8586DD", +"g* c #8F90DB", +"h* c #D1CCBF", +"i* c #F6B54B", +"j* c #9E9DFE", +"k* c #8B8AFE", +"l* c #D1D0FE", +"m* c #F0F0FF", +"n* c #D8D7FF", +"o* c #9D9CFE", +"p* c #AEADD6", +"q* c #9897FE", +"r* c #9C9BFE", +"s* c #D3D0F7", +"t* c #D3955C", +"u* c #896195", +"v* c #976A8B", +"w* c #996C89", +"x* c #D3945C", +"y* c #986B8A", +"z* c #976C8D", +"A* c #3D3D3D", +"B* c #353535", +"C* c #FED99F", +"D* c #FEE5BE", +"E* c #FEE8C6", +"F* c #FCB647", +"G* c #FEF2DE", +"H* c #FFFCF7", +"I* c #383838", +"J* c #303030", +"K* c #FEE6C0", +"L* c #202020", +"M* c #FEE2B6", +"N* c #A0A0A0", +"O* c #FDD79B", +"P* c #FCBD59", +"Q* c #FEE7C2", +"R* c #E8E8E8", +"S* c #CECECE", +"T* c #FEDEAB", +"U* c #7877FE", +"V* c #ECECFF", +"W* c #3231FD", +"X* c #BBBBFE", +"Y* c #7A79FE", +"Z* c #A5A5FE", +"`* c #5A58FD", +" = c #C1C0FE", +".= c #A4A4FE", +"+= c #5B59FD", +"@= c #3D3CFD", +"#= c #A3A3FE", +"$= c #5E5CFD", +"%= c #0706C9", +"&= c #0A09D5", +"*= c #2322EE", +"== c #C3C2FD", +"-= c #A1A0FE", +";= c #5F5DFD", +">= c #C6C5FE", +",= c #A09FFE", +"'= c #3837FD", +")= c #3230F9", +"!= c #C6B8DA", +"~= c #9D88C8", +"{= c #322AEC", +"]= c #322AEB", +"^= c #6151D6", +"/= c #302EFD", +"(= c #1413FC", +"_= c #EDEDFF", +":= c #2220FC", +"<= c #6564FC", +"[= c #8382FE", +"}= c #0603FC", +"|= c #3736FD", +"1= c #424242", +"2= c #8A8A8A", +"3= c #1A18FC", +"4= c #4E4DFD", +"5= c #6462FD", +"6= c #2725FC", +"7= c #F4F4FF", +"8= c #B0B0B0", +"9= c #1D1CFD", +"0= c #615FFD", +"a= c #3534FD", +"b= c #7876FE", +"c= c #9797FE", +"d= c #A2A2A2", +"e= c #AEAEFE", +"f= c #E7E7FF", +"g= c #BEBDFE", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ @ @ # $ % & * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ = - ; > , @ @ ' ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . ~ { @ % ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . ^ / @ ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . _ : < [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . . } @ | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . . 1 @ 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . . & @ 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . . 4 @ 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . 6 7 $ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . 8 @ 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . 9 0 @ a 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ b c d e f g @ h i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . j k . . . . . ) l m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ @ @ @ @ # n o p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . q r 6 . . . . . s t . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . [ v w x y z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u A A A B C [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D E F G H I . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u L M N O @ @ P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^ Q @ @ R S T U J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V W X Y @ @ @ @ @ Z ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .@ @ @ @ @ Y ..+.@.. . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #.$.7 @ @ @ @ @ @ %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.*.@ @ @ @ @ =.-.;.>.. . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,.'.).!.@ @ @ ~.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . S @ @ @ {.].^.) . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s /.. (._.:.a <.[.@.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . }.g |.1.2.B . . [ 3.. . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . 3.4.5.&.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7.8.(.. . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.0.a.b.c.d.d.d.e.b.f.g.h.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i.j.k.l.m.n.o.p.p.p.p.q.r.r.s.p.p.p.p.p.t.u.v.w.x.y.z.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (.. . . . . . . . . . . . . . . . . . . . . . . . . . A.B.C.D.r.p.E.F.G.C.H.I.J.i.A.. . . . . . K.z.L.M.N.O.P.Q.R.S.p.T.Q.U.V.W.. . . . . . . . . . . . . . . . . . . . . . . . . 9 X.. . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.J.Z.`. +.+++@+#+$+. . . . . . . . . . . . . . . . . . . . . . . . W.%+&+*+=+ +-+v.;+>+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.,+'+)+!+~+{+]+W.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^+N./+(+p.u._+:+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <+k . . . . . . . . . . . . . . . . [+}+|+1+2+3+g.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4+5+=+p.F.x.6+. . . . . . . . . . . . . . . . 7+8+. . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . . . . . . . . . . . 9+0+ +R.a+b+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c+d+)+e+f+g+. . . . . . . . . . . . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . . . . . . . . W.h+i+S.j+k+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.#+l+q.D.e.. . . . . . . . . . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m+n+. . . . . . . . . K.o+p+E.q+0.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c+r+s+t+I.. . . . . . . . . . L 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #+u+-+v+^+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . w+*+x+++y+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z+2+A+B+z.. . . . . . . . . . . . . . . . . . . . . . C+D+E+F+G+H+I+J+K+L+M+J+N+O+P+Q+R+S+T+U+V+. . . . . . . . . . . . . . . . . . . . . . w+W+1+X+Y+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7+/.. . . . 6+Z+ +`+$+. . . . . . . . . . . . . . . . . . . C+ @.@O++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@$@%@&@*@V+. . . . . . . . . . . . . . . . . . . a.=@e+-@;@. . . . [ 3.. . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . j.>@,@9+. . . . . . . . . . . . . . . . . '@)@R+!@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@{@]@^@/@. . . . . . . . . . . . . . . . . Y.(@_@u+J.. . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . :@G.s+@+9.. . . . . . . . . . . . . . . V+<@[@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|@1@2@. . . . . . . . . . . . . . . . 6+3@s+{+;@. J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u k+T.4@a.. . . . . . . . . . . . . . . 5@R+6@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7@8@C+. . . . . . . . . . . . . . . j.9@=+L.J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.0@s+/+9.. . . . . . . . . . . . . a@b@c@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d@e@5@. . . . . . . . . . . . . . f@g@E.h@X.. . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^+i@j@k@. . . . . . . . . . . . . V+l@m@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@o@D+. . . . . . . . . . . . . Y.p@S.q@W.. . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f.r@s@t@. . . . . . . . . . . . . u@m@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v@w@. . . . . . . . . . . . . ]+x@y@:@. . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z@r.`+A@k . . . . . . . . . . . 2@O+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@B@C@. . . . . . . . . . . 7+D@i+E@L.. . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . F@G@H@Y./ u . . . . . . . . . I@J@n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@{@K@L@. . . . . . . . . J K M@N@_@O@. . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P@s+O.. . / u . . . . . . . . Q@R@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@T@. . . . . . . . J K . h.U@E.e.. . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a+S.V@. . . m+n+. . . . . . W@X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@K@a@. . . . . . L 3 . . Y.Y@A+d.. . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Z@S.`@. . . . . . . . . . . #.#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+#@#. . . . . . . . . . . {+A+##. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $#S.%#. . . . . . . . . . . &#*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=# @. . . . . . . . . . . C.s.y.. . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -#s+;#. . . . . . 7+/.. . '@Q+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@1@a@. . [ 3.. . . . . . q+r.z+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c.G@>#. . . . . . . / u . ,#'#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X@'@. J K . . . . . . Y.G.>@Y+. . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L.)#d+. . . . . . . . / u !#$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N+~#J K . . . . . . . ;@{#s@]#. . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.R.0+K.. . . . . . . . / ^#/#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J+(#K . . . . . . . . A.R.0+Y.. . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.v.s@]#. . . . . . . . . T@=#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_#:#<#[#}#|#1#2#3#4#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@6#7#. . . . . . . . . :+r._+. . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -@8#t@. . . . . . . . . *@=#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9#0#a#b#c#d#e#e#e#e#e#e#e#e#e#e#e#f#g#h#i#j#~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m@C+. . . . . . . . . I. +d.. . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y+S.-#. . . . . . . . . k#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@l#m#n#o#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#p#q#r#s#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t#u#. . . . . . . . . d+v#w#. . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^+T./+. . . . . . . . . x#y#@@z#A#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B#C#D#E#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#F#G#H#I#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J#K#@@L#L@. . . . . . . . W.M#N#Y.. . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3@,@9.. . . . . . . . '@O#@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R#S#T#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#U#V#W#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@Z#. . . . . . . . . $+E.x.. . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . `#s+M.. . . . . . . . . $@@@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.$+$@$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e##$$$_#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@@@%$. . . . . . . . . $#-+>+. . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#)+&$. . . . . . . . . &@@@@@@@@@*$=$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-$;$>$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#,$a#'$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)$!$@@@@@@~${$. . . . . . . . Y.2+]$. . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^$(+9.. . . . . . . . /$#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@($p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#_$:$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/#x#. . . . . . . . t@s.h+. . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g+s+<$. . . . . . . . W@[$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@l#}$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#h#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]@a@. . . . . . . . _+>@|$. . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.`+. . . . . . . . . Q+@@@@@@@@@@@@J#1$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2$3$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#_$4$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5$6$@@@@@@@@@@@@%$. . . . . . . . 7$|+&$. . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.S.8$. . . . . . . . u@@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@@@@@9$0$E#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#@$a$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@d@b$. . . . . . . . `@A+Y+. . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.u.q@. . . . . . . . u#c$@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@@@d$e$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#f$n@@@@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@@@v@a@. . . . . . . . M#g$. . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h$o.g.. . . . . . . . i$@@@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@s#j$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#k$l$@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@@@@@m$. . . . . . . . 9+s+8$. . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.4@P.. . . . . . . . n$d@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_#o$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#p$'$@@@@@@@@@@@@@@@@@@@@@@q$r$@@@@@@@@@@@@@@@@/#~#. . . . . . . . 2+s$. . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N.s.b+. . . . . . . . %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t$u$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#q#9$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@. . . . . . . . z@s+i.. . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . F.q@. . . . . . . . v$~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I#j$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#w$n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@x$@#. . . . . . . . y$z$. . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b.1+t@. . . . . . . . A$@@@@@@@@@@@@@@@@@@@@B$A#@@@@@@@@@@@@@@@@C$D$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#f$@@@@@@@@@@@@@@@@@@J#K#@@@@@@@@@@@@@@@@@@@@J@. . . . . . . . F@-+6+. . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E$F$. . . . . . . . T+@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@@@G$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#H$@@@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@#@U+. . . . . . . h.|+a+. . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z.G@B.. . . . . . . . I$@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@J$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#,$K$@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@@@G+. . . . . . . . }+u+. . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O.T.Y.. . . . . . . /@~@@@@@@@@@@@@@@@@@@@@@@@*$=$@@@@@@@@@@@@L$p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#M$l$@@@@@@@@@@@@)$!$@@@@@@@@@@@@@@@@@@@@@@d@C+. . . . . . . w#s+]+. . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~+&$. . . . . . . . Q+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@p$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#N$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O$. . . . . . . . g@P$. . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c+q.:+. . . . . . . Q$#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#S$4#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T$V+. . . . . . . V@U$;@. . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . _+~+. . . . . . . . F+@@@@@@@@@@@@@@@@@@@@@@@@@@J#1$@@@@@@@@s#p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#V$n@@@@@@@@@5$6$@@@@@@@@@@@@@@@@@@@@@@@@@@W$. . . . . . . M@.+j.. . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u.5+. . . . . . . . X$@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@@@Y$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#Z$@@@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@o@. . . . . . . . `$j+. . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >+q.%+. . . . . . . 2@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@.$S$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e# %9#@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@#@W@. . . . . . . V@j@h.. . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .%+%. . . . . . . . 1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@w$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#@%@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@#%. . . . . . . $% +,+. . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . %%*+. . . . . . . . M+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L$F#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#&%*%@@@@q$r$@@@@@@@@@@@@@@@@@@@@@@@@@@@@]@. . . . . . . . t+v+. . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h.r.`@. . . . . . . w@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#($@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=%-%. . . . . . . 0@F.. . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ;%1+$%. . . . . . . >%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5#,%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#V$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b@. . . . . . . c.x+7$. ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >#s@. . . . . . . . '%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B$A#@@($e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#K$@@J#K#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)%. . . . . . . !%S.~%. ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . G.3@. . . . . . . a@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#@@{%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#]%@@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J+. . . . . . . . y$^%. ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E@3+. . . . . . . /%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#s#F#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#&%n@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*#(%. . . . . . . _%X+. ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M@!+b.. . . . . . . :%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!$=$Z$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#<%)$[%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)@. . . . . . . 3+r@. ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b.!+|$. . . . . . . }%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#m#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>%. . . . . . . ]+1+!%", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (@|+. . . . . . . . K+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@1%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#2%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q+. . . . . . . ]#q.a.", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3%N#. . . . . . . . {@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4%5%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#o#6%6$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7%. . . . . . . . v#`@", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . W+8%. . . . . . . C+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#9%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#0%Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a%. . . . . . . . y$b%", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++5+. . . . . . . c%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#d%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e%Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C+. . . . . . . f%_%", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g%(@. . . . . . . h%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@i%j%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#k%Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #. . . . . . . z$`+", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o.`#. . . . . . . l%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#n%r$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@u@. . . . . . . 5+++", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . W.q.;%. . . . . . . )%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*%@$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#o%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@p%. . . . . . . 3+R.", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . q%p.r%. . . . . . . s%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#1%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@u%. . . . . . . v%w%", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . L.p.b+. . . . . . . }%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@x%y%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#z%A%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1@. . . . . . . B%)#", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . c+p.:@. . . . . . . C%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D%E%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#F%G%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H%. . . . . . . d..+", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . z+p.]#. . . . . . . O+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I%E%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#F%J%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)%. . . . . . . K%1+", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . O@p.7$. . . . . . . L%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M%N%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#O%P%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q%. . . . . . . ~% +", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . R%p.M@. . . . . . . S%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#l$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R+. . . . . . . 9+A+", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . f.p.f@. . . . . . . O+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@U%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@. . . . . . . B.-+", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . >+p.0.. . . . . . . V%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#o#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O$. . . . . . . #+t.", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . z.p.:+. . . . . . . X%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#Z%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`%. . . . . . . &++%", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.1+V.. . . . . . . &@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C$T#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E+. . . . . . . +&y$", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @&#+. . . . . . . ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e##&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$&. . . . . . . v+{#", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . %&&&. . . . . . . *&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#a#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#. . . . . . . =&E$", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . l+v+. . . . . . . -&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#1#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=%a@. . . . . . . {#{+", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . =&E$. . . . . . . Q$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#,&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!@. . . . . . . . %&'&", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )&!&. . . . . . . a@{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y%E#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#_$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@V%. . . . . . . K.s.##", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V@9@. . . . . . . . ~&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#w$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &. . . . . . . t@p.[+", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4+p.g.. . . . . . . J@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#C#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*&. . . . . . . k@8#. ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h.G@{&. . . . . . . ]&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#/&(&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_&. . . . . . . k.F.. ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i+Z@. . . . . . . :&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9#p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#<&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@c$. . . . . . . . `+Z+. ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f+X+. . . . . . . a@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H+. . . . . . . . >@}&. ", +". . . . . . . . . . . . . . . . . . . n+I . . . . . . . . . . (@>@. . . . . . . . |&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#S$-$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2&. . . . . . . 3&p.f.. ", +". . . . . . . . . . . . . . . . . . . +.4&. . . . . . . . . . $+p.w+. . . . . . . ]&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@5&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#w$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@w@. . . . . . . h+t.Y.. ", +". . . . . . . . . . . . . . . . . . . +.4&. . . . . . . . . . . )+6&. . . . . . . 7&~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#:#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8&a@. . . . . . . U@X+. . ", +". . . . . . . . . . . . . . . . . . . +.4&. . . . . . . . . . . P$X+. . . . . . . . A$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9#Z%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#9&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0&. . . . . . . . a&b&. . ", +". . . . . . . . . . . . . . . . . . . +.4&. . . . . . . . . . . -#r.W.. . . . . . . >%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@c&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@e&. . . . . . . :+p.t@. . ", +"f&f&f&f&f&f&f&f&f&f&f&f&. . . . . . . +.4&. . . . . . . . . . . ^+s+y.. . . . . . . n$~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I#f#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#p$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$@. . . . . . . . k.4@. . . ", +"@ @ @ @ @ @ @ @ @ @ @ @ g&. . . . . . +.4&. . . . . . . . . . . . m./+. . . . . . . . N+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Z$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#/&h&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@i&. . . . . . . . y$v+. . . ", +"j&j&j&j&j&O k&j&j&j&j&j&(.. . . . . . +.4&. . . . . . . . . . . . H.9@K.. . . . . . . h%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@l&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#m&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@2@. . . . . . . Y+!+a.. . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . $%S.z@. . . . . . . '@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@j#S$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#U#W#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O+. . . . . . . . )&,@. . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . 0+r+. . . . . . . . H%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#^&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b@. . . . . . . . %&k.. . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . B%.+6+. . . . . . . x#x$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*%D#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#[&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o&a@. . . . . . . M.1+0.. . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . h.)+.%. . . . . . . . p&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,&p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#5&q&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#%. . . . . . . . E$i@. . . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . r&u+Y.. . . . . . . 5@*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s&/&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#t&4#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@c$'@. . . . . . . q%G@u&. . . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . b+G@I.. . . . . . . . $@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#F#v&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&@. . . . . . . . 5+E@Y.. . . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . g$2+. . . . . . . . w&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#|#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|@x&. . . . . . . 7$x@.%. . . . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . f.1+;%. . . . . . . . H%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@$$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#y&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b@. . . . . . . . P@x@7$. . . . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . . X+]$. . . . . . . . u#c$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@z&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#>$@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A&. . . . . . . . ;@T.-@. . . . . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . . B& +~%. . . . . . . . m$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@V#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#/&($@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@C&. . . . . . . . P@@&]#. . . . . . . ", +". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . . . D&=@. . . . . . . . . E&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F&@$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#3$G&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H%. . . . . . . . ]#v#>#. . . . . . . . ", +". . . . . H&y . . . . . . . . p I&I . +.4&. J&K&. . . . . . . . . . . . . . w+G@`@. . . . . . . . @#{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2#U#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#c#L&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!@M&. . . . . . . . {+g%N&. . . . . . . . ", +". . . . . . . . . . . . . . . (.O&P&Q&Q R&S&y T&. . . . . . . . . . . . . . . @+a&7$. . . . . . . . U&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@V&W&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#+$I#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=%/%. . . . . . . . w+s.V@. . . . . . . . . ", +". . . . . . . . . . . . . . . . '.@ @ @ @ @ X&/.. . . . . . . . . . . . . . . !%T.}+. . . . . . . . . H+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@c&T#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e# %J$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2&. . . . . . . . . 0+D.. . . . . . . . . . ", +". . . . . . . . . . . . . . . . C Y&@ @ @ @ Z&. . . . . . . . . . . . . . . . . h+s.r%. . . . . . . . I@`&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@l# *e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#>$.*5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]@a@. . . . . . . . j.S.B&. . . . . . . . . . ", +". . . . . . . . . . . . . . . . . +*@ @ @ @*#*. . . . . . . . . . . . . . . . . . F$=@Y.. . . . . . . . $*=%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s&M$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#p$:#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@c$x#. . . . . . . . 6+%*3%. . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . &***@ @ =*(.. . . . . . . . . . . . . . . . . . 3&r.P@. . . . . . . . . -*~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C$;*c#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#W&>*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=% #. . . . . . . . . D&%&7$. . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . n+[.@ @ q . . . . . . . . . . . . . . . . . . . . &&e+B&. . . . . . . . . .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v&W&>$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#o#+$:#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@,*. . . . . . . . . B%s+J.. . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . w @ '*i . . . . . . . . . . . . . . . . . . . . . `+)*9.. . . . . . . . a@p&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-$@%D#E#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#>$D#@%5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>%. . . . . . . . . [+@&_+. . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . K&: !*. . . . . . . . . . . . . . . . . . . . . . $%T.q@. . . . . . . . . L@I$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~*{*]* %e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#5&^*>&Y%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H%. . . . . . . . . h.=@/*h.. . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . 8+m+m+(*_*d :*m+m+K&. . . <*m+m+[*. . C m+m+}*. . . <*m+m+|*S.1*C m+m+}*. . . J m+2*3*@@@@4*5*5*6*@@@@@@7*5*5*8*@@@@9*5*5*6*@@@@@@7*5*5*9*@@@@9*5*5*7*@@@@@@0*a*b*c*e$5&d*e*f*g*e#o#h*5&l&[&y&G&i*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G+a@. . . . . . . . . Y@t.3&. . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . j*k*k*l*l m*n*k*k*I&. . . o*k*k*l*. . J&k*k*I&. . . o*k*k*>.;+s.p*k*k*q*. . . r*k*k*s*I+@@t*u*u*v*@@@@@@w*u*u*4%@@@@x*u*u*y*@@@@@@w*u*u*J#@@@@J#u*u*y*@@@@@@y*u*u*x*@@@@4%u*u*z*n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q%a@. . . . . . . . . 1*s+##. . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P$T.b+. . . . . . . . . -%A&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H%. . . . . . . . . . ;%A+P@. . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N&A*B*]#. . . . . . . . . V+ $@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@u%. . . . . . . . . . $+9@8%. . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6+s@2+N&. . . . . . . . . a@C*~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d@D*. . . . . . . . . . q%E@i@W.. . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >+w%W+K.. . . . . . . . . . E*F*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T$/$. . . . . . . . . . A.=+`.!%. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g+t.s$K.. . . . . . . . . . G*|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O+C+. . . . . . . . . . ^+F.4@:@. . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z+@&r+K.. . . . . . . . . . H*Q+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~$u%a@. . . . . . . . . . 6+I*J*q%. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . R%t.X+N&. . . . . . . . . . . K*6@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!@/$. . . . . . . . . . . g.=+u.z.. . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f.L*D.]#. . . . . . . . . . . ,#X@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~$i&'@. . . . . . . . . . . 8$+%`.$%. . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [+R.u.Y+. . . . . . . . . . . . #O#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I+w@. . . . . . . . . . . . ;%_@0+!%. . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :@l+x@y+. . . . . . . . . . . . V+M*+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.#K*. . . . . . . . . . . . . }&A+8%h.. . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . W.Z+G@N*. . . . . . . . . . . . . u#O*{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T$S+L@. . . . . . . . . . . . W.z$S.$#. . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b&A+E$|$. . . . . . . . . . . . . (%K@`&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P*S+'@. . . . . . . . . . . . . i.A*x@K%. . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a.E@%&a.. . . . . . . . . . . . . . x&l@t#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@v@Q*V+. . . . . . . . . . . . . . `@U${#R*. . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#E$S.0@W.. . . . . . . . . . . . . . . /$ &T$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8&.@k#. . . . . . . . . . . . . . . $%s$s+k.Y.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N._@=+S*. . . . . . . . . . . . . . . . a@-&G+/#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[$[@v$a@. . . . . . . . . . . . . . . . %#x@J*S*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z.G. +Z+6+. . . . . . . . . . . . . . . . . V+e&T*P++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}@V%K@:&. . . . . . . . . . . . . . . . . . L.v.x+0@;@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . U*V*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z@R._@x.W.. . . . . . . . . . . . . . . . . . . . 5@M*R+o@X$d@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~$L+E&0&h%2@. . . . . . . . . . . . . . . . . . . . ]#Y@G@m.f.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . } W*W*X*$ Y*Z*W*W*`*. . . } W*W* =. . .=W*W*+=. . . @=W*W*#*. . #=W*W*; . . . P W*W*}.. . T&W*W*$=. ;@+&%=&=*===. . -=W*W*;=. . . +*W*W*>=. . ,=W*W*1 . . . '=W*)=!=K*U&~={=]=^=i$^@8@]&Q@-&U+x&. . . . . . . . . . . . . . . . . . . . . . . 7$Z@t.g%#+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . .=: /=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6+d+s.J*V@K.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . !%;+>@9@P@N&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . ~.@ (=J&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . R*q+o.n.x.|$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . q%v+@&x@b%!%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . _=:=@ @ <=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f@_+x@8#'+B&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~%G.A+r@&&9.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . [=}=@ @ 1.I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ;@1*t+p.y$P@z.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t@)&r@s+%%I.Y.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . |=@ @ @ |.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f.@+T. +1=O.i.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g+2=~+p.4@k.w#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . B 3=@ @ @ @ 4=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.V.q++%p.r@*+`@b+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >+o+=&)+q.J*v+c+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . 5=@ @ @ @ @ 6=7=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B&;+N@r.p.L*`$2=B%t@K.. . . . . . . . . . . . . . . . . . . h.t@8=_+`+>@p.9@X+H.3&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . I 9=|=0=a=b=4=< c=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.4+N*8%M#8#p.A+r@l+r+Y@2=3+V@V@B.d.d.F@V@&&-@B+r+y@p+S.p.U$/*/+d=t@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . 3.e=. . `*n*. f=g=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [+{&6&v+3@F$A*R.a&)#r.r.r.t.a&r@`.0+P$v+&+y.[+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp index c92d128339..6210eb7fe4 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version v3.8.0) +// C++ code generated with wxFormBuilder (version Aug 8 2018) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -18,6 +18,7 @@ #include "../bitmaps/microstrip_zodd_zeven.xpm" #include "../bitmaps/regul.xpm" #include "../bitmaps/regul_3pins.xpm" +#include "../bitmaps/via.xpm" /////////////////////////////////////////////////////////////////////////// @@ -519,6 +520,333 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelTrackWidth->Layout(); bSizerTrackWidth->Fit( m_panelTrackWidth ); m_Notebook->AddPage( m_panelTrackWidth, _("Track Width"), false ); + m_panelViaSize = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerViaSize; + bSizerViaSize = new wxBoxSizer( wxHORIZONTAL ); + + wxStaticBoxSizer* sbSizerVS_Inputs; + sbSizerVS_Inputs = new wxStaticBoxSizer( new wxStaticBox( m_panelViaSize, wxID_ANY, _("Parameters:") ), wxVERTICAL ); + + wxFlexGridSizer* fgSizerVS_Inputs; + fgSizerVS_Inputs = new wxFlexGridSizer( 0, 3, 0, 0 ); + fgSizerVS_Inputs->AddGrowableCol( 1 ); + fgSizerVS_Inputs->SetFlexibleDirection( wxBOTH ); + fgSizerVS_Inputs->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticTextHoleDia = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("D:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHoleDia->Wrap( -1 ); + m_staticTextHoleDia->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + m_staticTextHoleDia->SetToolTip( _("Finished hole dia") ); + + fgSizerVS_Inputs->Add( m_staticTextHoleDia, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 ); + + m_textCtrlHoleDia = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlHoleDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + wxArrayString m_choiceHoleDiaChoices; + m_choiceHoleDia = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHoleDiaChoices, 0 ); + m_choiceHoleDia->SetSelection( 0 ); + fgSizerVS_Inputs->Add( m_choiceHoleDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextPlatingThickness = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("T:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPlatingThickness->Wrap( -1 ); + m_staticTextPlatingThickness->SetToolTip( _("Plating thickness") ); + + fgSizerVS_Inputs->Add( m_staticTextPlatingThickness, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlPlatingThickness = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlPlatingThickness, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxArrayString m_choicePlatingThicknessChoices; + m_choicePlatingThickness = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePlatingThicknessChoices, 0 ); + m_choicePlatingThickness->SetSelection( 0 ); + fgSizerVS_Inputs->Add( m_choicePlatingThickness, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_staticTextViaLength = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Via length:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextViaLength->Wrap( -1 ); + fgSizerVS_Inputs->Add( m_staticTextViaLength, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 ); + + m_textCtrlViaLength = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlViaLength, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + wxArrayString m_choiceViaLengthChoices; + m_choiceViaLength = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceViaLengthChoices, 0 ); + m_choiceViaLength->SetSelection( 0 ); + fgSizerVS_Inputs->Add( m_choiceViaLength, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextViaPadDia = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Via pad dia:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextViaPadDia->Wrap( -1 ); + m_staticTextViaPadDia->SetToolTip( _("Diameter of pad surrounding via") ); + + fgSizerVS_Inputs->Add( m_staticTextViaPadDia, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 ); + + m_textCtrlViaPadDia = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlViaPadDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + wxArrayString m_choiceViaPadDiaChoices; + m_choiceViaPadDia = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceViaPadDiaChoices, 0 ); + m_choiceViaPadDia->SetSelection( 0 ); + fgSizerVS_Inputs->Add( m_choiceViaPadDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextClearanceDia = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Clearance hole dia:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextClearanceDia->Wrap( -1 ); + m_staticTextClearanceDia->SetToolTip( _("Diameter of clearance hole in ground plane(s)") ); + + fgSizerVS_Inputs->Add( m_staticTextClearanceDia, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 ); + + m_textCtrlClearanceDia = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlClearanceDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + wxArrayString m_choiceClearanceDiaChoices; + m_choiceClearanceDia = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceClearanceDiaChoices, 0 ); + m_choiceClearanceDia->SetSelection( 0 ); + fgSizerVS_Inputs->Add( m_choiceClearanceDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextBoardThickness = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("PCB thickness:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextBoardThickness->Wrap( -1 ); + fgSizerVS_Inputs->Add( m_staticTextBoardThickness, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 ); + + m_textCtrlBoardThickness = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlBoardThickness, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + wxArrayString m_choiceBoardThicknessChoices; + m_choiceBoardThickness = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceBoardThicknessChoices, 0 ); + m_choiceBoardThickness->SetSelection( 0 ); + fgSizerVS_Inputs->Add( m_choiceBoardThickness, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextImpedance = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Z0:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextImpedance->Wrap( -1 ); + m_staticTextImpedance->SetToolTip( _("Characteristic impedance of conductor") ); + + fgSizerVS_Inputs->Add( m_staticTextImpedance, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 ); + + m_textCtrlImpedance = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlImpedance, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + wxArrayString m_choiceImpedanceChoices; + m_choiceImpedance = new UNIT_SELECTOR_RESISTOR( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceImpedanceChoices, 0 ); + m_choiceImpedance->SetSelection( 0 ); + fgSizerVS_Inputs->Add( m_choiceImpedance, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticAppliedCurrent = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Applied current:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticAppliedCurrent->Wrap( -1 ); + fgSizerVS_Inputs->Add( m_staticAppliedCurrent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 ); + + m_textCtrlAppliedCurrent = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlAppliedCurrent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextAppliedCurrentUnits = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("A"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAppliedCurrentUnits->Wrap( -1 ); + fgSizerVS_Inputs->Add( m_staticTextAppliedCurrentUnits, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticTextResistivity = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Plating resistivity:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextResistivity->Wrap( -1 ); + m_staticTextResistivity->SetToolTip( _("Specific resistance in ohms * meters") ); + + fgSizerVS_Inputs->Add( m_staticTextResistivity, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_textCtrlPlatingResistivity = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlPlatingResistivity, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_button_ResistivityVia = new wxButton( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); + fgSizerVS_Inputs->Add( m_button_ResistivityVia, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextPermittivity = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Er:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPermittivity->Wrap( -1 ); + m_staticTextPermittivity->SetToolTip( _("Relative dielectric constant (epsilon r)") ); + + fgSizerVS_Inputs->Add( m_staticTextPermittivity, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_textCtrlPlatingPermittivity = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlPlatingPermittivity, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_button_Permittivity = new wxButton( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); + fgSizerVS_Inputs->Add( m_button_Permittivity, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextTemperatureDiff = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Temperature rise:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTemperatureDiff->Wrap( -1 ); + m_staticTextTemperatureDiff->SetToolTip( _("Maximum acceptable rise in temperature") ); + + fgSizerVS_Inputs->Add( m_staticTextTemperatureDiff, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_textCtrlTemperatureDiff = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlTemperatureDiff, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextTemperatureUnits = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("deg C"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTemperatureUnits->Wrap( -1 ); + fgSizerVS_Inputs->Add( m_staticTextTemperatureUnits, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticTextRiseTime = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Pulse rise time:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRiseTime->Wrap( -1 ); + m_staticTextRiseTime->SetToolTip( _("Pulse rise time to calculate reactance") ); + + fgSizerVS_Inputs->Add( m_staticTextRiseTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_textCtrlRiseTime = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerVS_Inputs->Add( m_textCtrlRiseTime, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextRiseTimeUnits = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("ns"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRiseTimeUnits->Wrap( -1 ); + m_staticTextRiseTimeUnits->SetToolTip( _("nanoseconds") ); + + fgSizerVS_Inputs->Add( m_staticTextRiseTimeUnits, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + sbSizerVS_Inputs->Add( fgSizerVS_Inputs, 0, wxEXPAND, 5 ); + + m_staticline31 = new wxStaticLine( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + sbSizerVS_Inputs->Add( m_staticline31, 0, wxALL|wxEXPAND, 5 ); + + m_bitmap10 = new wxStaticBitmap( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxBitmap( via_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmap10->SetToolTip( _("Top view of via") ); + + sbSizerVS_Inputs->Add( m_bitmap10, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + + bSizerViaSize->Add( sbSizerVS_Inputs, 1, wxEXPAND|wxALL, 5 ); + + wxStaticBoxSizer* sbSizerVS_Result; + sbSizerVS_Result = new wxStaticBoxSizer( new wxStaticBox( m_panelViaSize, wxID_ANY, _("Results:") ), wxVERTICAL ); + + wxFlexGridSizer* fgSizerTW_Results11; + fgSizerTW_Results11 = new wxFlexGridSizer( 0, 3, 0, 0 ); + fgSizerTW_Results11->AddGrowableCol( 1 ); + fgSizerTW_Results11->SetFlexibleDirection( wxBOTH ); + fgSizerTW_Results11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticTextArea11 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Resistance:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextArea11->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticTextArea11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_ViaResistance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ViaResistance->Wrap( -1 ); + fgSizerTW_Results11->Add( m_ViaResistance, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + m_IntTrackAreaUnitLabel1 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackAreaUnitLabel1->Wrap( -1 ); + fgSizerTW_Results11->Add( m_IntTrackAreaUnitLabel1, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticText65111 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Voltage drop:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText65111->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticText65111, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_ViaVoltageDrop = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ViaVoltageDrop->Wrap( -1 ); + fgSizerTW_Results11->Add( m_ViaVoltageDrop, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + m_staticText8411 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText8411->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticText8411, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticText66111 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Power loss:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText66111->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticText66111, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_ViaPowerLoss = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ViaPowerLoss->Wrap( -1 ); + fgSizerTW_Results11->Add( m_ViaPowerLoss, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + m_staticText8311 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Watt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText8311->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticText8311, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticText79211 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Thermal resistance:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText79211->Wrap( -1 ); + m_staticText79211->SetToolTip( _("Using thermal conductivity value 401 Watts/(meter-Kelvin)") ); + + fgSizerTW_Results11->Add( m_staticText79211, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_ViaThermalResistance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ViaThermalResistance->Wrap( -1 ); + fgSizerTW_Results11->Add( m_ViaThermalResistance, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + m_staticText791111 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("deg C/Watt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText791111->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticText791111, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticTextAmpacity = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Estimated ampacity:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAmpacity->Wrap( -1 ); + m_staticTextAmpacity->SetToolTip( _("Based on temperature rise") ); + + fgSizerTW_Results11->Add( m_staticTextAmpacity, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_ViaAmpacity = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ViaAmpacity->Wrap( -1 ); + fgSizerTW_Results11->Add( m_ViaAmpacity, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + m_staticTextAmpacityUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("A"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAmpacityUnits->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticTextAmpacityUnits, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticTextCapacitance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Capacitance:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCapacitance->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticTextCapacitance, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_ViaCapacitance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ViaCapacitance->Wrap( -1 ); + fgSizerTW_Results11->Add( m_ViaCapacitance, 0, wxALL, 5 ); + + m_staticTextCapacitanceUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("pF"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCapacitanceUnits->Wrap( -1 ); + m_staticTextCapacitanceUnits->SetToolTip( _("pico-Farad") ); + + fgSizerTW_Results11->Add( m_staticTextCapacitanceUnits, 0, wxALL, 5 ); + + m_staticTextRiseTimeOutput = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Rise time degradation:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRiseTimeOutput->Wrap( -1 ); + m_staticTextRiseTimeOutput->SetToolTip( _("Rise time degradation for given Z0 and calculated capacitance") ); + + fgSizerTW_Results11->Add( m_staticTextRiseTimeOutput, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_RiseTimeOutput = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_RiseTimeOutput->Wrap( -1 ); + fgSizerTW_Results11->Add( m_RiseTimeOutput, 0, wxALL, 5 ); + + m_staticTextRiseTimeOutputUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("ps"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRiseTimeOutputUnits->Wrap( -1 ); + m_staticTextRiseTimeOutputUnits->SetToolTip( _("picoseconds") ); + + fgSizerTW_Results11->Add( m_staticTextRiseTimeOutputUnits, 0, wxALL, 5 ); + + m_staticTextInductance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Inductance:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextInductance->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticTextInductance, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_Inductance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Inductance->Wrap( -1 ); + fgSizerTW_Results11->Add( m_Inductance, 0, wxALL, 5 ); + + m_staticTextInductanceUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("nH"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextInductanceUnits->Wrap( -1 ); + m_staticTextInductanceUnits->SetToolTip( _("nano-Henry") ); + + fgSizerTW_Results11->Add( m_staticTextInductanceUnits, 0, wxALL, 5 ); + + m_staticTextReactance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Reactance:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextReactance->Wrap( -1 ); + m_staticTextReactance->SetToolTip( _("Inductive reactance for given rise time and calculated inductance") ); + + fgSizerTW_Results11->Add( m_staticTextReactance, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_Reactance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Reactance->Wrap( -1 ); + fgSizerTW_Results11->Add( m_Reactance, 0, wxALL, 5 ); + + m_staticTextReactanceUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextReactanceUnits->Wrap( -1 ); + fgSizerTW_Results11->Add( m_staticTextReactanceUnits, 0, wxALL, 5 ); + + + sbSizerVS_Result->Add( fgSizerTW_Results11, 0, wxEXPAND, 5 ); + + + bSizerViaSize->Add( sbSizerVS_Result, 1, wxEXPAND|wxALL, 5 ); + + + m_panelViaSize->SetSizer( bSizerViaSize ); + m_panelViaSize->Layout(); + bSizerViaSize->Fit( m_panelViaSize ); + m_Notebook->AddPage( m_panelViaSize, _("Via Size"), true ); m_panelElectricalSpacing = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerElectricalClearance; bSizerElectricalClearance = new wxBoxSizer( wxHORIZONTAL ); @@ -1330,14 +1658,14 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelBoardClass->SetSizer( bSizerBoardClass ); m_panelBoardClass->Layout(); bSizerBoardClass->Fit( m_panelBoardClass ); - m_Notebook->AddPage( m_panelBoardClass, _("Board Classes"), true ); + m_Notebook->AddPage( m_panelBoardClass, _("Board Classes"), false ); bmainFrameSizer->Add( m_Notebook, 1, wxEXPAND, 5 ); this->SetSizer( bmainFrameSizer ); this->Layout(); - + bmainFrameSizer->Fit( this ); this->Centre( wxBOTH ); // Connect Events @@ -1362,6 +1690,27 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_TW_IntTrackWidth_choiceUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); m_IntTrackThicknessValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); m_IntTrackThicknessUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_textCtrlHoleDia->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceHoleDia->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlPlatingThickness->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choicePlatingThickness->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlViaLength->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceViaLength->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlViaPadDia->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceViaPadDia->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlClearanceDia->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceClearanceDia->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlBoardThickness->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceBoardThickness->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlImpedance->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceImpedance->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlAppliedCurrent->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlPlatingResistivity->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_button_ResistivityVia->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaRho_Button ), NULL, this ); + m_textCtrlPlatingPermittivity->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_button_Permittivity->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaEpsilonR_Button ), NULL, this ); + m_textCtrlTemperatureDiff->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlRiseTime->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); m_ElectricalSpacingUnitsSelector->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingUnitsSelection ), NULL, this ); m_buttonElectSpacingRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingRefresh ), NULL, this ); m_TranslineSelection->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineSelection ), NULL, this ); @@ -1405,6 +1754,27 @@ PCB_CALCULATOR_FRAME_BASE::~PCB_CALCULATOR_FRAME_BASE() m_TW_IntTrackWidth_choiceUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); m_IntTrackThicknessValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); m_IntTrackThicknessUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_textCtrlHoleDia->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceHoleDia->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlPlatingThickness->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choicePlatingThickness->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlViaLength->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceViaLength->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlViaPadDia->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceViaPadDia->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlClearanceDia->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceClearanceDia->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlBoardThickness->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceBoardThickness->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlImpedance->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_choiceImpedance->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlAppliedCurrent->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlPlatingResistivity->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_button_ResistivityVia->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaRho_Button ), NULL, this ); + m_textCtrlPlatingPermittivity->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_button_Permittivity->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaEpsilonR_Button ), NULL, this ); + m_textCtrlTemperatureDiff->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); + m_textCtrlRiseTime->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this ); m_ElectricalSpacingUnitsSelector->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingUnitsSelection ), NULL, this ); m_buttonElectSpacingRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingRefresh ), NULL, this ); m_TranslineSelection->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineSelection ), NULL, this ); diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp index 914865e6a7..89eae2c0c5 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp @@ -1,6 +1,6 @@ - + C++ @@ -45,7 +45,7 @@ PCB_CALCULATOR_FRAME_BASE - 877,580 + -1,-1 wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER KIWAY_PLAYER; kiway_player.h PCB Calculator @@ -54,7 +54,54 @@ pcb_calculator wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL 1 + + + + + + + + + + + + + + + + OnClosePcbCalc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -77,6 +124,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -100,6 +177,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -163,11 +270,43 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Regulators 0 - + 1 1 1 @@ -218,34 +357,64 @@ wxTAB_TRAVERSAL - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerMainReg wxHORIZONTAL none - + 5 wxEXPAND 1 - + bSizeLeftpReg wxVERTICAL none - + 5 wxEXPAND 1 - + bSizerBitmapReg wxVERTICAL none - + 5 wxEXPAND 1 - + 0 protected 0 @@ -307,13 +476,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 - + 1 1 1 @@ -365,13 +564,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND 1 - + 0 protected 0 @@ -379,11 +608,11 @@ - + 5 wxEXPAND 0 - + wxID_ANY Formula: @@ -391,6 +620,7 @@ wxVERTICAL 1 none + 5 wxALL|wxALIGN_CENTER_HORIZONTAL @@ -450,22 +680,52 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND 1 - + bSizerRegulRight wxVERTICAL none - + 5 wxEXPAND 0 @@ -543,6 +803,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -604,6 +895,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -668,6 +989,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -729,6 +1084,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -793,6 +1178,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -854,6 +1270,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -918,6 +1364,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -979,6 +1459,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1043,6 +1553,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1104,6 +1645,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1168,6 +1739,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1229,6 +1834,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1300,6 +1935,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1364,6 +2029,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1425,6 +2124,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1496,6 +2225,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1560,6 +2319,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1621,6 +2414,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1692,6 +2515,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1756,7 +2609,37 @@ + + + + + + + + OnRegulTypeSelection + + + + + + + + + + + + + + + + + + + + + + @@ -1841,14 +2724,44 @@ + + + + + + OnRegulatorCalcButtonClick + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND 0 - + wxID_ANY Regulator: @@ -1856,11 +2769,12 @@ wxVERTICAL 1 none - + + 5 wxALL|wxEXPAND 0 - + 1 1 1 @@ -1918,14 +2832,44 @@ + + + + + + + + OnRegulatorSelection + + + + + + + + + + + + + + + + + + + + + + - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -1980,22 +2924,52 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND 1 - + bSizerDataFile wxHORIZONTAL none - + 5 wxBOTTOM|wxRIGHT|wxLEFT 1 - + 1 1 1 @@ -2053,13 +3027,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxBOTTOM|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -2125,25 +3133,55 @@ + + + + + + OnDataFileSelection + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND 1 - + bSizerReulBtn wxHORIZONTAL none - + 5 wxALL 0 - + 1 1 1 @@ -2209,14 +3247,44 @@ + + + + + + OnEditRegulator + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxALL 1 - + 1 1 1 @@ -2282,14 +3350,44 @@ + + + + + + OnAddRegulator + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxALL 1 - + 1 1 1 @@ -2355,7 +3453,37 @@ + + + + + + OnRemoveRegulator + + + + + + + + + + + + + + + + + + + + + + + + @@ -2421,6 +3549,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2483,6 +3641,36 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerTrackWidth @@ -2509,6 +3697,7 @@ wxVERTICAL 1 none + 5 wxEXPAND @@ -2584,6 +3773,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2648,7 +3867,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWCalculateFromCurrent + + + + @@ -2710,6 +3962,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2771,6 +4053,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2835,7 +4147,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + @@ -2897,6 +4242,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2958,6 +4333,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3022,7 +4427,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + @@ -3087,7 +4525,37 @@ + + + + + + + + OnTWParametersChanged + + + + + + + + + + + + + + + + + + + + + + @@ -3149,6 +4617,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3213,7 +4711,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + @@ -3275,6 +4806,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3337,6 +4898,39 @@ wxBORDER_SIMPLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3362,6 +4956,7 @@ wxVERTICAL 1 none + 5 wxEXPAND @@ -3437,6 +5032,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3501,7 +5126,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWCalculateFromExtWidth + + + + @@ -3566,7 +5224,37 @@ + + + + + + + + OnTWParametersChanged + + + + + + + + + + + + + + + + + + + + + + @@ -3628,6 +5316,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3692,7 +5410,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + @@ -3757,7 +5508,37 @@ + + + + + + + + OnTWParametersChanged + + + + + + + + + + + + + + + + + + + + + + @@ -3816,6 +5597,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3874,6 +5685,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3932,6 +5773,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3993,6 +5864,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4054,6 +5955,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4115,6 +6046,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4176,6 +6137,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4237,6 +6228,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4298,6 +6319,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4359,6 +6410,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4420,6 +6501,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4481,6 +6592,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4542,6 +6683,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4603,6 +6774,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4664,6 +6865,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4682,6 +6913,7 @@ wxVERTICAL 1 none + 5 wxEXPAND @@ -4757,6 +6989,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4821,7 +7083,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWCalculateFromIntWidth + + + + @@ -4886,7 +7181,37 @@ + + + + + + + + OnTWParametersChanged + + + + + + + + + + + + + + + + + + + + + + @@ -4948,6 +7273,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5012,7 +7367,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + @@ -5077,7 +7465,37 @@ + + + + + + + + OnTWParametersChanged + + + + + + + + + + + + + + + + + + + + + + @@ -5139,6 +7557,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5200,6 +7648,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5261,6 +7739,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5322,6 +7830,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5383,6 +7921,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5444,6 +8012,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5505,6 +8103,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5566,6 +8194,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5627,6 +8285,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5688,6 +8376,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5749,6 +8467,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5810,6 +8558,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5822,6 +8600,6210 @@ + + Via Size + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_panelViaSize + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerViaSize + wxHORIZONTAL + none + + 5 + wxEXPAND|wxALL + 1 + + wxID_ANY + Parameters: + + sbSizerVS_Inputs + wxVERTICAL + 1 + none + + + 5 + wxEXPAND + 0 + + 3 + wxBOTH + 1 + + 0 + + fgSizerVS_Inputs + wxFLEX_GROWMODE_SPECIFIED + none + 0 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + ,90,90,-1,70,0 + 0 + 0 + wxID_ANY + D: + 0 + + 0 + + + 0 + + 1 + m_staticTextHoleDia + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Finished hole dia + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlHoleDia + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceHoleDia + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + OnViaCalculate + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + T: + 0 + + 0 + + + 0 + + 1 + m_staticTextPlatingThickness + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Plating thickness + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlPlatingThickness + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choicePlatingThickness + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + OnViaCalculate + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Via length: + 0 + + 0 + + + 0 + + 1 + m_staticTextViaLength + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlViaLength + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceViaLength + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + OnViaCalculate + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Via pad dia: + 0 + + 0 + + + 0 + + 1 + m_staticTextViaPadDia + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Diameter of pad surrounding via + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlViaPadDia + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceViaPadDia + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + OnViaCalculate + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Clearance hole dia: + 0 + + 0 + + + 0 + + 1 + m_staticTextClearanceDia + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Diameter of clearance hole in ground plane(s) + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlClearanceDia + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceClearanceDia + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + OnViaCalculate + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + PCB thickness: + 0 + + 0 + + + 0 + + 1 + m_staticTextBoardThickness + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlBoardThickness + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceBoardThickness + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + OnViaCalculate + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Z0: + 0 + + 0 + + + 0 + + 1 + m_staticTextImpedance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Characteristic impedance of conductor + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlImpedance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceImpedance + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_RESISTOR; UnitSelector.h; Not forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + OnViaCalculate + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Applied current: + 0 + + 0 + + + 0 + + 1 + m_staticAppliedCurrent + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlAppliedCurrent + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + A + 0 + + 0 + + + 0 + + 1 + m_staticTextAppliedCurrentUnits + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Plating resistivity: + 0 + + 0 + + + 0 + + 1 + m_staticTextResistivity + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Specific resistance in ohms * meters + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlPlatingResistivity + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + + 0 + 0 + + Dock + 0 + Left + 1 + + 1 + + + 0 + 0 + wxID_ANY + ... + + 0 + + 0 + + + 0 + + 1 + m_button_ResistivityVia + 1 + + + protected + 1 + + + + Resizable + 1 + + wxBU_EXACTFIT + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + OnViaRho_Button + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Er: + 0 + + 0 + + + 0 + + 1 + m_staticTextPermittivity + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Relative dielectric constant (epsilon r) + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlPlatingPermittivity + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + + 0 + 0 + + Dock + 0 + Left + 1 + + 1 + + + 0 + 0 + wxID_ANY + ... + + 0 + + 0 + + + 0 + + 1 + m_button_Permittivity + 1 + + + protected + 1 + + + + Resizable + 1 + + wxBU_EXACTFIT + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + OnViaEpsilonR_Button + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Temperature rise: + 0 + + 0 + + + 0 + + 1 + m_staticTextTemperatureDiff + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Maximum acceptable rise in temperature + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlTemperatureDiff + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + deg C + 0 + + 0 + + + 0 + + 1 + m_staticTextTemperatureUnits + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Pulse rise time: + 0 + + 0 + + + 0 + + 1 + m_staticTextRiseTime + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Pulse rise time to calculate reactance + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlRiseTime + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnViaCalculate + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + ns + 0 + + 0 + + + 0 + + 1 + m_staticTextRiseTimeUnits + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + nanoseconds + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline31 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + Load From File; ../bitmaps/via.xpm + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_bitmap10 + 1 + + + protected + 1 + + Resizable + 1 + + ; ; forward_declare + 0 + Top view of via + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALL + 1 + + wxID_ANY + Results: + + sbSizerVS_Result + wxVERTICAL + 1 + none + + + 5 + wxEXPAND + 0 + + 3 + wxBOTH + 1 + + 0 + + fgSizerTW_Results11 + wxFLEX_GROWMODE_SPECIFIED + none + 0 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Resistance: + 0 + + 0 + + + 0 + + 1 + m_staticTextArea11 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_ViaResistance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Ohm + 0 + + 0 + + + 0 + + 1 + m_IntTrackAreaUnitLabel1 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Voltage drop: + 0 + + 0 + + + 0 + + 1 + m_staticText65111 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_ViaVoltageDrop + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Volt + 0 + + 0 + + + 0 + + 1 + m_staticText8411 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Power loss: + 0 + + 0 + + + 0 + + 1 + m_staticText66111 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_ViaPowerLoss + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Watt + 0 + + 0 + + + 0 + + 1 + m_staticText8311 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Thermal resistance: + 0 + + 0 + + + 0 + + 1 + m_staticText79211 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Using thermal conductivity value 401 Watts/(meter-Kelvin) + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_ViaThermalResistance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + deg C/Watt + 0 + + 0 + + + 0 + + 1 + m_staticText791111 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Estimated ampacity: + 0 + + 0 + + + 0 + + 1 + m_staticTextAmpacity + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Based on temperature rise + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_ViaAmpacity + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + A + 0 + + 0 + + + 0 + + 1 + m_staticTextAmpacityUnits + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Capacitance: + 0 + + 0 + + + 0 + + 1 + m_staticTextCapacitance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_ViaCapacitance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + pF + 0 + + 0 + + + 0 + + 1 + m_staticTextCapacitanceUnits + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + pico-Farad + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Rise time degradation: + 0 + + 0 + + + 0 + + 1 + m_staticTextRiseTimeOutput + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Rise time degradation for given Z0 and calculated capacitance + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_RiseTimeOutput + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + ps + 0 + + 0 + + + 0 + + 1 + m_staticTextRiseTimeOutputUnits + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + picoseconds + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Inductance: + 0 + + 0 + + + 0 + + 1 + m_staticTextInductance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_Inductance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + nH + 0 + + 0 + + + 0 + + 1 + m_staticTextInductanceUnits + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + nano-Henry + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Reactance: + 0 + + 0 + + + 0 + + 1 + m_staticTextReactance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Inductive reactance for given rise time and calculated inductance + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_Reactance + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Ohm + 0 + + 0 + + + 0 + + 1 + m_staticTextReactanceUnits + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Electrical Spacing 0 @@ -5876,6 +14858,36 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerElectricalClearance @@ -5952,7 +14964,37 @@ + + + + + + + + OnElectricalSpacingUnitsSelection + + + + + + + + + + + + + + + + + + + + + + @@ -6011,6 +15053,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6072,6 +15144,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6136,6 +15238,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6208,7 +15344,37 @@ + + + + + + OnElectricalSpacingRefresh + + + + + + + + + + + + + + + + + + + + + + + + @@ -6281,6 +15447,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6304,15 +15500,15 @@ 1 - wxALIGN_CENTER + wxALIGN_CENTRE wxALIGN_TOP 0 1 - wxALIGN_CENTER + wxALIGN_CENTRE 70 "B1" "B2" "B3" "B4" "A5" "A6" "A7" - wxALIGN_CENTER + wxALIGN_CENTRE 7 @@ -6358,7 +15554,7 @@ wxALIGN_RIGHT 100 "0 ... 15V" "16 ... 30V" "31 ... 50V" "51 ... 100V" "101 ... 150V" "151 ... 170V" "171 ... 250V" "251 ... 300V" "301 ... 500V" " > 500V" - wxALIGN_CENTER + wxALIGN_CENTRE 10 1 @@ -6369,6 +15565,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6430,6 +15688,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6441,7 +15729,7 @@ TransLine 0 - + 1 1 1 @@ -6492,7 +15780,37 @@ wxTAB_TRAVERSAL - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizeTransline wxHORIZONTAL @@ -6570,7 +15888,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + OnTranslineSelection + + + + + + @@ -6628,7 +15976,36 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + OnPaintTranslinePanel + + + + + + @@ -6689,13 +16066,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxALL|wxEXPAND 1 - + bMiddleSizer wxVERTICAL @@ -6712,6 +16119,7 @@ wxVERTICAL 1 none + 5 wxEXPAND|wxTOP|wxBOTTOM @@ -6787,6 +16195,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6851,6 +16289,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6923,7 +16395,37 @@ + + + + + + OnTranslineEpsilonR_Button + + + + + + + + + + + + + + + + + + + + + + + + @@ -6985,6 +16487,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7049,6 +16581,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7121,7 +16687,37 @@ + + + + + + OnTranslineTanD_Button + + + + + + + + + + + + + + + + + + + + + + + + @@ -7183,6 +16779,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7247,6 +16873,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7319,7 +16979,37 @@ + + + + + + OnTranslineRho_Button + + + + + + + + + + + + + + + + + + + + + + + + @@ -7381,6 +17071,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7445,6 +17165,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7509,6 +17263,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7570,6 +17355,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7634,6 +17449,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7698,6 +17547,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7759,6 +17639,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7823,6 +17733,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7887,6 +17831,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7948,6 +17923,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8012,6 +18017,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8076,6 +18115,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8137,6 +18207,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8201,6 +18301,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8265,6 +18399,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8326,6 +18491,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8390,6 +18585,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8454,6 +18683,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8472,6 +18732,7 @@ wxVERTICAL 1 none + 5 wxEXPAND|wxTOP|wxBOTTOM @@ -8547,6 +18808,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8611,6 +18902,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8675,26 +19000,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxALIGN_CENTER_HORIZONTAL 1 - + bSizerHelpBitmaps wxVERTICAL none - + 5 wxALL 0 - + 1 1 1 @@ -8746,13 +19102,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND 0 - + 2 wxBOTH 0,1 @@ -8764,11 +19150,11 @@ protected 0 0 - + 5 wxALL 0 - + 1 1 1 @@ -8823,13 +19209,43 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxALL 0 - + 1 1 1 @@ -8884,6 +19300,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8892,11 +19338,11 @@ - + 5 wxEXPAND 1 - + bRightSizer wxVERTICAL @@ -8913,6 +19359,7 @@ wxVERTICAL 1 none + 5 wxBOTTOM|wxEXPAND @@ -8997,6 +19444,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9061,6 +19538,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9125,6 +19636,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9189,6 +19731,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9250,6 +19823,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9314,6 +19917,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9378,6 +20015,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9442,6 +20110,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9503,6 +20202,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9567,6 +20296,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9631,6 +20394,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9667,11 +20461,11 @@ bSizerButtons wxHORIZONTAL none - + 5 wxALL|wxALIGN_CENTER_VERTICAL 0 - + 1 1 1 @@ -9737,7 +20531,37 @@ + + + + + + OnTranslineAnalyse + + + + + + + + + + + + + + + + + + + + + + + + @@ -9810,7 +20634,37 @@ + + + + + + OnTranslineAnalyse + + + + + + + + + + + + + + + + + + + + + + + + @@ -9883,14 +20737,44 @@ + + + + + + OnTranslineSynthetize + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxALL|wxALIGN_CENTER_VERTICAL 0 - + 1 1 1 @@ -9956,7 +20840,37 @@ + + + + + + OnTranslineSynthetize + + + + + + + + + + + + + + + + + + + + + + + + @@ -9975,6 +20889,7 @@ wxVERTICAL 1 none + 5 wxEXPAND|wxTOP|wxBOTTOM @@ -10050,6 +20965,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10114,6 +21059,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10178,6 +21157,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10239,6 +21249,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10303,6 +21343,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10367,6 +21441,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10428,6 +21533,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10492,6 +21627,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10556,17 +21725,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND|wxTOP 1 - + wxID_ANY Results: @@ -10574,6 +21774,7 @@ wxVERTICAL 1 none + 5 wxEXPAND @@ -10649,6 +21850,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10710,6 +21941,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10771,6 +22032,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10832,6 +22123,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10893,6 +22214,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10954,6 +22305,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11015,6 +22396,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11076,6 +22487,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11137,6 +22578,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11198,6 +22669,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11259,6 +22760,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11320,6 +22851,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11381,6 +22942,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11442,6 +23033,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11453,11 +23074,11 @@ - + RF Attenuators 0 - + 1 1 1 @@ -11508,12 +23129,42 @@ wxTAB_TRAVERSAL - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerAtt wxHORIZONTAL none - + 5 wxEXPAND 0 @@ -11586,7 +23237,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + OnAttenuatorSelection + + + + + + @@ -11644,12 +23325,41 @@ wxTAB_TRAVERSAL|wxBORDER_SIMPLE + + + + + + + + + + + + + + + + + + + + + + + OnPaintAttenuatorPanel + + + + + + - + 5 wxEXPAND 0 @@ -11670,6 +23380,7 @@ wxVERTICAL 1 none + 5 wxEXPAND @@ -11745,6 +23456,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11809,6 +23550,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11870,6 +23645,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11931,6 +23736,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11995,6 +23830,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12056,6 +23925,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12117,6 +24016,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12181,6 +24110,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12242,6 +24205,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12327,7 +24320,37 @@ + + + + + + OnCalculateAttenuator + + + + + + + + + + + + + + + + + + + + + + + + @@ -12400,7 +24423,37 @@ + + + + + + OnCalculateAttenuator + + + + + + + + + + + + + + + + + + + + + + + + @@ -12417,6 +24470,7 @@ wxVERTICAL 1 none + 5 wxEXPAND|wxTOP|wxBOTTOM @@ -12492,6 +24546,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12556,6 +24640,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12617,6 +24735,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12678,6 +24826,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12742,6 +24920,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12803,6 +25015,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12864,6 +25106,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12928,6 +25200,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12989,6 +25295,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13054,6 +25390,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13112,6 +25478,39 @@ wxBORDER_SIMPLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13128,11 +25527,12 @@ wxVERTICAL 1 none - + + 5 wxALL|wxEXPAND 1 - + 1 1 1 @@ -13184,6 +25584,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13191,11 +25624,11 @@ - + Color Code 0 - + 1 1 1 @@ -13246,6 +25679,36 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerPanelColorCode @@ -13315,7 +25778,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + OnToleranceSelection + + + + + + @@ -13393,6 +25886,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13454,6 +25977,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13515,6 +26068,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13576,6 +26159,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13637,6 +26250,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13698,6 +26341,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13756,6 +26429,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13814,6 +26517,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13872,6 +26605,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13930,6 +26693,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13988,6 +26781,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -14046,6 +26869,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -14053,11 +26906,11 @@ - + Board Classes - 1 - + 0 + 1 1 1 @@ -14108,7 +26961,37 @@ wxTAB_TRAVERSAL - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerBoardClass wxHORIZONTAL @@ -14175,14 +27058,44 @@ + + + + + + + + OnBoardClassesUnitsSelection + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND 1 - + brdclsSizerRight wxVERTICAL @@ -14246,6 +27159,36 @@ -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -14269,15 +27212,15 @@ 1 - wxALIGN_CENTER + wxALIGN_CENTRE wxALIGN_TOP 0 1 - wxALIGN_CENTER + wxALIGN_CENTRE 70 "Class 1" "Class 2" "Class 3" "Class 4" "Class 5" "Class 6" - wxALIGN_CENTER + wxALIGN_CENTRE 6 @@ -14323,7 +27266,7 @@ wxALIGN_RIGHT 160 "Lines width" "Min clearance" "Via: (diam - drill)" "Plated Pad: (diam - drill)" "NP Pad: (diam - drill)" - wxALIGN_CENTER + wxALIGN_CENTRE 5 1 @@ -14334,6 +27277,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -14391,6 +27396,36 @@ wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.h b/pcb_calculator/dialogs/pcb_calculator_frame_base.h index 14197d3ef7..abc926aa3e 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.h +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version v3.8.0) +// C++ code generated with wxFormBuilder (version Aug 8 2018) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -16,6 +16,7 @@ class UNIT_SELECTOR_LEN; class UNIT_SELECTOR_RESISTOR; class UNIT_SELECTOR_THICKNESS; +#include "UnitSelector.h" #include "kiway_player.h" #include #include @@ -144,6 +145,72 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER wxStaticText* m_staticText792; wxStaticText* m_IntTrackLossValue; wxStaticText* m_staticText7911; + wxPanel* m_panelViaSize; + wxStaticText* m_staticTextHoleDia; + wxTextCtrl* m_textCtrlHoleDia; + UNIT_SELECTOR_LEN* m_choiceHoleDia; + wxStaticText* m_staticTextPlatingThickness; + wxTextCtrl* m_textCtrlPlatingThickness; + UNIT_SELECTOR_LEN* m_choicePlatingThickness; + wxStaticText* m_staticTextViaLength; + wxTextCtrl* m_textCtrlViaLength; + UNIT_SELECTOR_LEN* m_choiceViaLength; + wxStaticText* m_staticTextViaPadDia; + wxTextCtrl* m_textCtrlViaPadDia; + UNIT_SELECTOR_LEN* m_choiceViaPadDia; + wxStaticText* m_staticTextClearanceDia; + wxTextCtrl* m_textCtrlClearanceDia; + UNIT_SELECTOR_LEN* m_choiceClearanceDia; + wxStaticText* m_staticTextBoardThickness; + wxTextCtrl* m_textCtrlBoardThickness; + UNIT_SELECTOR_LEN* m_choiceBoardThickness; + wxStaticText* m_staticTextImpedance; + wxTextCtrl* m_textCtrlImpedance; + UNIT_SELECTOR_RESISTOR* m_choiceImpedance; + wxStaticText* m_staticAppliedCurrent; + wxTextCtrl* m_textCtrlAppliedCurrent; + wxStaticText* m_staticTextAppliedCurrentUnits; + wxStaticText* m_staticTextResistivity; + wxTextCtrl* m_textCtrlPlatingResistivity; + wxButton* m_button_ResistivityVia; + wxStaticText* m_staticTextPermittivity; + wxTextCtrl* m_textCtrlPlatingPermittivity; + wxButton* m_button_Permittivity; + wxStaticText* m_staticTextTemperatureDiff; + wxTextCtrl* m_textCtrlTemperatureDiff; + wxStaticText* m_staticTextTemperatureUnits; + wxStaticText* m_staticTextRiseTime; + wxTextCtrl* m_textCtrlRiseTime; + wxStaticText* m_staticTextRiseTimeUnits; + wxStaticLine* m_staticline31; + wxStaticBitmap* m_bitmap10; + wxStaticText* m_staticTextArea11; + wxStaticText* m_ViaResistance; + wxStaticText* m_IntTrackAreaUnitLabel1; + wxStaticText* m_staticText65111; + wxStaticText* m_ViaVoltageDrop; + wxStaticText* m_staticText8411; + wxStaticText* m_staticText66111; + wxStaticText* m_ViaPowerLoss; + wxStaticText* m_staticText8311; + wxStaticText* m_staticText79211; + wxStaticText* m_ViaThermalResistance; + wxStaticText* m_staticText791111; + wxStaticText* m_staticTextAmpacity; + wxStaticText* m_ViaAmpacity; + wxStaticText* m_staticTextAmpacityUnits; + wxStaticText* m_staticTextCapacitance; + wxStaticText* m_ViaCapacitance; + wxStaticText* m_staticTextCapacitanceUnits; + wxStaticText* m_staticTextRiseTimeOutput; + wxStaticText* m_RiseTimeOutput; + wxStaticText* m_staticTextRiseTimeOutputUnits; + wxStaticText* m_staticTextInductance; + wxStaticText* m_Inductance; + wxStaticText* m_staticTextInductanceUnits; + wxStaticText* m_staticTextReactance; + wxStaticText* m_Reactance; + wxStaticText* m_staticTextReactanceUnits; wxPanel* m_panelElectricalSpacing; UNIT_SELECTOR_LEN* m_ElectricalSpacingUnitsSelector; wxStaticLine* m_staticline2; @@ -288,6 +355,9 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER virtual void OnTWParametersChanged( wxCommandEvent& event ) { event.Skip(); } virtual void OnTWCalculateFromExtWidth( wxCommandEvent& event ) { event.Skip(); } virtual void OnTWCalculateFromIntWidth( wxCommandEvent& event ) { event.Skip(); } + virtual void OnViaCalculate( wxCommandEvent& event ) { event.Skip(); } + virtual void OnViaRho_Button( wxCommandEvent& event ) { event.Skip(); } + virtual void OnViaEpsilonR_Button( wxCommandEvent& event ) { event.Skip(); } virtual void OnElectricalSpacingUnitsSelection( wxCommandEvent& event ) { event.Skip(); } virtual void OnElectricalSpacingRefresh( wxCommandEvent& event ) { event.Skip(); } virtual void OnTranslineSelection( wxCommandEvent& event ) { event.Skip(); } @@ -306,7 +376,7 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER public: - PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PCB Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 877,580 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL, const wxString& name = wxT("pcb_calculator") ); + PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PCB Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL, const wxString& name = wxT("pcb_calculator") ); ~PCB_CALCULATOR_FRAME_BASE(); diff --git a/pcb_calculator/pcb_calculator.h b/pcb_calculator/pcb_calculator.h index b4389f101e..355f1293ac 100644 --- a/pcb_calculator/pcb_calculator.h +++ b/pcb_calculator/pcb_calculator.h @@ -176,6 +176,44 @@ private: */ void TWUpdateModeDisplay(); + // Via size calculations + + /** + * Function VS_Init + * Read config and init dialog widgets values + */ + void VS_Init( wxConfigBase* aCfg ); + + /** + * Function VS_WriteConfig + * Write Via Size prameters in config + */ + void VS_WriteConfig( wxConfigBase* aCfg ); + + /** + * Function OnViaCalculate + * Called when the user changes any value in the via calcultor. + */ + void OnViaCalculate( wxCommandEvent& event ) override; + + /** + * Function OnViaEpsilonR_Button + */ + void OnViaEpsilonR_Button( wxCommandEvent& event ) override; + + /** + * Function OnViaRho_Button + */ + void OnViaRho_Button( wxCommandEvent& event ) override; + + /** + * Function VSDisplayValues + * Displays the results of the calculation. + */ + void VSDisplayValues( double aViaResistance, double aVoltageDrop, double aPowerLoss, + double aEstimatedAmpacity, double aThermalResistance, double aCapacitance, + double aTimeDegradation, double aInductance, double aReactance ); + // Electrical spacing panel: void OnElectricalSpacingUnitsSelection( wxCommandEvent& event ) override; void OnElectricalSpacingRefresh( wxCommandEvent& event ) override; diff --git a/pcb_calculator/pcb_calculator_frame.cpp b/pcb_calculator/pcb_calculator_frame.cpp index d65e6bd7dd..905fa9d36f 100644 --- a/pcb_calculator/pcb_calculator_frame.cpp +++ b/pcb_calculator/pcb_calculator_frame.cpp @@ -93,6 +93,8 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) : TW_Init( config.get() ); + VS_Init( config.get() ); + SetAttenuator( m_AttenuatorsSelection->GetSelection() ); ToleranceSelection( m_rbToleranceSelection->GetSelection() ); @@ -269,6 +271,8 @@ void PCB_CALCULATOR_FRAME::SaveSettings( wxConfigBase* aCfg ) TW_WriteConfig( aCfg ); + VS_WriteConfig( aCfg ); + for( unsigned ii = 0; ii < m_transline_list.size(); ii++ ) m_transline_list[ii]->WriteConfig( aCfg ); diff --git a/pcb_calculator/via.cpp b/pcb_calculator/via.cpp new file mode 100644 index 0000000000..7bdac91735 --- /dev/null +++ b/pcb_calculator/via.cpp @@ -0,0 +1,308 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 1992-2019 Kicad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* All calculations are based on this [1] online calculator: + * + * References: + * + * [1]: The CircuitCalculator.com Blog - PCB Via Calculator + * http://circuitcalculator.com/wordpress/2006/03/12/pcb-via-calculator/ + * + * [2]: Constructing Your Power Supply - Layout Considerations + * https://www.ti.com/seclit/ml/slup230/slup230.pdf + * + * [3]: Current Carrying Capacity of Vias - Some Conceptual Observations + * https://www.ultracad.com/articles/viacurrents.pdf + * + * [4]: IPC-2221A - Generic Standard on Printed Board Design + * http://www.sphere.bc.ca/class/downloads/ipc_2221a-pcb%20standards.pdf + * + * [5]: Copper - online catalogue source - Goodfellow + * http://www.goodfellow.com/E/Copper.html + * + * [6]: Thermal Conductivity of Metals, Metallic Elements and Alloys + * https://www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html + * + * [7]: Johnson & Graham, High Speed Digital Design: A Handbook of Black Magic + */ + +#include +#include +#include + +#include + +#include +#include +#include + +extern double DoubleFromString( const wxString& TextValue ); + +// Key words to read/write some parameters in config: +#define KEYWORD_VS_HOLE_DIA wxT( "VS_Hole_Dia" ) +#define KEYWORD_VS_HOLE_DIA_UNIT wxT( "VS_Hole_Dia_Unit" ) +#define KEYWORD_VS_THICKNESS wxT( "VS_Plating_Thickness" ) +#define KEYWORD_VS_THICKNESS_UNIT wxT( "VS_Plating_Thickness_Unit" ) +#define KEYWORD_VS_LENGTH wxT( "VS_Via_Length" ) +#define KEYWORD_VS_LENGTH_UNIT wxT( "VS_Via_Length_Unit" ) +#define KEYWORD_VS_PAD_DIA wxT( "VS_Pad_Dia" ) +#define KEYWORD_VS_PAD_DIA_UNIT wxT( "VS_Pad_Dia_Unit" ) +#define KEYWORD_VS_CLEARANCE_DIA wxT( "VS_Clearance_Dia" ) +#define KEYWORD_VS_CLEARANCE_DIA_UNIT wxT( "VS_Clearance_Dia_Unit" ) +#define KEYWORD_VS_PCB_THICKNESS wxT( "VS_PCB_Thickness" ) +#define KEYWORD_VS_PCB_THICKNESS_UNIT wxT( "VS_PCB_Thickness_Unit" ) +#define KEYWORD_VS_CH_IMPEDANCE wxT( "VS_Characteristic_Impedance" ) +#define KEYWORD_VS_CH_IMPEDANCE_UNIT wxT( "VS_Characteristic_Impedance_Unit" ) +#define KEYWORD_VS_CURRENT wxT( "VS_Current" ) +#define KEYWORD_VS_RESISTIVITY wxT( "VS_Resistivity" ) +#define KEYWORD_VS_PERMITTIVITY wxT( "VS_Permittivity" ) +#define KEYWORD_VS_TEMP_DIFF wxT( "VS_Temperature_Differential" ) +#define KEYWORD_VS_PULSE_RISE_TIME wxT( "VS_Pulse_Rise_Time" ) + +/** + * Shows a list of current relative dielectric constant(Er) + * and set the selected value in main dialog frame + */ +void PCB_CALCULATOR_FRAME::OnViaEpsilonR_Button( wxCommandEvent& event ) +{ + wxArrayString list; + + // EpsilonR ( relative dielectric constant) list + list.Add( wxT( "4.5 FR4" ) ); + list.Add( wxT( "9.8 alumina (Al2O3)" ) ); + list.Add( wxT( "3.78 fused quartz" ) ); + list.Add( wxT( "3.38 RO4003" ) ); + list.Add( wxT( "2.2 RT/duroid 5880" ) ); + list.Add( wxT( "10.2 RT/duroid 6010LM" ) ); + list.Add( wxT( "2.1 teflon (PTFE)" ) ); + list.Add( wxT( "4.0 PVC" ) ); + list.Add( wxT( "2.3 PE" ) ); + list.Add( wxT( "6.6 beryllia (BeO)" ) ); + list.Add( wxT( "8.7 aluminum nitride" ) ); + list.Add( wxT( "11.9 silicon" ) ); + list.Add( wxT( "12.9 GaAs" ) ); + + wxString value = wxGetSingleChoice( wxEmptyString, + _("Relative Dielectric Constants"), list).BeforeFirst( ' ' ); + if( ! value.IsEmpty() ) + m_textCtrlPlatingPermittivity->SetValue( value ); +} + +/** + * Shows a list of current Specific resistance list (rho) + * and set the selected value in main dialog frame + */ +void PCB_CALCULATOR_FRAME::OnViaRho_Button( wxCommandEvent& event ) +{ + wxArrayString list; + + // Specific resistance list in ohms*meters (rho): + list.Clear(); + list.Add( wxT( "2.4e-8 gold" ) ); + list.Add( wxT( "1.72e-8 copper" ) ); + list.Add( wxT( "1.62e-8 silver" ) ); + list.Add( wxT( "12.4e-8 tin" ) ); + list.Add( wxT( "10.5e-8 platinum" ) ); + list.Add( wxT( "2.62e-8 aluminum" ) ); + list.Add( wxT( "6.9e-8 nickel" ) ); + list.Add( wxT( "3.9e-8 brass (66Cu 34Zn)" ) ); + list.Add( wxT( "9.71e-8 iron" ) ); + list.Add( wxT( "6.0e-8 zinc" ) ); + + wxString value = wxGetSingleChoice( wxEmptyString, + _("Specific Resistance"), list).BeforeFirst( ' ' ); + if( ! value.IsEmpty() ) + m_textCtrlPlatingResistivity->SetValue( value ); +} + +void PCB_CALCULATOR_FRAME::VS_Init( wxConfigBase* aCfg ) +{ + int tmp; + wxString msg; + + // Read parameter values + aCfg->Read( KEYWORD_VS_HOLE_DIA, &msg, wxT( "18" ) ); + m_textCtrlHoleDia->SetValue( msg ); + aCfg->Read( KEYWORD_VS_HOLE_DIA_UNIT, &tmp, 0 ); + m_choiceHoleDia->SetSelection( tmp ); + aCfg->Read( KEYWORD_VS_THICKNESS, &msg, wxT( "1" ) ); + m_textCtrlPlatingThickness->SetValue( msg ); + aCfg->Read( KEYWORD_VS_THICKNESS_UNIT, &tmp, 0 ); + m_choicePlatingThickness->SetSelection( tmp ); + aCfg->Read( KEYWORD_VS_LENGTH, &msg, wxT( "60" ) ); + m_textCtrlViaLength->SetValue( msg ); + aCfg->Read( KEYWORD_VS_LENGTH_UNIT, &tmp, 0 ); + m_choiceViaLength->SetSelection( tmp ); + aCfg->Read( KEYWORD_VS_PAD_DIA, &msg, wxT( "22" ) ); + m_textCtrlViaPadDia->SetValue( msg ); + aCfg->Read( KEYWORD_VS_PAD_DIA_UNIT, &tmp, 0 ); + m_choiceViaPadDia->SetSelection( tmp ); + aCfg->Read( KEYWORD_VS_CLEARANCE_DIA, &msg, wxT( "25" ) ); + m_textCtrlClearanceDia->SetValue( msg ); + aCfg->Read( KEYWORD_VS_CLEARANCE_DIA_UNIT, &tmp, 0 ); + m_choiceClearanceDia->SetSelection( tmp ); + aCfg->Read( KEYWORD_VS_PCB_THICKNESS, &msg, wxT( "70" ) ); + m_textCtrlBoardThickness->SetValue( msg ); + aCfg->Read( KEYWORD_VS_PCB_THICKNESS_UNIT, &tmp, 0 ); + m_choiceBoardThickness->SetSelection( tmp ); + aCfg->Read( KEYWORD_VS_CH_IMPEDANCE, &msg, wxT( "50" ) ); + m_textCtrlImpedance->SetValue( msg ); + aCfg->Read( KEYWORD_VS_CH_IMPEDANCE_UNIT , &tmp, 0 ); + m_choiceImpedance->SetSelection( tmp ); + aCfg->Read( KEYWORD_VS_CURRENT, &msg, wxT( "1" ) ); + m_textCtrlAppliedCurrent->SetValue( msg ); + aCfg->Read( KEYWORD_VS_RESISTIVITY, &msg, wxT( "1.72e-8" ) ); + m_textCtrlPlatingResistivity->SetValue( msg ); + aCfg->Read( KEYWORD_VS_PERMITTIVITY, &msg, wxT( "4.5" ) ); + m_textCtrlPlatingPermittivity->SetValue( msg ); + aCfg->Read( KEYWORD_VS_TEMP_DIFF, &msg, wxT( "10" ) ); + m_textCtrlTemperatureDiff->SetValue( msg ); + aCfg->Read( KEYWORD_VS_PULSE_RISE_TIME, &msg, wxT( "1" ) ); + m_textCtrlRiseTime->SetValue( msg ); +} + +void PCB_CALCULATOR_FRAME::VS_WriteConfig( wxConfigBase* aCfg ) +{ + // Save current parameters values in config + aCfg->Write( KEYWORD_VS_HOLE_DIA, m_textCtrlHoleDia->GetValue() ); + aCfg->Write( KEYWORD_VS_HOLE_DIA_UNIT, m_choiceHoleDia->GetSelection() ); + aCfg->Write( KEYWORD_VS_THICKNESS, m_textCtrlPlatingThickness->GetValue() ); + aCfg->Write( KEYWORD_VS_THICKNESS_UNIT, m_choicePlatingThickness->GetSelection() ); + aCfg->Write( KEYWORD_VS_LENGTH, m_textCtrlViaLength->GetValue() ); + aCfg->Write( KEYWORD_VS_LENGTH_UNIT, m_choiceViaLength->GetSelection() ); + aCfg->Write( KEYWORD_VS_PAD_DIA, m_textCtrlViaPadDia->GetValue() ); + aCfg->Write( KEYWORD_VS_PAD_DIA_UNIT, m_choiceViaPadDia->GetSelection() ); + aCfg->Write( KEYWORD_VS_CLEARANCE_DIA, m_textCtrlClearanceDia->GetValue() ); + aCfg->Write( KEYWORD_VS_CLEARANCE_DIA_UNIT, m_choiceClearanceDia->GetSelection() ); + aCfg->Write( KEYWORD_VS_PCB_THICKNESS, m_textCtrlBoardThickness->GetValue() ); + aCfg->Write( KEYWORD_VS_PCB_THICKNESS_UNIT, m_choiceBoardThickness->GetSelection() ); + aCfg->Write( KEYWORD_VS_CH_IMPEDANCE, m_textCtrlImpedance->GetValue() ); + aCfg->Write( KEYWORD_VS_CH_IMPEDANCE_UNIT, m_choiceImpedance->GetSelection() ); + aCfg->Write( KEYWORD_VS_CURRENT, m_textCtrlAppliedCurrent->GetValue() ); + aCfg->Write( KEYWORD_VS_RESISTIVITY, m_textCtrlPlatingResistivity->GetValue() ); + aCfg->Write( KEYWORD_VS_PERMITTIVITY, m_textCtrlPlatingPermittivity->GetValue() ); + aCfg->Write( KEYWORD_VS_TEMP_DIFF, m_textCtrlTemperatureDiff->GetValue() ); + aCfg->Write( KEYWORD_VS_PULSE_RISE_TIME, m_textCtrlRiseTime->GetValue() ); +} + +void PCB_CALCULATOR_FRAME::OnViaCalculate( wxCommandEvent& event ) +{ + // Load parameters + double finishedHoleDia = std::abs( DoubleFromString( m_textCtrlHoleDia->GetValue() ) ); + double platingThickness = std::abs( DoubleFromString( m_textCtrlPlatingThickness->GetValue() ) ); + double viaLength = std::abs( DoubleFromString( m_textCtrlViaLength->GetValue() ) ); + double padDia = std::abs( DoubleFromString( m_textCtrlViaPadDia->GetValue() ) ); + double clearanceDia = std::abs( DoubleFromString( m_textCtrlClearanceDia->GetValue() ) ); + double pcbThickness = std::abs( DoubleFromString( m_textCtrlBoardThickness->GetValue() ) ); + double charImpedance = std::abs( DoubleFromString( m_textCtrlImpedance->GetValue() ) ); + double appliedCurrent = std::abs( DoubleFromString( m_textCtrlAppliedCurrent->GetValue() ) ); + double platingResistivity = std::abs( DoubleFromString( m_textCtrlPlatingResistivity->GetValue() ) ); + double relativePermitivity = std::abs( DoubleFromString( m_textCtrlPlatingPermittivity->GetValue() ) ); + double temperatureDiff = std::abs( DoubleFromString( m_textCtrlTemperatureDiff->GetValue() ) ); + double pulseRiseTime = std::abs( DoubleFromString( m_textCtrlRiseTime->GetValue() ) ); + + // Normalize units + finishedHoleDia *= m_choiceHoleDia->GetUnitScale(); + platingThickness *= m_choicePlatingThickness->GetUnitScale(); + viaLength *= m_choiceViaLength->GetUnitScale(); + padDia *= m_choiceViaPadDia->GetUnitScale(); + clearanceDia *= m_choiceClearanceDia->GetUnitScale(); + pcbThickness *= m_choiceBoardThickness->GetUnitScale(); + charImpedance *= m_choiceImpedance->GetUnitScale(); + platingResistivity = platingResistivity / 100; // Ohm-cm to Ohm-m + + // Calculate cross-sectional area of the via's cylindrical structure [3] + double area = M_PI * (finishedHoleDia + platingThickness) * platingThickness; // m^2 + + double viaResistance = platingResistivity * viaLength / area; // Ohms + + // Using thermal resistivity value 2.49e-3 meter-Kelvin/Watt, equivalent to + // thermal conductivity of 401 Watt/(meter-Kelvin) [5][6] + const double thermalResistivity = 2.49e-3; // m K/W + double thermalResistance = thermalResistivity * viaLength / area; // deg C/W + + double voltageDrop = appliedCurrent * viaResistance; + + double powerLoss = appliedCurrent * voltageDrop; + + // Estimate current carrying capacity of the via + // See comment #17 in [1] for a brief discussion on the formula + // This formula from IPC-2221 [4] is also used in the Track Width calculator + area /= pow( UNIT_MIL, 2 ); // m^2 to mil^2 + const double k = 0.048; + const double b = 0.44; + const double c = 0.725; + double estimatedAmpacity = k * pow( temperatureDiff, b ) * pow( area, c ); + + // Equation 7.6 in [7] + double capacitance = 55.51 * relativePermitivity * viaLength * padDia; + capacitance /= clearanceDia - padDia; + + // Equation 7.8 in [7] + double timeDegradation = 2.2 * capacitance * charImpedance / 2; + + // Equation 7.9 in [7] + double inductance = 200 * viaLength; + inductance *= log( 4 * viaLength / finishedHoleDia ) + 1; + + // Equation 7.11 in [7] + double reactance = M_PI * inductance / pulseRiseTime; + + // Update the display + VSDisplayValues( viaResistance, voltageDrop, powerLoss, estimatedAmpacity, + thermalResistance, capacitance, timeDegradation, inductance, reactance ); +} + +void PCB_CALCULATOR_FRAME::VSDisplayValues( double aViaResistance, double aVoltageDrop, + double aPowerLoss, double aEstimatedAmpacity, double aThermalResistance, + double aCapacitance, double aTimeDegradation, double aInductance, double aReactance ) +{ + wxString msg; + + msg.Printf( wxT( "%g" ), aViaResistance ); + m_ViaResistance->SetLabel( msg ); + + msg.Printf( wxT( "%g" ), aVoltageDrop ); + m_ViaVoltageDrop->SetLabel( msg ); + + msg.Printf( wxT( "%g" ), aPowerLoss ); + m_ViaPowerLoss->SetLabel( msg ); + + msg.Printf( wxT( "%g" ), aEstimatedAmpacity ); + m_ViaAmpacity->SetLabel( msg ); + + msg.Printf( wxT( "%g" ), aThermalResistance ); + m_ViaThermalResistance->SetLabel( msg ); + + msg.Printf( wxT( "%g" ), aCapacitance ); + m_ViaCapacitance->SetLabel( msg ); + + msg.Printf( wxT( "%g" ), aTimeDegradation ); + m_RiseTimeOutput->SetLabel( msg ); + + msg.Printf( wxT( "%g" ), aInductance ); + m_Inductance->SetLabel( msg ); + + msg.Printf( wxT( "%g" ), aReactance ); + m_Reactance->SetLabel( msg ); +}