mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-26 13:48:55 +08:00
12 lines
195 KiB
Go
12 lines
195 KiB
Go
//
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// This is a commercial product and requires a license to operate.
|
|
// A trial license can be obtained at https://unidoc.io
|
|
//
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
//
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
package bitmap ;import (_ac "encoding/binary";_d "github.com/stretchr/testify/require";_fg "github.com/unidoc/unipdf/v3/common";_de "github.com/unidoc/unipdf/v3/internal/bitwise";_fe "github.com/unidoc/unipdf/v3/internal/imageutil";_af "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_c "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_cc "image";_ff "math";_g "sort";_fc "strings";_f "testing";);func (_bcce *Bitmap )GetByte (index int )(byte ,error ){if index > len (_bcce .Data )-1||index < 0{return 0,_c .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index );};return _bcce .Data [index ],nil ;};func _bgag (_dgea ,_dgef *Bitmap ,_bff ,_abbc ,_ggd ,_edab ,_bccc ,_bfad ,_ceb ,_dgaa int ,_abfgc CombinationOperator ,_bgde int )error {var _eacf int ;_afgd :=func (){_eacf ++;_ggd +=_dgef .RowStride ;_edab +=_dgea .RowStride ;_bccc +=_dgea .RowStride };for _eacf =_bff ;_eacf < _abbc ;_afgd (){var _dfg uint16 ;_efcd :=_ggd ;for _gdab :=_edab ;_gdab <=_bccc ;_gdab ++{_fdfb ,_deed :=_dgef .GetByte (_efcd );if _deed !=nil {return _deed ;};_abaf ,_deed :=_dgea .GetByte (_gdab );if _deed !=nil {return _deed ;};_dfg =(_dfg |(uint16 (_abaf )&0xff))<<uint (_dgaa );_abaf =byte (_dfg >>8);if _deed =_dgef .SetByte (_efcd ,_eceb (_fdfb ,_abaf ,_abfgc ));_deed !=nil {return _deed ;};_efcd ++;_dfg <<=uint (_ceb );if _gdab ==_bccc {_abaf =byte (_dfg >>(8-uint8 (_dgaa )));if _bgde !=0{_abaf =_bdaa (uint (8+_bfad ),_abaf );};_fdfb ,_deed =_dgef .GetByte (_efcd );if _deed !=nil {return _deed ;};if _deed =_dgef .SetByte (_efcd ,_eceb (_fdfb ,_abaf ,_abfgc ));_deed !=nil {return _deed ;};};};};return nil ;};func (_dgba *Boxes )Get (i int )(*_cc .Rectangle ,error ){const _dcca ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _dgba ==nil {return nil ,_c .Error (_dcca ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_dgba )-1{return nil ,_c .Errorf (_dcca ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_dgba )[i ],nil ;};func Extract (roi _cc .Rectangle ,src *Bitmap )(*Bitmap ,error ){_gde :=New (roi .Dx (),roi .Dy ());_gefcf :=roi .Min .X &0x07;_gafe :=8-_gefcf ;_eca :=uint (8-_gde .Width &0x07);_fbea :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_fbef :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_gggd :=_gde .RowStride ==_fbef +1-_fbea ;var _abcb int ;for _eabc :=roi .Min .Y ;_eabc < roi .Max .Y ;_eabc ++{_edde :=_fbea ;_eedd :=_abcb ;switch {case _fbea ==_fbef :_dggf ,_dcba :=src .GetByte (_edde );if _dcba !=nil {return nil ,_dcba ;};_dggf <<=uint (_gefcf );_dcba =_gde .SetByte (_eedd ,_bdaa (_eca ,_dggf ));if _dcba !=nil {return nil ,_dcba ;};case _gefcf ==0:for _gfcg :=_fbea ;_gfcg <=_fbef ;_gfcg ++{_fgbf ,_cbgg :=src .GetByte (_edde );if _cbgg !=nil {return nil ,_cbgg ;};_edde ++;if _gfcg ==_fbef &&_gggd {_fgbf =_bdaa (_eca ,_fgbf );};_cbgg =_gde .SetByte (_eedd ,_fgbf );if _cbgg !=nil {return nil ,_cbgg ;};_eedd ++;};default:_gcaa :=_fega (src ,_gde ,uint (_gefcf ),uint (_gafe ),_eca ,_fbea ,_fbef ,_gggd ,_edde ,_eedd );if _gcaa !=nil {return nil ,_gcaa ;};};_fbea +=src .RowStride ;_fbef +=src .RowStride ;_abcb +=_gde .RowStride ;};return _gde ,nil ;};func (_caba *Points )Add (pt *Points )error {const _caad ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _caba ==nil {return _c .Error (_caad ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _c .Error (_caad ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_caba =append (*_caba ,*pt ...);return nil ;};func _cd ()(_edg [256]uint64 ){for _ggf :=0;_ggf < 256;_ggf ++{if _ggf &0x01!=0{_edg [_ggf ]|=0xff;};if _ggf &0x02!=0{_edg [_ggf ]|=0xff00;};if _ggf &0x04!=0{_edg [_ggf ]|=0xff0000;};if _ggf &0x08!=0{_edg [_ggf ]|=0xff000000;};if _ggf &0x10!=0{_edg [_ggf ]|=0xff00000000;};if _ggf &0x20!=0{_edg [_ggf ]|=0xff0000000000;};if _ggf &0x40!=0{_edg [_ggf ]|=0xff000000000000;};if _ggf &0x80!=0{_edg [_ggf ]|=0xff00000000000000;};};return _edg ;};func (_edca *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _edca .addBorderGeneral (left ,right ,top ,bot ,val );};func (_fcgge *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dggge (_fcgge ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _aceb ,_gefc int ;_cee :=src .RowStride -1;if x < 0{_gefc =-x ;x =0;}else if x +src .Width > dst .Width {_cee -=src .Width +x -dst .Width ;};if y < 0{_aceb =-y ;y =0;_gefc +=src .RowStride ;_cee +=src .RowStride ;}else if y +src .Height > dst .Height {_aceb =src .Height +y -dst .Height ;};var (_eade int ;_fee error ;);_geeg :=x &0x07;_cgd :=8-_geeg ;_dggg :=src .Width &0x07;_gdg :=_cgd -_dggg ;_agad :=_cgd &0x07!=0;_fffe :=src .Width <=((_cee -_gefc )<<3)+_cgd ;_gbbc :=dst .GetByteIndex (x ,y );_gea :=_aceb +dst .Height ;if src .Height > _gea {_eade =_gea ;}else {_eade =src .Height ;};switch {case !_agad :_fee =_gged (src ,dst ,_aceb ,_eade ,_gbbc ,_gefc ,_cee ,op );case _fffe :_fee =_cbee (src ,dst ,_aceb ,_eade ,_gbbc ,_gefc ,_cee ,_gdg ,_geeg ,_cgd ,op );default:_fee =_bgag (src ,dst ,_aceb ,_eade ,_gbbc ,_gefc ,_cee ,_gdg ,_geeg ,_cgd ,op ,_dggg );};return _fee ;};func _bfa (_gcag ,_gcg *Bitmap ,_ace int ,_ggb []byte ,_fedd int )(_gadd error ){const _cac ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_bcd ,_fcb ,_gee ,_fdb ,_fef ,_fabc ,_ggc ,_add int ;_ffgb ,_cad ,_dea ,_bbb uint32 ;_fae ,_gff byte ;_bea uint16 ;);_beef :=make ([]byte ,4);_ged :=make ([]byte ,4);for _gee =0;_gee < _gcag .Height -1;_gee ,_fdb =_gee +2,_fdb +1{_bcd =_gee *_gcag .RowStride ;_fcb =_fdb *_gcg .RowStride ;for _fef ,_fabc =0,0;_fef < _fedd ;_fef ,_fabc =_fef +4,_fabc +1{for _ggc =0;_ggc < 4;_ggc ++{_add =_bcd +_fef +_ggc ;if _add <=len (_gcag .Data )-1&&_add < _bcd +_gcag .RowStride {_beef [_ggc ]=_gcag .Data [_add ];}else {_beef [_ggc ]=0x00;};_add =_bcd +_gcag .RowStride +_fef +_ggc ;if _add <=len (_gcag .Data )-1&&_add < _bcd +(2*_gcag .RowStride ){_ged [_ggc ]=_gcag .Data [_add ];}else {_ged [_ggc ]=0x00;};};_ffgb =_ac .BigEndian .Uint32 (_beef );_cad =_ac .BigEndian .Uint32 (_ged );_dea =_ffgb &_cad ;_dea |=_dea <<1;_bbb =_ffgb |_cad ;_bbb &=_bbb <<1;_cad =_dea &_bbb ;_cad &=0xaaaaaaaa;_ffgb =_cad |(_cad <<7);_fae =byte (_ffgb >>24);_gff =byte ((_ffgb >>8)&0xff);_add =_fcb +_fabc ;if _add +1==len (_gcg .Data )-1||_add +1>=_fcb +_gcg .RowStride {if _gadd =_gcg .SetByte (_add ,_ggb [_fae ]);_gadd !=nil {return _c .Wrapf (_gadd ,_cac ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_add );};}else {_bea =(uint16 (_ggb [_fae ])<<8)|uint16 (_ggb [_gff ]);if _gadd =_gcg .setTwoBytes (_add ,_bea );_gadd !=nil {return _c .Wrapf (_gadd ,_cac ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_add );};_fabc ++;};};};return nil ;};func _cfge (_adfea *Bitmap ,_cebg *Bitmap ,_geb *Selection )(*Bitmap ,error ){var (_effc *Bitmap ;_ggbd error ;);_adfea ,_ggbd =_gfaa (_adfea ,_cebg ,_geb ,&_effc );if _ggbd !=nil {return nil ,_ggbd ;};if _ggbd =_adfea .clearAll ();_ggbd !=nil {return nil ,_ggbd ;};var _dac SelectionValue ;for _gbe :=0;_gbe < _geb .Height ;_gbe ++{for _acec :=0;_acec < _geb .Width ;_acec ++{_dac =_geb .Data [_gbe ][_acec ];if _dac ==SelHit {if _ggbd =_adfea .RasterOperation (_acec -_geb .Cx ,_gbe -_geb .Cy ,_cebg .Width ,_cebg .Height ,PixSrcOrDst ,_effc ,0,0);_ggbd !=nil {return nil ,_ggbd ;};};};};return _adfea ,nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_gae *Bitmap )Equivalent (s *Bitmap )bool {return _gae .equivalent (s )};func (_aff *ClassedPoints )xSortFunction ()func (_bcdab int ,_dabed int )bool {return func (_dgfbe ,_eggcg int )bool {return _aff .XAtIndex (_dgfbe )< _aff .XAtIndex (_eggcg )};};func _fega (_ggfc ,_fgbda *Bitmap ,_cce ,_eaec ,_aedg uint ,_faae ,_daeag int ,_dcdd bool ,_fedc ,_debge int )error {for _cdgd :=_faae ;_cdgd < _daeag ;_cdgd ++{if _fedc +1< len (_ggfc .Data ){_cada :=_cdgd +1==_daeag ;_fdbd ,_ffccb :=_ggfc .GetByte (_fedc );if _ffccb !=nil {return _ffccb ;};_fedc ++;_fdbd <<=_cce ;_eecd ,_ffccb :=_ggfc .GetByte (_fedc );if _ffccb !=nil {return _ffccb ;};_eecd >>=_eaec ;_feb :=_fdbd |_eecd ;if _cada &&!_dcdd {_feb =_bdaa (_aedg ,_feb );};_ffccb =_fgbda .SetByte (_debge ,_feb );if _ffccb !=nil {return _ffccb ;};_debge ++;if _cada &&_dcdd {_bbbdg ,_aabf :=_ggfc .GetByte (_fedc );if _aabf !=nil {return _aabf ;};_bbbdg <<=_cce ;_feb =_bdaa (_aedg ,_bbbdg );if _aabf =_fgbda .SetByte (_debge ,_feb );_aabf !=nil {return _aabf ;};};continue ;};_fdag ,_eabca :=_ggfc .GetByte (_fedc );if _eabca !=nil {_fg .Log .Debug ("G\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0068\u0065\u0020\u0076\u0061l\u0075\u0065\u0020\u0061\u0074\u003a\u0020%\u0064\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020%\u0073",_fedc ,_eabca );return _eabca ;};_fdag <<=_cce ;_fedc ++;_eabca =_fgbda .SetByte (_debge ,_fdag );if _eabca !=nil {return _eabca ;};_debge ++;};return nil ;};func _gfdef (_bddf *_af .Stack )(_cddc *fillSegment ,_ebefc error ){const _dgfc ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _bddf ==nil {return nil ,_c .Error (_dgfc ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _bddf .Aux ==nil {return nil ,_c .Error (_dgfc ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_caabe ,_efda :=_bddf .Pop ();if !_efda {return nil ,nil ;};_bbgg ,_efda :=_caabe .(*fillSegment );if !_efda {return nil ,_c .Error (_dgfc ,"\u0073\u0074\u0061ck\u0020\u0064\u006f\u0065\u0073\u006e\u0027\u0074\u0020c\u006fn\u0074a\u0069n\u0020\u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074");};_cddc =&fillSegment {_bbgg ._gedg ,_bbgg ._adaba ,_bbgg ._edac +_bbgg ._gdagbd ,_bbgg ._gdagbd };_bddf .Aux .Push (_bbgg );return _cddc ,nil ;};func (_cacf *Bitmap )GetBitOffset (x int )int {return x &0x07};func init (){for _faf :=0;_faf < 256;_faf ++{_bd [_faf ]=uint8 (_faf &0x1)+(uint8 (_faf >>1)&0x1)+(uint8 (_faf >>2)&0x1)+(uint8 (_faf >>3)&0x1)+(uint8 (_faf >>4)&0x1)+(uint8 (_faf >>5)&0x1)+(uint8 (_faf >>6)&0x1)+(uint8 (_faf >>7)&0x1);};};func (_dggd *Bitmap )CountPixels ()int {return _dggd .countPixels ()};var (_cbdfc =_ege ();_cadgg =_bbg ();_bdgc =_cd (););const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_aacf *Bitmaps )SortByHeight (){_fbbg :=(*byHeight )(_aacf );_g .Sort (_fbbg )};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_cddb *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _fdec ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_cddb .Values )==0{return nil ,_c .Error (_fdec ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_bedc :=&BitmapsArray {};_cddb .SortByWidth ();_adc :=-1;_fdff :=-1;for _ebbff :=0;_ebbff < len (_cddb .Values );_ebbff ++{_fdde :=_cddb .Values [_ebbff ].Width ;if _fdde > _adc {_adc =_fdde ;_fdff ++;_bedc .Values =append (_bedc .Values ,&Bitmaps {});};_bedc .Values [_fdff ].AddBitmap (_cddb .Values [_ebbff ]);};return _bedc ,nil ;};func (_bcfc *ClassedPoints )validateIntSlice ()error {const _bgbde ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_ffcbg :=range _bcfc .IntSlice {if _ffcbg >=(_bcfc .Points .Size ()){return _c .Errorf (_bgbde ,"c\u006c\u0061\u0073\u0073\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0076\u0061\u006ci\u0064 \u0069\u006e\u0064\u0065x\u0020\u0069n\u0020\u0074\u0068\u0065\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u003a\u0020\u0025\u0064",_ffcbg ,_bcfc .Points .Size ());};};return nil ;};func (_bbc *Bitmap )Equals (s *Bitmap )bool {if len (_bbc .Data )!=len (s .Data )||_bbc .Width !=s .Width ||_bbc .Height !=s .Height {return false ;};for _fag :=0;_fag < _bbc .Height ;_fag ++{_bga :=_fag *_bbc .RowStride ;for _dcbc :=0;_dcbc < _bbc .RowStride ;_dcbc ++{if _bbc .Data [_bga +_dcbc ]!=s .Data [_bga +_dcbc ]{return false ;};};};return true ;};func (_dfdc *ClassedPoints )YAtIndex (i int )float32 {return (*_dfdc .Points )[_dfdc .IntSlice [i ]].Y };func (_baag *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _baag .Copy (),nil ;};_gda ,_bbbc :=_baag .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _bbbc !=nil {return nil ,_c .Wrap (_bbbc ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _gda ,nil ;};func (_ebac *Bitmap )thresholdPixelSum (_fdgf int )bool {var (_gcaf int ;_fbgc uint8 ;_ffcc byte ;_bdgb int ;);_gbgdf :=_ebac .RowStride ;_eeaa :=uint (_ebac .Width &0x07);if _eeaa !=0{_fbgc =uint8 ((0xff<<(8-_eeaa ))&0xff);_gbgdf --;};for _abab :=0;_abab < _ebac .Height ;_abab ++{for _bdgb =0;_bdgb < _gbgdf ;_bdgb ++{_ffcc =_ebac .Data [_abab *_ebac .RowStride +_bdgb ];_gcaf +=int (_bd [_ffcc ]);};if _eeaa !=0{_ffcc =_ebac .Data [_abab *_ebac .RowStride +_bdgb ]&_fbgc ;_gcaf +=int (_bd [_ffcc ]);};if _gcaf > _fdgf {return true ;};};return false ;};func TstESymbol (t *_f .T ,scale ...int )*Bitmap {_gebd ,_gadfe :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_d .NoError (t ,_gadfe );return TstGetScaledSymbol (t ,_gebd ,scale ...);};func (_ebee *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _gaea ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _ebee ==nil {return nil ,_c .Error (_gaea ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_ebee .Values )-1{return nil ,_c .Errorf (_gaea ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ebee .Values [i ],nil ;};func (_aba *Bitmap )GetUnpaddedData ()([]byte ,error ){_geda :=uint (_aba .Width &0x07);if _geda ==0{return _aba .Data ,nil ;};_fedf :=_aba .Width *_aba .Height ;if _fedf %8!=0{_fedf >>=3;_fedf ++;}else {_fedf >>=3;};_dgc :=make ([]byte ,_fedf );_ceg :=_de .NewWriterMSB (_dgc );const _cgf ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _bdc :=0;_bdc < _aba .Height ;_bdc ++{for _dca :=0;_dca < _aba .RowStride ;_dca ++{_baae :=_aba .Data [_bdc *_aba .RowStride +_dca ];if _dca !=_aba .RowStride -1{_fabf :=_ceg .WriteByte (_baae );if _fabf !=nil {return nil ,_c .Wrap (_fabf ,_cgf ,"");};continue ;};for _bcgb :=uint (0);_bcgb < _geda ;_bcgb ++{_ccff :=_ceg .WriteBit (int (_baae >>(7-_bcgb )&0x01));if _ccff !=nil {return nil ,_c .Wrap (_ccff ,_cgf ,"");};};};};return _dgc ,nil ;};func _feed ()[]int {_gfdf :=make ([]int ,256);for _gfff :=0;_gfff <=0xff;_gfff ++{_dcgg :=byte (_gfff );_gfdf [_dcgg ]=int (_dcgg &0x1)+(int (_dcgg >>1)&0x1)+(int (_dcgg >>2)&0x1)+(int (_dcgg >>3)&0x1)+(int (_dcgg >>4)&0x1)+(int (_dcgg >>5)&0x1)+(int (_dcgg >>6)&0x1)+(int (_dcgg >>7)&0x1);};return _gfdf ;};func (_bbga *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _ebad ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _bbga ==nil {return nil ,_c .Error (_ebad ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_c .Error (_ebad ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_afbf :=len (_bbga .Values );_bgfe :=&Bitmaps {Values :make ([]*Bitmap ,_afbf ),Boxes :make ([]*_cc .Rectangle ,_afbf )};var (_daae ,_faed *Bitmap ;_ebgf *_cc .Rectangle ;_fcgda error ;);for _aaeaa :=0;_aaeaa < _afbf ;_aaeaa ++{if _daae ,_fcgda =_bbga .GetBitmap (_aaeaa );_fcgda !=nil {return nil ,_c .Wrap (_fcgda ,_ebad ,"");};if _ebgf ,_fcgda =_bbga .GetBox (_aaeaa );_fcgda !=nil {return nil ,_c .Wrap (_fcgda ,_ebad ,"");};if _faed ,_fcgda =s .clipRectangle (_ebgf ,nil );_fcgda !=nil {return nil ,_c .Wrap (_fcgda ,_ebad ,"");};if _faed ,_fcgda =_faed .And (_daae );_fcgda !=nil {return nil ,_c .Wrap (_fcgda ,_ebad ,"");};_bgfe .Values [_aaeaa ]=_faed ;_bgfe .Boxes [_aaeaa ]=_ebgf ;};return _bgfe ,nil ;};type Component int ;func (_faab *ClassedPoints )Len ()int {return _faab .IntSlice .Size ()};func _cec (_eff ,_abe *Bitmap ,_gca int ,_fed []byte ,_faa int )(_caf error ){const _ddbd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_decd ,_bg ,_dae ,_edef ,_dfc ,_agd ,_dbc ,_fab int ;_dcbf ,_ebg uint32 ;_egf ,_edf byte ;_baf uint16 ;);_ddd :=make ([]byte ,4);_cbg :=make ([]byte ,4);for _dae =0;_dae < _eff .Height -1;_dae ,_edef =_dae +2,_edef +1{_decd =_dae *_eff .RowStride ;_bg =_edef *_abe .RowStride ;for _dfc ,_agd =0,0;_dfc < _faa ;_dfc ,_agd =_dfc +4,_agd +1{for _dbc =0;_dbc < 4;_dbc ++{_fab =_decd +_dfc +_dbc ;if _fab <=len (_eff .Data )-1&&_fab < _decd +_eff .RowStride {_ddd [_dbc ]=_eff .Data [_fab ];}else {_ddd [_dbc ]=0x00;};_fab =_decd +_eff .RowStride +_dfc +_dbc ;if _fab <=len (_eff .Data )-1&&_fab < _decd +(2*_eff .RowStride ){_cbg [_dbc ]=_eff .Data [_fab ];}else {_cbg [_dbc ]=0x00;};};_dcbf =_ac .BigEndian .Uint32 (_ddd );_ebg =_ac .BigEndian .Uint32 (_cbg );_ebg |=_dcbf ;_ebg |=_ebg <<1;_ebg &=0xaaaaaaaa;_dcbf =_ebg |(_ebg <<7);_egf =byte (_dcbf >>24);_edf =byte ((_dcbf >>8)&0xff);_fab =_bg +_agd ;if _fab +1==len (_abe .Data )-1||_fab +1>=_bg +_abe .RowStride {_abe .Data [_fab ]=_fed [_egf ];}else {_baf =(uint16 (_fed [_egf ])<<8)|uint16 (_fed [_edf ]);if _caf =_abe .setTwoBytes (_fab ,_baf );_caf !=nil {return _c .Wrapf (_caf ,_ddbd ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_fab );};_agd ++;};};};return nil ;};func _efbc (_fedcb ,_fcfg *Bitmap ,_gccgbd ,_ebea int )(_cacbc error ){const _fgbc ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_ebdd ,_gdge ,_gfcga ,_eagec int ;_bcgdb ,_bcca ,_eadg ,_bcfb ,_acae ,_eaff ,_eaffe byte ;);for _ebdd =0;_ebdd < _gccgbd ;_ebdd ++{_gfcga =_ebdd *_fedcb .RowStride ;_eagec =_ebdd *_fcfg .RowStride ;for _gdge =0;_gdge < _ebea ;_gdge ++{_bcgdb ,_cacbc =_fedcb .GetByte (_gfcga +_gdge );if _cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_bcca ,_cacbc =_fcfg .GetByte (_eagec +_gdge );if _cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _ebdd > 0{_eadg ,_cacbc =_fedcb .GetByte (_gfcga -_fedcb .RowStride +_gdge );if _cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0069\u0020\u003e \u0030");};_bcgdb |=_eadg ;};if _gdge > 0{_bcfb ,_cacbc =_fedcb .GetByte (_gfcga +_gdge -1);if _cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u006a\u0020\u003e \u0030");};_bcgdb |=_bcfb <<7;};_bcgdb &=_bcca ;if _bcgdb ==0||(^_bcgdb )==0{if _cacbc =_fedcb .SetByte (_gfcga +_gdge ,_bcgdb );_cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_eaffe =_bcgdb ;_bcgdb =(_bcgdb |(_bcgdb >>1)|(_bcgdb <<1))&_bcca ;if (_bcgdb ^_eaffe )==0{if _cacbc =_fedcb .SetByte (_gfcga +_gdge ,_bcgdb );_cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _ebdd =_gccgbd -1;_ebdd >=0;_ebdd --{_gfcga =_ebdd *_fedcb .RowStride ;_eagec =_ebdd *_fcfg .RowStride ;for _gdge =_ebea -1;_gdge >=0;_gdge --{if _bcgdb ,_cacbc =_fedcb .GetByte (_gfcga +_gdge );_cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _bcca ,_cacbc =_fcfg .GetByte (_eagec +_gdge );_cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _ebdd < _gccgbd -1{if _acae ,_cacbc =_fedcb .GetByte (_gfcga +_fedcb .RowStride +_gdge );_cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_bcgdb |=_acae ;};if _gdge < _ebea -1{if _eaff ,_cacbc =_fedcb .GetByte (_gfcga +_gdge +1);_cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_bcgdb |=_eaff >>7;};_bcgdb &=_bcca ;if _bcgdb ==0||(^_bcgdb )==0{if _cacbc =_fedcb .SetByte (_gfcga +_gdge ,_bcgdb );_cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006d\u0061\u0073k\u0065\u0064\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061i\u006c\u0065\u0064");};continue ;};for {_eaffe =_bcgdb ;_bcgdb =(_bcgdb |(_bcgdb >>1)|(_bcgdb <<1))&_bcca ;if (_bcgdb ^_eaffe )==0{if _cacbc =_fedcb .SetByte (_gfcga +_gdge ,_bcgdb );_cacbc !=nil {return _c .Wrap (_cacbc ,_fgbc ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");};break ;};};};};return nil ;};func _ffcd (_gdgd ,_dagc *Bitmap ,_dgbb CombinationOperator )*Bitmap {_adfe :=New (_gdgd .Width ,_gdgd .Height );for _bace :=0;_bace < len (_adfe .Data );_bace ++{_adfe .Data [_bace ]=_eceb (_gdgd .Data [_bace ],_dagc .Data [_bace ],_dgbb );};return _adfe ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _bffge ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064";if bm1 ==nil {return false ,_c .Error (_bffge ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c");};if bm2 ==nil {return false ,_c .Error (_bffge ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c");};if area1 <=0||area2 <=0{return false ,_c .Error (_bffge ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030");};if downcount ==nil {return false ,_c .Error (_bffge ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_c .Error (_bffge ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");};_edgc ,_fceb :=bm1 .Width ,bm1 .Height ;_bdge ,_abed :=bm2 .Width ,bm2 .Height ;if _af .Abs (_edgc -_bdge )> maxDiffW {return false ,nil ;};if _af .Abs (_fceb -_abed )> maxDiffH {return false ,nil ;};_gcgf :=int (delX +_af .Sign (delX )*0.5);_eefg :=int (delY +_af .Sign (delY )*0.5);_ecdbe :=int (_ff .Ceil (_ff .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_cggf :=bm2 .RowStride ;_cgdd :=_afbc (_eefg ,0);_gcda :=_fbaef (_abed +_eefg ,_fceb );_edaf :=bm1 .RowStride *_cgdd ;_eadb :=bm2 .RowStride *(_cgdd -_eefg );var _abd int ;if _gcda <=_fceb {_abd =downcount [_gcda -1];};_afcdc :=_afbc (_gcgf ,0);_dagg :=_fbaef (_bdge +_gcgf ,_edgc );var _beeec ,_fedcd int ;if _gcgf >=8{_beeec =_gcgf >>3;_edaf +=_beeec ;_afcdc -=_beeec <<3;_dagg -=_beeec <<3;_gcgf &=7;}else if _gcgf <=-8{_fedcd =-((_gcgf +7)>>3);_eadb +=_fedcd ;_cggf -=_fedcd ;_gcgf +=_fedcd <<3;};var (_gbc ,_agbf ,_dbbe int ;_ffcdc ,_bfcg ,_dcdf byte ;);if _afcdc >=_dagg ||_cgdd >=_gcda {return false ,nil ;};_aceeg :=(_dagg +7)>>3;switch {case _gcgf ==0:for _agbf =_cgdd ;_agbf < _gcda ;_agbf ,_edaf ,_eadb =_agbf +1,_edaf +bm1 .RowStride ,_eadb +bm2 .RowStride {for _dbbe =0;_dbbe < _aceeg ;_dbbe ++{_ffcdc =bm1 .Data [_edaf +_dbbe ]&bm2 .Data [_eadb +_dbbe ];_gbc +=tab [_ffcdc ];};if _gbc >=_ecdbe {return true ,nil ;};if _adae :=_gbc +downcount [_agbf ]-_abd ;_adae < _ecdbe {return false ,nil ;};};case _gcgf > 0&&_cggf < _aceeg :for _agbf =_cgdd ;_agbf < _gcda ;_agbf ,_edaf ,_eadb =_agbf +1,_edaf +bm1 .RowStride ,_eadb +bm2 .RowStride {_bfcg =bm1 .Data [_edaf ];_dcdf =bm2 .Data [_eadb ]>>uint (_gcgf );_ffcdc =_bfcg &_dcdf ;_gbc +=tab [_ffcdc ];for _dbbe =1;_dbbe < _cggf ;_dbbe ++{_bfcg =bm1 .Data [_edaf +_dbbe ];_dcdf =bm2 .Data [_eadb +_dbbe ]>>uint (_gcgf )|bm2 .Data [_eadb +_dbbe -1]<<uint (8-_gcgf );_ffcdc =_bfcg &_dcdf ;_gbc +=tab [_ffcdc ];};_bfcg =bm1 .Data [_edaf +_dbbe ];_dcdf =bm2 .Data [_eadb +_dbbe -1]<<uint (8-_gcgf );_ffcdc =_bfcg &_dcdf ;_gbc +=tab [_ffcdc ];if _gbc >=_ecdbe {return true ,nil ;}else if _gbc +downcount [_agbf ]-_abd < _ecdbe {return false ,nil ;};};case _gcgf > 0&&_cggf >=_aceeg :for _agbf =_cgdd ;_agbf < _gcda ;_agbf ,_edaf ,_eadb =_agbf +1,_edaf +bm1 .RowStride ,_eadb +bm2 .RowStride {_bfcg =bm1 .Data [_edaf ];_dcdf =bm2 .Data [_eadb ]>>uint (_gcgf );_ffcdc =_bfcg &_dcdf ;_gbc +=tab [_ffcdc ];for _dbbe =1;_dbbe < _aceeg ;_dbbe ++{_bfcg =bm1 .Data [_edaf +_dbbe ];_dcdf =bm2 .Data [_eadb +_dbbe ]>>uint (_gcgf );_dcdf |=bm2 .Data [_eadb +_dbbe -1]<<uint (8-_gcgf );_ffcdc =_bfcg &_dcdf ;_gbc +=tab [_ffcdc ];};if _gbc >=_ecdbe {return true ,nil ;}else if _gbc +downcount [_agbf ]-_abd < _ecdbe {return false ,nil ;};};case _aceeg < _cggf :for _agbf =_cgdd ;_agbf < _gcda ;_agbf ,_edaf ,_eadb =_agbf +1,_edaf +bm1 .RowStride ,_eadb +bm2 .RowStride {for _dbbe =0;_dbbe < _aceeg ;_dbbe ++{_bfcg =bm1 .Data [_edaf +_dbbe ];_dcdf =bm2 .Data [_eadb +_dbbe ]<<uint (-_gcgf );_dcdf |=bm2 .Data [_eadb +_dbbe +1]>>uint (8+_gcgf );_ffcdc =_bfcg &_dcdf ;_gbc +=tab [_ffcdc ];};if _gbc >=_ecdbe {return true ,nil ;}else if _fagd :=_gbc +downcount [_agbf ]-_abd ;_fagd < _ecdbe {return false ,nil ;};};case _cggf >=_aceeg :for _agbf =_cgdd ;_agbf < _gcda ;_agbf ,_edaf ,_eadb =_agbf +1,_edaf +bm1 .RowStride ,_eadb +bm2 .RowStride {for _dbbe =0;_dbbe < _aceeg ;_dbbe ++{_bfcg =bm1 .Data [_edaf +_dbbe ];_dcdf =bm2 .Data [_eadb +_dbbe ]<<uint (-_gcgf );_dcdf |=bm2 .Data [_eadb +_dbbe +1]>>uint (8+_gcgf );_ffcdc =_bfcg &_dcdf ;_gbc +=tab [_ffcdc ];};_bfcg =bm1 .Data [_edaf +_dbbe ];_dcdf =bm2 .Data [_eadb +_dbbe ]<<uint (-_gcgf );_ffcdc =_bfcg &_dcdf ;_gbc +=tab [_ffcdc ];if _gbc >=_ecdbe {return true ,nil ;}else if _gbc +downcount [_agbf ]-_abd < _ecdbe {return false ,nil ;};};};_acbe :=float32 (_gbc )*float32 (_gbc )/(float32 (area1 )*float32 (area2 ));if _acbe >=scoreThreshold {_fg .Log .Trace ("\u0063\u006f\u0075\u006e\u0074\u003a\u0020\u0025\u0064\u0020\u003c\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0020\u0025\u0064\u0020\u0062\u0075\u0074\u0020\u0073c\u006f\u0072\u0065\u0020\u0025\u0066\u0020\u003e\u003d\u0020\u0073\u0063\u006fr\u0065\u0054\u0068\u0072\u0065\u0073h\u006f\u006c\u0064 \u0025\u0066",_gbc ,_ecdbe ,_acbe ,scoreThreshold );};return false ,nil ;};func _ggfd (_gbcg *Bitmap ,_cfbc ,_gdegd ,_gdbd ,_gaedg int ,_dfbg RasterOperator ,_cgbe *Bitmap ,_degd ,_ddbc int )error {var (_cdgff byte ;_egcb int ;_cafc int ;_fecf ,_cedgb int ;_aadg ,_dfbgf int ;);_cbbc :=_gdbd >>3;_fbab :=_gdbd &7;if _fbab > 0{_cdgff =_defc [_fbab ];};_egcb =_cgbe .RowStride *_ddbc +(_degd >>3);_cafc =_gbcg .RowStride *_gdegd +(_cfbc >>3);switch _dfbg {case PixSrc :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]=_cgbe .Data [_fecf ];_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],_cgbe .Data [_fecf ],_cdgff );};};case PixNotSrc :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]=^(_cgbe .Data [_fecf ]);_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],^_cgbe .Data [_fecf ],_cdgff );};};case PixSrcOrDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]|=_cgbe .Data [_fecf ];_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],_cgbe .Data [_fecf ]|_gbcg .Data [_cedgb ],_cdgff );};};case PixSrcAndDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]&=_cgbe .Data [_fecf ];_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],_cgbe .Data [_fecf ]&_gbcg .Data [_cedgb ],_cdgff );};};case PixSrcXorDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]^=_cgbe .Data [_fecf ];_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],_cgbe .Data [_fecf ]^_gbcg .Data [_cedgb ],_cdgff );};};case PixNotSrcOrDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]|=^(_cgbe .Data [_fecf ]);_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],^(_cgbe .Data [_fecf ])|_gbcg .Data [_cedgb ],_cdgff );};};case PixNotSrcAndDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]&=^(_cgbe .Data [_fecf ]);_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],^(_cgbe .Data [_fecf ])&_gbcg .Data [_cedgb ],_cdgff );};};case PixSrcOrNotDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]=_cgbe .Data [_fecf ]|^(_gbcg .Data [_cedgb ]);_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],_cgbe .Data [_fecf ]|^(_gbcg .Data [_cedgb ]),_cdgff );};};case PixSrcAndNotDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]=_cgbe .Data [_fecf ]&^(_gbcg .Data [_cedgb ]);_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],_cgbe .Data [_fecf ]&^(_gbcg .Data [_cedgb ]),_cdgff );};};case PixNotPixSrcOrDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]=^(_cgbe .Data [_fecf ]|_gbcg .Data [_cedgb ]);_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],^(_cgbe .Data [_fecf ]|_gbcg .Data [_cedgb ]),_cdgff );};};case PixNotPixSrcAndDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]=^(_cgbe .Data [_fecf ]&_gbcg .Data [_cedgb ]);_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],^(_cgbe .Data [_fecf ]&_gbcg .Data [_cedgb ]),_cdgff );};};case PixNotPixSrcXorDst :for _aadg =0;_aadg < _gaedg ;_aadg ++{_fecf =_egcb +_aadg *_cgbe .RowStride ;_cedgb =_cafc +_aadg *_gbcg .RowStride ;for _dfbgf =0;_dfbgf < _cbbc ;_dfbgf ++{_gbcg .Data [_cedgb ]=^(_cgbe .Data [_fecf ]^_gbcg .Data [_cedgb ]);_cedgb ++;_fecf ++;};if _fbab > 0{_gbcg .Data [_cedgb ]=_fecaaf (_gbcg .Data [_cedgb ],^(_cgbe .Data [_fecf ]^_gbcg .Data [_cedgb ]),_cdgff );};};default:_fg .Log .Debug ("\u0050\u0072ov\u0069\u0064\u0065d\u0020\u0069\u006e\u0076ali\u0064 r\u0061\u0073\u0074\u0065\u0072\u0020\u006fpe\u0072\u0061\u0074\u006f\u0072\u003a\u0020%\u0076",_dfbg );return _c .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");};return nil ;};func MakePixelSumTab8 ()[]int {return _feed ()};func (_ddgb *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _afa ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";if i >=_ddgb .IntSlice .Size (){return 0,_c .Errorf (_afa ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );};return int (_ddgb .YAtIndex (i )),nil ;};func (_fbgf *Bitmap )GetByteIndex (x ,y int )int {return y *_fbgf .RowStride +(x >>3)};func (_eggd *Boxes )selectWithIndicator (_gab *_af .NumSlice )(_cfeb *Boxes ,_gggg error ){const _bfc ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _eggd ==nil {return nil ,_c .Error (_bfc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _gab ==nil {return nil ,_c .Error (_bfc ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_gab )!=len (*_eggd ){return nil ,_c .Error (_bfc ,"\u0062\u006f\u0078\u0065\u0073\u0020\u0027\u0062\u0027\u0020\u0068\u0061\u0073\u0020\u0064\u0069\u0066\u0066\u0065\u0072\u0065\u006e\u0074\u0020s\u0069\u007a\u0065\u0020\u0074h\u0061\u006e \u0027\u006e\u0061\u0027");};var _aaec ,_dfaeg int ;for _bde :=0;_bde < len (*_gab );_bde ++{if _aaec ,_gggg =_gab .GetInt (_bde );_gggg !=nil {return nil ,_c .Wrap (_gggg ,_bfc ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _aaec ==1{_dfaeg ++;};};if _dfaeg ==len (*_eggd ){return _eggd ,nil ;};_aebff :=Boxes {};for _cfgg :=0;_cfgg < len (*_gab );_cfgg ++{_aaec =int ((*_gab )[_cfgg ]);if _aaec ==0{continue ;};_aebff =append (_aebff ,(*_eggd )[_cfgg ]);};_cfeb =&_aebff ;return _cfeb ,nil ;};func (_gceae Points )Get (i int )(Point ,error ){if i > len (_gceae )-1{return Point {},_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gceae [i ],nil ;};func _beeg (_ffege *Bitmap ,_fefb ,_gcdf ,_aabg ,_dddc int ,_dbcge RasterOperator ){if _fefb < 0{_aabg +=_fefb ;_fefb =0;};_ffaa :=_fefb +_aabg -_ffege .Width ;if _ffaa > 0{_aabg -=_ffaa ;};if _gcdf < 0{_dddc +=_gcdf ;_gcdf =0;};_fffg :=_gcdf +_dddc -_ffege .Height ;if _fffg > 0{_dddc -=_fffg ;};if _aabg <=0||_dddc <=0{return ;};if (_fefb &7)==0{_adecd (_ffege ,_fefb ,_gcdf ,_aabg ,_dddc ,_dbcge );}else {_efdf (_ffege ,_fefb ,_gcdf ,_aabg ,_dddc ,_dbcge );};};func _fecaaf (_bdfgg ,_aefg ,_egef byte )byte {return (_bdfgg &^(_egef ))|(_aefg &_egef )};func TstRSymbol (t *_f .T ,scale ...int )*Bitmap {_fdgdc ,_aefc :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_d .NoError (t ,_aefc );return TstGetScaledSymbol (t ,_fdgdc ,scale ...);};func _fcce (_cgagb *Bitmap ,_bbbf *_af .Stack ,_agdcg ,_geab int )(_fbdef *_cc .Rectangle ,_abcea error ){const _bcee ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _cgagb ==nil {return nil ,_c .Error (_bcee ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _bbbf ==nil {return nil ,_c .Error (_bcee ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_cggg ,_gdef :=_cgagb .Width ,_cgagb .Height ;_beeda :=_cggg -1;_ecb :=_gdef -1;if _agdcg < 0||_agdcg > _beeda ||_geab < 0||_geab > _ecb ||!_cgagb .GetPixel (_agdcg ,_geab ){return nil ,nil ;};var _ebec *_cc .Rectangle ;_ebec ,_abcea =Rect (100000,100000,0,0);if _abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"");};if _abcea =_gfcgc (_bbbf ,_agdcg ,_agdcg ,_geab ,1,_ecb ,_ebec );_abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _abcea =_gfcgc (_bbbf ,_agdcg ,_agdcg ,_geab +1,-1,_ecb ,_ebec );_abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_ebec .Min .X ,_ebec .Max .X =_agdcg ,_agdcg ;_ebec .Min .Y ,_ebec .Max .Y =_geab ,_geab ;var (_effcg *fillSegment ;_cdbg int ;);for _bbbf .Len ()> 0{if _effcg ,_abcea =_gfdef (_bbbf );_abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"");};_geab =_effcg ._edac ;for _agdcg =_effcg ._gedg ;_agdcg >=0&&_cgagb .GetPixel (_agdcg ,_geab );_agdcg --{if _abcea =_cgagb .SetPixel (_agdcg ,_geab ,0);_abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"");};};if _agdcg >=_effcg ._gedg {for _agdcg ++;_agdcg <=_effcg ._adaba &&_agdcg <=_beeda &&!_cgagb .GetPixel (_agdcg ,_geab );_agdcg ++{};_cdbg =_agdcg ;if !(_agdcg <=_effcg ._adaba &&_agdcg <=_beeda ){continue ;};}else {_cdbg =_agdcg +1;if _cdbg < _effcg ._gedg -1{if _abcea =_gfcgc (_bbbf ,_cdbg ,_effcg ._gedg -1,_effcg ._edac ,-_effcg ._gdagbd ,_ecb ,_ebec );_abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_agdcg =_effcg ._gedg +1;};for {for ;_agdcg <=_beeda &&_cgagb .GetPixel (_agdcg ,_geab );_agdcg ++{if _abcea =_cgagb .SetPixel (_agdcg ,_geab ,0);_abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _abcea =_gfcgc (_bbbf ,_cdbg ,_agdcg -1,_effcg ._edac ,_effcg ._gdagbd ,_ecb ,_ebec );_abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _agdcg > _effcg ._adaba +1{if _abcea =_gfcgc (_bbbf ,_effcg ._adaba +1,_agdcg -1,_effcg ._edac ,-_effcg ._gdagbd ,_ecb ,_ebec );_abcea !=nil {return nil ,_c .Wrap (_abcea ,_bcee ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _agdcg ++;_agdcg <=_effcg ._adaba &&_agdcg <=_beeda &&!_cgagb .GetPixel (_agdcg ,_geab );_agdcg ++{};_cdbg =_agdcg ;if !(_agdcg <=_effcg ._adaba &&_agdcg <=_beeda ){break ;};};};_ebec .Max .X ++;_ebec .Max .Y ++;return _ebec ,nil ;};func _beab (_fbf ,_egb *Bitmap ,_cade int ,_fbde []byte ,_efc int )(_aae error ){const _cbf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_gcc ,_afg ,_fabe ,_gddb ,_dfaf ,_ecc ,_ddc ,_beb int ;_debg ,_fgb uint32 ;_ded ,_bfag byte ;_gbgd uint16 ;);_fba :=make ([]byte ,4);_egea :=make ([]byte ,4);for _fabe =0;_fabe < _fbf .Height -1;_fabe ,_gddb =_fabe +2,_gddb +1{_gcc =_fabe *_fbf .RowStride ;_afg =_gddb *_egb .RowStride ;for _dfaf ,_ecc =0,0;_dfaf < _efc ;_dfaf ,_ecc =_dfaf +4,_ecc +1{for _ddc =0;_ddc < 4;_ddc ++{_beb =_gcc +_dfaf +_ddc ;if _beb <=len (_fbf .Data )-1&&_beb < _gcc +_fbf .RowStride {_fba [_ddc ]=_fbf .Data [_beb ];}else {_fba [_ddc ]=0x00;};_beb =_gcc +_fbf .RowStride +_dfaf +_ddc ;if _beb <=len (_fbf .Data )-1&&_beb < _gcc +(2*_fbf .RowStride ){_egea [_ddc ]=_fbf .Data [_beb ];}else {_egea [_ddc ]=0x00;};};_debg =_ac .BigEndian .Uint32 (_fba );_fgb =_ac .BigEndian .Uint32 (_egea );_fgb &=_debg ;_fgb &=_fgb <<1;_fgb &=0xaaaaaaaa;_debg =_fgb |(_fgb <<7);_ded =byte (_debg >>24);_bfag =byte ((_debg >>8)&0xff);_beb =_afg +_ecc ;if _beb +1==len (_egb .Data )-1||_beb +1>=_afg +_egb .RowStride {_egb .Data [_beb ]=_fbde [_ded ];if _aae =_egb .SetByte (_beb ,_fbde [_ded ]);_aae !=nil {return _c .Wrapf (_aae ,_cbf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_beb );};}else {_gbgd =(uint16 (_fbde [_ded ])<<8)|uint16 (_fbde [_bfag ]);if _aae =_egb .setTwoBytes (_beb ,_gbgd );_aae !=nil {return _c .Wrapf (_aae ,_cbf ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_beb );};_ecc ++;};};};return nil ;};func _bbbcc (_eegc ,_aeea *Bitmap ,_gfde ,_aggaa int )(*Bitmap ,error ){const _cbbg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _aeea ==nil {return nil ,_c .Error (_cbbg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gfde < 1||_aggaa < 1{return nil ,_c .Error (_cbbg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _gfde ==1&&_aggaa ==1{return _aeea .Copy (),nil ;};if _gfde ==1||_aggaa ==1{_fbbd :=SelCreateBrick (_aggaa ,_gfde ,_aggaa /2,_gfde /2,SelHit );var _baecb error ;_eegc ,_baecb =_gfa (_eegc ,_aeea ,_fbbd );if _baecb !=nil {return nil ,_c .Wrap (_baecb ,_cbbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _eegc ,nil ;};_adfg :=SelCreateBrick (1,_gfde ,0,_gfde /2,SelHit );_gbbae :=SelCreateBrick (_aggaa ,1,_aggaa /2,0,SelHit );_bgfg ,_gdde :=_cfge (nil ,_aeea ,_adfg );if _gdde !=nil {return nil ,_c .Wrap (_gdde ,_cbbg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _eegc ,_gdde =_cfge (_eegc ,_bgfg ,_gbbae );_gdde !=nil {return nil ,_c .Wrap (_gdde ,_cbbg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_gdde =_gfbc (_bgfg ,_eegc ,_adfg );_gdde !=nil {return nil ,_c .Wrap (_gdde ,_cbbg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};if _ ,_gdde =_gfbc (_eegc ,_bgfg ,_gbbae );_gdde !=nil {return nil ,_c .Wrap (_gdde ,_cbbg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _eegc ,nil ;};func _bbg ()(_eae [256]uint32 ){for _gef :=0;_gef < 256;_gef ++{if _gef &0x01!=0{_eae [_gef ]|=0xf;};if _gef &0x02!=0{_eae [_gef ]|=0xf0;};if _gef &0x04!=0{_eae [_gef ]|=0xf00;};if _gef &0x08!=0{_eae [_gef ]|=0xf000;};if _gef &0x10!=0{_eae [_gef ]|=0xf0000;};if _gef &0x20!=0{_eae [_gef ]|=0xf00000;};if _gef &0x40!=0{_eae [_gef ]|=0xf000000;};if _gef &0x80!=0{_eae [_gef ]|=0xf0000000;};};return _eae ;};func (_fgeg *Boxes )makeSizeIndicator (_bbf ,_dgfb int ,_bcceg LocationFilter ,_eacd SizeComparison )*_af .NumSlice {_ffccc :=&_af .NumSlice {};var _aded ,_bade ,_cdbe int ;for _ ,_feeg :=range *_fgeg {_aded =0;_bade ,_cdbe =_feeg .Dx (),_feeg .Dy ();switch _bcceg {case LocSelectWidth :if (_eacd ==SizeSelectIfLT &&_bade < _bbf )||(_eacd ==SizeSelectIfGT &&_bade > _bbf )||(_eacd ==SizeSelectIfLTE &&_bade <=_bbf )||(_eacd ==SizeSelectIfGTE &&_bade >=_bbf ){_aded =1;};case LocSelectHeight :if (_eacd ==SizeSelectIfLT &&_cdbe < _dgfb )||(_eacd ==SizeSelectIfGT &&_cdbe > _dgfb )||(_eacd ==SizeSelectIfLTE &&_cdbe <=_dgfb )||(_eacd ==SizeSelectIfGTE &&_cdbe >=_dgfb ){_aded =1;};case LocSelectIfEither :if (_eacd ==SizeSelectIfLT &&(_cdbe < _dgfb ||_bade < _bbf ))||(_eacd ==SizeSelectIfGT &&(_cdbe > _dgfb ||_bade > _bbf ))||(_eacd ==SizeSelectIfLTE &&(_cdbe <=_dgfb ||_bade <=_bbf ))||(_eacd ==SizeSelectIfGTE &&(_cdbe >=_dgfb ||_bade >=_bbf )){_aded =1;};case LocSelectIfBoth :if (_eacd ==SizeSelectIfLT &&(_cdbe < _dgfb &&_bade < _bbf ))||(_eacd ==SizeSelectIfGT &&(_cdbe > _dgfb &&_bade > _bbf ))||(_eacd ==SizeSelectIfLTE &&(_cdbe <=_dgfb &&_bade <=_bbf ))||(_eacd ==SizeSelectIfGTE &&(_cdbe >=_dgfb &&_bade >=_bbf )){_aded =1;};};_ffccc .AddInt (_aded );};return _ffccc ;};func (_cdbc *BitmapsArray )AddBox (box *_cc .Rectangle ){_cdbc .Boxes =append (_cdbc .Boxes ,box )};func _fce (_aebf ,_gge ,_eeaab *Bitmap )(*Bitmap ,error ){const _cbdf ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _gge ==nil {return nil ,_c .Error (_cbdf ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _eeaab ==nil {return nil ,_c .Error (_cbdf ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _gecd error ;switch {case _aebf ==_gge :if _gecd =_aebf .RasterOperation (0,0,_gge .Width ,_gge .Height ,PixNotSrcAndDst ,_eeaab ,0,0);_gecd !=nil {return nil ,_c .Wrap (_gecd ,_cbdf ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _aebf ==_eeaab :if _gecd =_aebf .RasterOperation (0,0,_gge .Width ,_gge .Height ,PixNotSrcAndDst ,_gge ,0,0);_gecd !=nil {return nil ,_c .Wrap (_gecd ,_cbdf ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_aebf ,_gecd =_ecdb (_aebf ,_gge );if _gecd !=nil {return nil ,_c .Wrap (_gecd ,_cbdf ,"");};if _gecd =_aebf .RasterOperation (0,0,_gge .Width ,_gge .Height ,PixNotSrcAndDst ,_eeaab ,0,0);_gecd !=nil {return nil ,_c .Wrap (_gecd ,_cbdf ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _aebf ,nil ;};func (_gbb *Bitmap )GetPixel (x ,y int )bool {_aad :=_gbb .GetByteIndex (x ,y );_ccf :=_gbb .GetBitOffset (x );_efee :=uint (7-_ccf );if _aad > len (_gbb .Data )-1{_fg .Log .Debug ("\u0054\u0072\u0079\u0069\u006e\u0067\u0020\u0074\u006f\u0020\u0067\u0065\u0074\u0020\u0070\u0069\u0078\u0065\u006c\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0064\u0061\u0074\u0061\u0020\u0072\u0061\u006e\u0067\u0065\u002e \u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0027\u0025\u0064'\u002c\u0020\u0062m\u003a\u0020\u0027\u0025\u0073\u0027",x ,y ,_gbb );return false ;};if (_gbb .Data [_aad ]>>_efee )&0x01>=1{return true ;};return false ;};type ClassedPoints struct{*Points ;_af .IntSlice ;_ebdf func (_gdb ,_gdf int )bool ;};func _bcg ()(_dce []byte ){_dce =make ([]byte ,256);for _fac :=0;_fac < 256;_fac ++{_eba :=byte (_fac );_dce [_eba ]=(_eba &0x01)|((_eba &0x04)>>1)|((_eba &0x10)>>2)|((_eba &0x40)>>3)|((_eba &0x02)<<3)|((_eba &0x08)<<2)|((_eba &0x20)<<1)|(_eba &0x80);};return _dce ;};func _bbcfd (_bbff *Bitmap ,_cadaf ,_afbe ,_cabb ,_gadf int ,_ffgf RasterOperator ,_ccgb *Bitmap ,_cbeee ,_aafb int )error {var (_efb bool ;_fgdf bool ;_afbd byte ;_fegbg int ;_ggac int ;_cgeb int ;_aeed int ;_fgfb bool ;_agedf int ;_baab int ;_abaa int ;_aaade bool ;_dabdf byte ;_gfg int ;_fccd int ;_cebf int ;_aeeec byte ;_gdbb int ;_aebb int ;_ecag uint ;_dcff uint ;_agba byte ;_acdgf shift ;_fabef bool ;_bcbe bool ;_cgag ,_faeg int ;);if _cbeee &7!=0{_aebb =8-(_cbeee &7);};if _cadaf &7!=0{_ggac =8-(_cadaf &7);};if _aebb ==0&&_ggac ==0{_agba =_edebb [0];}else {if _ggac > _aebb {_ecag =uint (_ggac -_aebb );}else {_ecag =uint (8-(_aebb -_ggac ));};_dcff =8-_ecag ;_agba =_edebb [_ecag ];};if (_cadaf &7)!=0{_efb =true ;_fegbg =8-(_cadaf &7);_afbd =_edebb [_fegbg ];_cgeb =_bbff .RowStride *_afbe +(_cadaf >>3);_aeed =_ccgb .RowStride *_aafb +(_cbeee >>3);_gdbb =8-(_cbeee &7);if _fegbg > _gdbb {_acdgf =_gffc ;if _cabb >=_aebb {_fabef =true ;};}else {_acdgf =_agebc ;};};if _cabb < _fegbg {_fgdf =true ;_afbd &=_defc [8-_fegbg +_cabb ];};if !_fgdf {_agedf =(_cabb -_fegbg )>>3;if _agedf !=0{_fgfb =true ;_baab =_bbff .RowStride *_afbe +((_cadaf +_ggac )>>3);_abaa =_ccgb .RowStride *_aafb +((_cbeee +_ggac )>>3);};};_gfg =(_cadaf +_cabb )&7;if !(_fgdf ||_gfg ==0){_aaade =true ;_dabdf =_defc [_gfg ];_fccd =_bbff .RowStride *_afbe +((_cadaf +_ggac )>>3)+_agedf ;_cebf =_ccgb .RowStride *_aafb +((_cbeee +_ggac )>>3)+_agedf ;if _gfg > int (_dcff ){_bcbe =true ;};};switch _ffgf {case PixSrc :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],_aeeec ,_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]=_aeeec ;};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],_aeeec ,_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixNotSrc :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],^_aeeec ,_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]=^_aeeec ;};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],^_aeeec ,_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixSrcOrDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],_aeeec |_bbff .Data [_cgeb ],_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]|=_aeeec ;};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],_aeeec |_bbff .Data [_fccd ],_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixSrcAndDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],_aeeec &_bbff .Data [_cgeb ],_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]&=_aeeec ;};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],_aeeec &_bbff .Data [_fccd ],_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixSrcXorDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],_aeeec ^_bbff .Data [_cgeb ],_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]^=_aeeec ;};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],_aeeec ^_bbff .Data [_fccd ],_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixNotSrcOrDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],^_aeeec |_bbff .Data [_cgeb ],_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]|=^_aeeec ;};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],^_aeeec |_bbff .Data [_fccd ],_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixNotSrcAndDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],^_aeeec &_bbff .Data [_cgeb ],_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]&=^_aeeec ;};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],^_aeeec &_bbff .Data [_fccd ],_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixSrcOrNotDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],_aeeec |^_bbff .Data [_cgeb ],_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]=_aeeec |^_bbff .Data [_baab +_faeg ];};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],_aeeec |^_bbff .Data [_fccd ],_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixSrcAndNotDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],_aeeec &^_bbff .Data [_cgeb ],_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]=_aeeec &^_bbff .Data [_baab +_faeg ];};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],_aeeec &^_bbff .Data [_fccd ],_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixNotPixSrcOrDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],^(_aeeec |_bbff .Data [_cgeb ]),_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]=^(_aeeec |_bbff .Data [_baab +_faeg ]);};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],^(_aeeec |_bbff .Data [_fccd ]),_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixNotPixSrcAndDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],^(_aeeec &_bbff .Data [_cgeb ]),_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]=^(_aeeec &_bbff .Data [_baab +_faeg ]);};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],^(_aeeec &_bbff .Data [_fccd ]),_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};case PixNotPixSrcXorDst :if _efb {for _cgag =0;_cgag < _gadf ;_cgag ++{if _acdgf ==_gffc {_aeeec =_ccgb .Data [_aeed ]<<_ecag ;if _fabef {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_aeed +1]>>_dcff ,_agba );};}else {_aeeec =_ccgb .Data [_aeed ]>>_dcff ;};_bbff .Data [_cgeb ]=_fecaaf (_bbff .Data [_cgeb ],^(_aeeec ^_bbff .Data [_cgeb ]),_afbd );_cgeb +=_bbff .RowStride ;_aeed +=_ccgb .RowStride ;};};if _fgfb {for _cgag =0;_cgag < _gadf ;_cgag ++{for _faeg =0;_faeg < _agedf ;_faeg ++{_aeeec =_fecaaf (_ccgb .Data [_abaa +_faeg ]<<_ecag ,_ccgb .Data [_abaa +_faeg +1]>>_dcff ,_agba );_bbff .Data [_baab +_faeg ]=^(_aeeec ^_bbff .Data [_baab +_faeg ]);};_baab +=_bbff .RowStride ;_abaa +=_ccgb .RowStride ;};};if _aaade {for _cgag =0;_cgag < _gadf ;_cgag ++{_aeeec =_ccgb .Data [_cebf ]<<_ecag ;if _bcbe {_aeeec =_fecaaf (_aeeec ,_ccgb .Data [_cebf +1]>>_dcff ,_agba );};_bbff .Data [_fccd ]=_fecaaf (_bbff .Data [_fccd ],^(_aeeec ^_bbff .Data [_fccd ]),_dabdf );_fccd +=_bbff .RowStride ;_cebf +=_ccgb .RowStride ;};};default:_fg .Log .Debug ("\u004f\u0070e\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006e\u006f\u0074\u0020\u0070\u0065\u0072\u006d\u0069tt\u0065\u0064",_ffgf );return _c .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064");};return nil ;};func _ggec (_ggdf ...MorphProcess )(_cgfe error ){const _efcb ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _fade ,_bfg int ;for _cega ,_cfdg :=range _ggdf {if _cgfe =_cfdg .verify (_cega ,&_fade ,&_bfg );_cgfe !=nil {return _c .Wrap (_cgfe ,_efcb ,"");};};if _bfg !=0&&_fade !=0{return _c .Error (_efcb ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030");};return nil ;};func TstImageBitmap ()*Bitmap {return _abaab .Copy ()};func (_baba *Bitmap )removeBorderGeneral (_aggf ,_bfdb ,_dfae ,_agde int )(*Bitmap ,error ){const _acd ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _aggf < 0||_bfdb < 0||_dfae < 0||_agde < 0{return nil ,_c .Error (_acd ,"\u006e\u0065g\u0061\u0074\u0069\u0076\u0065\u0020\u0062\u0072\u006f\u0064\u0065\u0072\u0020\u0072\u0065\u006d\u006f\u0076\u0065\u0020\u0076\u0061lu\u0065\u0073");};_bcfg ,_feca :=_baba .Width ,_baba .Height ;_cca :=_bcfg -_aggf -_bfdb ;_gbgda :=_feca -_dfae -_agde ;if _cca <=0{return nil ,_c .Errorf (_acd ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_cca );};if _gbgda <=0{return nil ,_c .Errorf (_acd ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_gbgda );};_fgag :=New (_cca ,_gbgda );_fgag .Color =_baba .Color ;_ccdc :=_fgag .RasterOperation (0,0,_cca ,_gbgda ,PixSrc ,_baba ,_aggf ,_dfae );if _ccdc !=nil {return nil ,_c .Wrap (_ccdc ,_acd ,"");};return _fgag ,nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _eccb (src ,sequence ...);};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _cgaf (d ,s ,hSize ,vSize )};func _fbd (_afe *Bitmap ,_eag *Bitmap ,_ced int )(_dcb error ){const _fbg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _ced {case 2:_dcb =_fgg (_afe ,_eag );case 4:_dcb =_df (_afe ,_eag );case 8:_dcb =_fd (_afe ,_eag );default:return _c .Error (_fbg ,"\u0065\u0078p\u0061\u006e\u0073\u0069o\u006e\u0020f\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020r\u0061\u006e\u0067\u0065");};if _dcb !=nil {_dcb =_c .Wrap (_dcb ,_fbg ,"");};return _dcb ;};func (_gggc *Bitmap )addBorderGeneral (_deaa ,_acb ,_gaff ,_bdfb int ,_cdb int )(*Bitmap ,error ){const _defd ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _deaa < 0||_acb < 0||_gaff < 0||_bdfb < 0{return nil ,_c .Error (_defd ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_fbc ,_aaag :=_gggc .Width ,_gggc .Height ;_egce :=_fbc +_deaa +_acb ;_fefd :=_aaag +_gaff +_bdfb ;_gbge :=New (_egce ,_fefd );_gbge .Color =_gggc .Color ;_dffa :=PixClr ;if _cdb > 0{_dffa =PixSet ;};_afgf :=_gbge .RasterOperation (0,0,_deaa ,_fefd ,_dffa ,nil ,0,0);if _afgf !=nil {return nil ,_c .Wrap (_afgf ,_defd ,"\u006c\u0065\u0066\u0074");};_afgf =_gbge .RasterOperation (_egce -_acb ,0,_acb ,_fefd ,_dffa ,nil ,0,0);if _afgf !=nil {return nil ,_c .Wrap (_afgf ,_defd ,"\u0072\u0069\u0067h\u0074");};_afgf =_gbge .RasterOperation (0,0,_egce ,_gaff ,_dffa ,nil ,0,0);if _afgf !=nil {return nil ,_c .Wrap (_afgf ,_defd ,"\u0074\u006f\u0070");};_afgf =_gbge .RasterOperation (0,_fefd -_bdfb ,_egce ,_bdfb ,_dffa ,nil ,0,0);if _afgf !=nil {return nil ,_c .Wrap (_afgf ,_defd ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_afgf =_gbge .RasterOperation (_deaa ,_gaff ,_fbc ,_aaag ,PixSrc ,_gggc ,0,0);if _afgf !=nil {return nil ,_c .Wrap (_afgf ,_defd ,"\u0063\u006f\u0070\u0079");};return _gbge ,nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _fdcb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_geec ,_ebfd :=p1 .Width ,p1 .Height ;_cedc ,_ggag :=p3 .Width ,p3 .Height ;if _af .Abs (_geec -_cedc )> maxDiffW {return false ,nil ;};if _af .Abs (_ebfd -_ggag )> maxDiffH {return false ,nil ;};_agc :=int (delX +_af .Sign (delX )*0.5);_fad :=int (delY +_af .Sign (delY )*0.5);var _deeg error ;_cdf :=p1 .CreateTemplate ();if _deeg =_cdf .RasterOperation (0,0,_geec ,_ebfd ,PixSrc ,p1 ,0,0);_deeg !=nil {return false ,_c .Wrap (_deeg ,_fdcb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _deeg =_cdf .RasterOperation (_agc ,_fad ,_geec ,_ebfd ,PixNotSrcAndDst ,p4 ,0,0);_deeg !=nil {return false ,_c .Wrap (_deeg ,_fdcb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _cdf .Zero (){return false ,nil ;};if _deeg =_cdf .RasterOperation (_agc ,_fad ,_cedc ,_ggag ,PixSrc ,p3 ,0,0);_deeg !=nil {return false ,_c .Wrap (_deeg ,_fdcb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _deeg =_cdf .RasterOperation (0,0,_cedc ,_ggag ,PixNotSrcAndDst ,p2 ,0,0);_deeg !=nil {return false ,_c .Wrap (_deeg ,_fdcb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _cdf .Zero (),nil ;};func _bbbca (_feee *Bitmap ,_eagf int )(*Bitmap ,error ){const _cacb ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _feee ==nil {return nil ,_c .Error (_cacb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _eagf <=0{return nil ,_c .Error (_cacb ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _eagf ==1{_adfbd ,_ggcc :=_ecdb (nil ,_feee );if _ggcc !=nil {return nil ,_c .Wrap (_ggcc ,_cacb ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _adfbd ,nil ;};_addee ,_fdgc :=_acc (_feee ,_eagf ,_eagf );if _fdgc !=nil {return nil ,_c .Wrap (_fdgc ,_cacb ,"");};return _addee ,nil ;};const _ggacf =5000;func _afbc (_acab ,_daea int )int {if _acab > _daea {return _acab ;};return _daea ;};func (_abecc *Bitmaps )String ()string {_egdd :=_fc .Builder {};for _ ,_cadc :=range _abecc .Values {_egdd .WriteString (_cadc .String ());_egdd .WriteRune ('\n');};return _egdd .String ();};func _gbcf (_dbcgg ,_cbda ,_cebc *Bitmap ,_eggg int )(*Bitmap ,error ){const _egff ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _cbda ==nil {return nil ,_c .Error (_egff ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _cebc ==nil {return nil ,_c .Error (_egff ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _eggg !=4&&_eggg !=8{return nil ,_c .Error (_egff ,"\u0063\u006f\u006en\u0065\u0063\u0074\u0069v\u0069\u0074\u0079\u0020\u006e\u006f\u0074 \u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0034\u002c\u0038\u007d");};var _cceg error ;_dbcgg ,_cceg =_ecdb (_dbcgg ,_cbda );if _cceg !=nil {return nil ,_c .Wrap (_cceg ,_egff ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_cff :=_cbda .createTemplate ();_cebc .setPadBits (0);for _cdbaf :=0;_cdbaf < _ggacf ;_cdbaf ++{_cff ,_cceg =_ecdb (_cff ,_dbcgg );if _cceg !=nil {return nil ,_c .Wrapf (_cceg ,_egff ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_cdbaf );};if _cceg =_ffbc (_dbcgg ,_cebc ,_eggg );_cceg !=nil {return nil ,_c .Wrapf (_cceg ,_egff ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_cdbaf );};if _cff .Equals (_dbcgg ){break ;};};return _dbcgg ,nil ;};func _gfa (_agaa ,_dabc *Bitmap ,_bdfg *Selection )(*Bitmap ,error ){const _cbdb ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _befb error ;if _agaa ,_befb =_cgadc (_agaa ,_dabc ,_bdfg );_befb !=nil {return nil ,_befb ;};_ecgag ,_befb :=_cfge (nil ,_dabc ,_bdfg );if _befb !=nil {return nil ,_c .Wrap (_befb ,_cbdb ,"");};if _ ,_befb =_gfbc (_agaa ,_ecgag ,_bdfg );_befb !=nil {return nil ,_c .Wrap (_befb ,_cbdb ,"");};return _agaa ,nil ;};func (_ggca *byWidth )Len ()int {return len (_ggca .Values )};func (_gcfa Points )XSorter ()func (_bgfcg ,_bedg int )bool {return func (_bfed ,_agcc int )bool {return _gcfa [_bfed ].X < _gcfa [_agcc ].X };};func (_eceba *byWidth )Less (i ,j int )bool {return _eceba .Values [i ].Width < _eceba .Values [j ].Width };func TstTSymbol (t *_f .T ,scale ...int )*Bitmap {_ecbe ,_cbfd :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_d .NoError (t ,_cbfd );return TstGetScaledSymbol (t ,_ecbe ,scale ...);};func _bcdc (_facb ,_agdc int )*Bitmap {return &Bitmap {Width :_facb ,Height :_agdc ,RowStride :(_facb +7)>>3};};var _bd [256]uint8 ;func (_cbgbc CombinationOperator )String ()string {var _bca string ;switch _cbgbc {case CmbOpOr :_bca ="\u004f\u0052";case CmbOpAnd :_bca ="\u0041\u004e\u0044";case CmbOpXor :_bca ="\u0058\u004f\u0052";case CmbOpXNor :_bca ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_bca ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_bca ="\u004e\u004f\u0054";};return _bca ;};var (_defc =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_edebb =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);const (PixSrc RasterOperator =0xc;PixDst RasterOperator =0xa;PixNotSrc RasterOperator =0x3;PixNotDst RasterOperator =0x5;PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;PixSrcAndDst RasterOperator =0x8;PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;PixNotSrcAndDst RasterOperator =0x2;PixSrcOrNotDst RasterOperator =0xd;PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;PixMask =PixSrcAndDst ;);func _eccb (_aggef *Bitmap ,_decb ...MorphProcess )(_faea *Bitmap ,_ceaa error ){const _dfbcg ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _aggef ==nil {return nil ,_c .Error (_dfbcg ,"\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065 \u0073\u006f\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if len (_decb )==0{return nil ,_c .Error (_dfbcg ,"m\u006f\u0072\u0070\u0068\u0053\u0065q\u0075\u0065\u006e\u0063\u0065\u002c \u0073\u0065\u0071\u0075\u0065\u006e\u0063e\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};if _ceaa =_ggec (_decb ...);_ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"");};var _gdeg ,_bede ,_cbcc int ;_faea =_aggef .Copy ();for _ ,_eddb :=range _decb {switch _eddb .Operation {case MopDilation :_gdeg ,_bede =_eddb .getWidthHeight ();_faea ,_ceaa =DilateBrick (nil ,_faea ,_gdeg ,_bede );if _ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"");};case MopErosion :_gdeg ,_bede =_eddb .getWidthHeight ();_faea ,_ceaa =_edfb (nil ,_faea ,_gdeg ,_bede );if _ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"");};case MopOpening :_gdeg ,_bede =_eddb .getWidthHeight ();_faea ,_ceaa =_fbga (nil ,_faea ,_gdeg ,_bede );if _ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"");};case MopClosing :_gdeg ,_bede =_eddb .getWidthHeight ();_faea ,_ceaa =_gcea (nil ,_faea ,_gdeg ,_bede );if _ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"");};case MopRankBinaryReduction :_faea ,_ceaa =_ag (_faea ,_eddb .Arguments ...);if _ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"");};case MopReplicativeBinaryExpansion :_faea ,_ceaa =_bbbca (_faea ,_eddb .Arguments [0]);if _ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"");};case MopAddBorder :_cbcc =_eddb .Arguments [0];_faea ,_ceaa =_faea .AddBorder (_cbcc ,0);if _ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"");};default:return nil ,_c .Error (_dfbcg ,"i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006d\u006fr\u0070\u0068\u004f\u0070\u0065\u0072\u0061ti\u006f\u006e\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0074\u006f t\u0068\u0065 \u0073\u0065\u0071\u0075\u0065\u006e\u0063\u0065");};};if _cbcc > 0{_faea ,_ceaa =_faea .RemoveBorder (_cbcc );if _ceaa !=nil {return nil ,_c .Wrap (_ceaa ,_dfbcg ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _faea ,nil ;};const (Vanilla Color =iota ;Chocolate ;);type SelectionValue int ;func (_afca *Bitmap )connComponentsBB (_acfe int )(_dcacd *Boxes ,_dadc error ){const _cdab ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _acfe !=4&&_acfe !=8{return nil ,_c .Error (_cdab ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _afca .Zero (){return &Boxes {},nil ;};_afca .setPadBits (0);_gdag ,_dadc :=_ecdb (nil ,_afca );if _dadc !=nil {return nil ,_c .Wrap (_dadc ,_cdab ,"\u0062\u006d\u0031");};_aaea :=&_af .Stack {};_aaea .Aux =&_af .Stack {};_dcacd =&Boxes {};var (_cbdgd ,_acdg int ;_fecaa _cc .Point ;_eaf bool ;_feda *_cc .Rectangle ;);for {if _fecaa ,_eaf ,_dadc =_gdag .nextOnPixel (_acdg ,_cbdgd );_dadc !=nil {return nil ,_c .Wrap (_dadc ,_cdab ,"");};if !_eaf {break ;};if _feda ,_dadc =_fcgcf (_gdag ,_aaea ,_fecaa .X ,_fecaa .Y ,_acfe );_dadc !=nil {return nil ,_c .Wrap (_dadc ,_cdab ,"");};if _dadc =_dcacd .Add (_feda );_dadc !=nil {return nil ,_c .Wrap (_dadc ,_cdab ,"");};_acdg =_fecaa .X ;_cbdgd =_fecaa .Y ;};return _dcacd ,nil ;};func _fcgcf (_febb *Bitmap ,_gbee *_af .Stack ,_dbgcd ,_dcggg ,_badd int )(_dfcf *_cc .Rectangle ,_adaeg error ){const _bbea ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _febb ==nil {return nil ,_c .Error (_bbea ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _gbee ==nil {return nil ,_c .Error (_bbea ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _badd {case 4:if _dfcf ,_adaeg =_fcce (_febb ,_gbee ,_dbgcd ,_dcggg );_adaeg !=nil {return nil ,_c .Wrap (_adaeg ,_bbea ,"");};return _dfcf ,nil ;case 8:if _dfcf ,_adaeg =_eefeb (_febb ,_gbee ,_dbgcd ,_dcggg );_adaeg !=nil {return nil ,_c .Wrap (_adaeg ,_bbea ,"");};return _dfcf ,nil ;default:return nil ,_c .Errorf (_bbea ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u0069\u0073 \u006eo\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038\u003a\u0020\u0027\u0025\u0064\u0027",_badd );};};func (_bcf *Bitmap )SetPadBits (value int ){_bcf .setPadBits (value )};func (_cagg *Bitmaps )selectByIndicator (_ebbag *_af .NumSlice )(_dcdc *Bitmaps ,_ceec error ){const _ddge ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _cagg ==nil {return nil ,_c .Error (_ddge ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _ebbag ==nil {return nil ,_c .Error (_ddge ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_cagg .Values )==0{return _cagg ,nil ;};if len (*_ebbag )!=len (_cagg .Values ){return nil ,_c .Errorf (_ddge ,"\u006ea\u0020\u006ce\u006e\u0067\u0074\u0068:\u0020\u0025\u0064,\u0020\u0069\u0073\u0020\u0064\u0069\u0066\u0066\u0065re\u006e\u0074\u0020t\u0068\u0061n\u0020\u0062\u0069\u0074\u006d\u0061p\u0073\u003a \u0025\u0064",len (*_ebbag ),len (_cagg .Values ));};var _afbdb ,_eeccc ,_bcaa int ;for _eeccc =0;_eeccc < len (*_ebbag );_eeccc ++{if _afbdb ,_ceec =_ebbag .GetInt (_eeccc );_ceec !=nil {return nil ,_c .Wrap (_ceec ,_ddge ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _afbdb ==1{_bcaa ++;};};if _bcaa ==len (_cagg .Values ){return _cagg ,nil ;};_dcdc =&Bitmaps {};_bfac :=len (_cagg .Values )==len (_cagg .Boxes );for _eeccc =0;_eeccc < len (*_ebbag );_eeccc ++{if _afbdb =int ((*_ebbag )[_eeccc ]);_afbdb ==0{continue ;};_dcdc .Values =append (_dcdc .Values ,_cagg .Values [_eeccc ]);if _bfac {_dcdc .Boxes =append (_dcdc .Boxes ,_cagg .Boxes [_eeccc ]);};};return _dcdc ,nil ;};func (_eab *Bitmap )Copy ()*Bitmap {_ebe :=make ([]byte ,len (_eab .Data ));copy (_ebe ,_eab .Data );return &Bitmap {Width :_eab .Width ,Height :_eab .Height ,RowStride :_eab .RowStride ,Data :_ebe ,Color :_eab .Color ,Text :_eab .Text ,BitmapNumber :_eab .BitmapNumber ,Special :_eab .Special };};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _cgb ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_fda :=_bcdc (width ,height );_fda .Data =data ;if _ggg :=((width *height )+7)>>3;len (data )< _ggg {return nil ,_c .Errorf (_cgb ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064a\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a\u0020\u0027\u0025\u0064\u0027\u002e\u0020\u0054\u0068\u0065\u0020\u0064\u0061t\u0061\u0020s\u0068\u006fu\u006c\u0064\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0061\u0074 l\u0065\u0061\u0073\u0074\u003a\u0020\u0027\u0025\u0064'\u0020\u0062\u0079\u0074\u0065\u0073",len (data ),_ggg );};if _abf :=_fda .addPadBits ();_abf !=nil {return nil ,_c .Wrap (_abf ,_cgb ,"");};return _fda ,nil ;};type byHeight Bitmaps ;func TstFrameBitmap ()*Bitmap {return _fbbb .Copy ()};func (_bfdfc *ClassedPoints )Less (i ,j int )bool {return _bfdfc ._ebdf (i ,j )};func (_adfb *Bitmap )setPadBits (_gefd int ){_debde :=8-_adfb .Width %8;if _debde ==8{return ;};_bed :=_adfb .Width /8;_fcgdg :=_edebb [_debde ];if _gefd ==0{_fcgdg ^=_fcgdg ;};var _bac int ;for _eef :=0;_eef < _adfb .Height ;_eef ++{_bac =_eef *_adfb .RowStride +_bed ;if _gefd ==0{_adfb .Data [_bac ]&=_fcgdg ;}else {_adfb .Data [_bac ]|=_fcgdg ;};};};func (_fbae *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_bebe bool ,_dgga error ){const _bcgc ="\u0042i\u0074\u006d\u0061\u0070\u002e\u0054\u0068\u0072\u0065\u0073\u0068o\u006c\u0064\u0050\u0069\u0078\u0065\u006c\u0053\u0075\u006d";if tab8 ==nil {tab8 =_feed ();};_abfg :=_fbae .Width >>3;_ffac :=_fbae .Width &7;_egd :=byte (0xff<<uint (8-_ffac ));var (_cbc ,_adee ,_aga ,_dbf int ;_ddef byte ;);for _cbc =0;_cbc < _fbae .Height ;_cbc ++{_aga =_fbae .RowStride *_cbc ;for _adee =0;_adee < _abfg ;_adee ++{_ddef ,_dgga =_fbae .GetByte (_aga +_adee );if _dgga !=nil {return false ,_c .Wrap (_dgga ,_bcgc ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_dbf +=tab8 [_ddef ];};if _ffac !=0{_ddef ,_dgga =_fbae .GetByte (_aga +_adee );if _dgga !=nil {return false ,_c .Wrap (_dgga ,_bcgc ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_ddef &=_egd ;_dbf +=tab8 [_ddef ];};if _dbf > thresh {return true ,nil ;};};return _bebe ,nil ;};func (_aegb *Bitmap )clipRectangle (_abb ,_fgbg *_cc .Rectangle )(_eed *Bitmap ,_ffc error ){const _fbcg ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _abb ==nil {return nil ,_c .Error (_fbcg ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_aea ,_fagg :=_aegb .Width ,_aegb .Height ;_ceae ,_ffc :=ClipBoxToRectangle (_abb ,_aea ,_fagg );if _ffc !=nil {_fg .Log .Warning ("\u0027\u0062ox\u0027\u0020\u0064o\u0065\u0073\u006e\u0027t o\u0076er\u006c\u0061\u0070\u0020\u0062\u0069\u0074ma\u0070\u0020\u0027\u0062\u0027\u003a\u0020%\u0076",_ffc );return nil ,nil ;};_cfe ,_bad :=_ceae .Min .X ,_ceae .Min .Y ;_daa ,_cab :=_ceae .Max .X -_ceae .Min .X ,_ceae .Max .Y -_ceae .Min .Y ;_eed =New (_daa ,_cab );_eed .Text =_aegb .Text ;if _ffc =_eed .RasterOperation (0,0,_daa ,_cab ,PixSrc ,_aegb ,_cfe ,_bad );_ffc !=nil {return nil ,_c .Wrap (_ffc ,_fbcg ,"");};if _fgbg !=nil {*_fgbg =*_ceae ;};return _eed ,nil ;};func (_cgbg *Bitmap )connComponentsBitmapsBB (_cadad *Bitmaps ,_bfe int )(_gcd *Boxes ,_gaec error ){const _gdga ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _bfe !=4&&_bfe !=8{return nil ,_c .Error (_gdga ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _cadad ==nil {return nil ,_c .Error (_gdga ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_cadad .Values )> 0{return nil ,_c .Error (_gdga ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u006fn\u002d\u0065\u006d\u0070\u0074\u0079\u0020\u0042\u0069\u0074m\u0061\u0070\u0073");};if _cgbg .Zero (){return &Boxes {},nil ;};var (_gabe ,_cfb ,_gfd ,_ggga *Bitmap ;);_cgbg .setPadBits (0);if _gabe ,_gaec =_ecdb (nil ,_cgbg );_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"\u0062\u006d\u0031");};if _cfb ,_gaec =_ecdb (nil ,_cgbg );_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"\u0062\u006d\u0032");};_ddg :=&_af .Stack {};_ddg .Aux =&_af .Stack {};_gcd =&Boxes {};var (_cddd ,_gfb int ;_cadg _cc .Point ;_bafec bool ;_gac *_cc .Rectangle ;);for {if _cadg ,_bafec ,_gaec =_gabe .nextOnPixel (_cddd ,_gfb );_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"");};if !_bafec {break ;};if _gac ,_gaec =_fcgcf (_gabe ,_ddg ,_cadg .X ,_cadg .Y ,_bfe );_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"");};if _gaec =_gcd .Add (_gac );_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"");};if _gfd ,_gaec =_gabe .clipRectangle (_gac ,nil );_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"\u0062\u006d\u0033");};if _ggga ,_gaec =_cfb .clipRectangle (_gac ,nil );_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"\u0062\u006d\u0034");};if _ ,_gaec =_fgc (_gfd ,_gfd ,_ggga );_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _gaec =_cfb .RasterOperation (_gac .Min .X ,_gac .Min .Y ,_gac .Dx (),_gac .Dy (),PixSrcXorDst ,_gfd ,0,0);_gaec !=nil {return nil ,_c .Wrap (_gaec ,_gdga ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_cadad .AddBitmap (_gfd );_cddd =_cadg .X ;_gfb =_cadg .Y ;};_cadad .Boxes =*_gcd ;return _gcd ,nil ;};type Point struct{X ,Y float32 ;};func (_fffa Points )Size ()int {return len (_fffa )};func _cbee (_edbg ,_bbd *Bitmap ,_debba ,_gaed ,_adde ,_bbbb ,_dfe ,_abbb ,_ffbg ,_bbgf int ,_bcda CombinationOperator )error {var _ecga int ;_cba :=func (){_ecga ++;_adde +=_bbd .RowStride ;_bbbb +=_edbg .RowStride ;_dfe +=_edbg .RowStride };for _ecga =_debba ;_ecga < _gaed ;_cba (){var _afcd uint16 ;_dcg :=_adde ;for _ffd :=_bbbb ;_ffd <=_dfe ;_ffd ++{_dddd ,_ebbg :=_bbd .GetByte (_dcg );if _ebbg !=nil {return _ebbg ;};_ebbd ,_ebbg :=_edbg .GetByte (_ffd );if _ebbg !=nil {return _ebbg ;};_afcd =(_afcd |uint16 (_ebbd ))<<uint (_bbgf );_ebbd =byte (_afcd >>8);if _ffd ==_dfe {_ebbd =_bdaa (uint (_abbb ),_ebbd );};if _ebbg =_bbd .SetByte (_dcg ,_eceb (_dddd ,_ebbd ,_bcda ));_ebbg !=nil {return _ebbg ;};_dcg ++;_afcd <<=uint (_ffbg );};};return nil ;};type MorphOperation int ;const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_fdda *Bitmap )nextOnPixelLow (_cdc ,_dbcf ,_edff ,_fccg ,_edea int )(_dffe _cc .Point ,_cfd bool ,_bdb error ){const _beee ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_debe int ;_fgd byte ;);_gag :=_edea *_edff ;_bbgc :=_gag +(_fccg /8);if _fgd ,_bdb =_fdda .GetByte (_bbgc );_bdb !=nil {return _dffe ,false ,_c .Wrap (_bdb ,_beee ,"\u0078\u0053\u0074\u0061\u0072\u0074\u0020\u0061\u006e\u0064 \u0079\u0053\u0074\u0061\u0072\u0074\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065");};if _fgd !=0{_gbged :=_fccg -(_fccg %8)+7;for _debe =_fccg ;_debe <=_gbged &&_debe < _cdc ;_debe ++{if _fdda .GetPixel (_debe ,_edea ){_dffe .X =_debe ;_dffe .Y =_edea ;return _dffe ,true ,nil ;};};};_eeab :=(_fccg /8)+1;_debe =8*_eeab ;var _ggcb int ;for _bbgc =_gag +_eeab ;_debe < _cdc ;_bbgc ,_debe =_bbgc +1,_debe +8{if _fgd ,_bdb =_fdda .GetByte (_bbgc );_bdb !=nil {return _dffe ,false ,_c .Wrap (_bdb ,_beee ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _fgd ==0{continue ;};for _ggcb =0;_ggcb < 8&&_debe < _cdc ;_ggcb ,_debe =_ggcb +1,_debe +1{if _fdda .GetPixel (_debe ,_edea ){_dffe .X =_debe ;_dffe .Y =_edea ;return _dffe ,true ,nil ;};};};for _bcde :=_edea +1;_bcde < _dbcf ;_bcde ++{_gag =_bcde *_edff ;for _bbgc ,_debe =_gag ,0;_debe < _cdc ;_bbgc ,_debe =_bbgc +1,_debe +8{if _fgd ,_bdb =_fdda .GetByte (_bbgc );_bdb !=nil {return _dffe ,false ,_c .Wrap (_bdb ,_beee ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _fgd ==0{continue ;};for _ggcb =0;_ggcb < 8&&_debe < _cdc ;_ggcb ,_debe =_ggcb +1,_debe +1{if _fdda .GetPixel (_debe ,_bcde ){_dffe .X =_debe ;_dffe .Y =_bcde ;return _dffe ,true ,nil ;};};};};return _dffe ,false ,nil ;};func (_feaa *Bitmaps )GetBox (i int )(*_cc .Rectangle ,error ){const _gdbe ="\u0047\u0065\u0074\u0042\u006f\u0078";if _feaa ==nil {return nil ,_c .Error (_gdbe ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_feaa .Boxes )-1{return nil ,_c .Errorf (_gdbe ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _feaa .Boxes [i ],nil ;};func (_eegf *byHeight )Len ()int {return len (_eegf .Values )};func _df (_ae ,_fcg *Bitmap )(_aeg error ){const _ab ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_dbg :=_fcg .RowStride ;_dgg :=_ae .RowStride ;_gg :=_fcg .RowStride *4-_ae .RowStride ;var (_da ,_gb byte ;_b uint32 ;_dec ,_gbg ,_dgf ,_ee ,_aa ,_dab ,_fegb int ;);for _dgf =0;_dgf < _fcg .Height ;_dgf ++{_dec =_dgf *_dbg ;_gbg =4*_dgf *_dgg ;for _ee =0;_ee < _dbg ;_ee ++{_da =_fcg .Data [_dec +_ee ];_b =_cadgg [_da ];_dab =_gbg +_ee *4;if _gg !=0&&(_ee +1)*4> _ae .RowStride {for _aa =_gg ;_aa > 0;_aa --{_gb =byte ((_b >>uint (_aa *8))&0xff);_fegb =_dab +(_gg -_aa );if _aeg =_ae .SetByte (_fegb ,_gb );_aeg !=nil {return _c .Wrapf (_aeg ,_ab ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_aa );};};}else if _aeg =_ae .setFourBytes (_dab ,_b );_aeg !=nil {return _c .Wrap (_aeg ,_ab ,"");};if _aeg =_ae .setFourBytes (_gbg +_ee *4,_cadgg [_fcg .Data [_dec +_ee ]]);_aeg !=nil {return _c .Wrap (_aeg ,_ab ,"");};};for _aa =1;_aa < 4;_aa ++{for _ee =0;_ee < _dgg ;_ee ++{if _aeg =_ae .SetByte (_gbg +_aa *_dgg +_ee ,_ae .Data [_gbg +_ee ]);_aeg !=nil {return _c .Wrapf (_aeg ,_ab ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0071\u0075\u0061\u0064\u0072\u0061\u0062l\u0065\u0027\u0020\u006c\u0069\u006ee\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0079\u0074\u0065\u003a \u0027\u0025\u0064\u0027",_aa ,_ee );};};};};return nil ;};func (_edcfc *ClassedPoints )SortByY (){_edcfc ._ebdf =_edcfc .ySortFunction ();_g .Sort (_edcfc )};func (_dfb *Bitmap )setAll ()error {_bbbd :=_dggge (_dfb ,0,0,_dfb .Width ,_dfb .Height ,PixSet ,nil ,0,0);if _bbbd !=nil {return _c .Wrap (_bbbd ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};type Boxes []*_cc .Rectangle ;func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _dedc ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_bda :=_bcdc (width ,height );_bda .Data =data ;if len (data )< height *_bda .RowStride {return nil ,_c .Errorf (_dedc ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064\u0061\u0074\u0061\u0020l\u0065\u006e\u0067\u0074\u0068\u003a \u0025\u0064\u0020\u002d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062e\u003a\u0020\u0025\u0064",len (data ),height *_bda .RowStride );};return _bda ,nil ;};type byWidth Bitmaps ;func (_eagg *Bitmap )centroid (_fgadg ,_gadg []int )(Point ,error ){_adeb :=Point {};_eagg .setPadBits (0);if len (_fgadg )==0{_fgadg =_fffb ();};if len (_gadg )==0{_gadg =_feed ();};var _abfb ,_gcf ,_fadf ,_bbbg ,_ddgc ,_afbg int ;var _gada byte ;for _ddgc =0;_ddgc < _eagg .Height ;_ddgc ++{_bgg :=_eagg .RowStride *_ddgc ;_bbbg =0;for _afbg =0;_afbg < _eagg .RowStride ;_afbg ++{_gada =_eagg .Data [_bgg +_afbg ];if _gada !=0{_bbbg +=_gadg [_gada ];_abfb +=_fgadg [_gada ]+_afbg *8*_gadg [_gada ];};};_fadf +=_bbbg ;_gcf +=_bbbg *_ddgc ;};if _fadf !=0{_adeb .X =float32 (_abfb )/float32 (_fadf );_adeb .Y =float32 (_gcf )/float32 (_fadf );};return _adeb ,nil ;};func _edfb (_cfee ,_eagc *Bitmap ,_degc ,_aefd int )(*Bitmap ,error ){const _ecfc ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _eagc ==nil {return nil ,_c .Error (_ecfc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _degc < 1||_aefd < 1{return nil ,_c .Error (_ecfc ,"\u0068\u0073\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069\u007a\u0065\u0020\u0061\u0072e\u0020\u006e\u006f\u0074\u0020\u0067\u0072e\u0061\u0074\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u006fr\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");};if _degc ==1&&_aefd ==1{_bggd ,_bebf :=_ecdb (_cfee ,_eagc );if _bebf !=nil {return nil ,_c .Wrap (_bebf ,_ecfc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _bggd ,nil ;};if _degc ==1||_aefd ==1{_adab :=SelCreateBrick (_aefd ,_degc ,_aefd /2,_degc /2,SelHit );_feba ,_ebdb :=_gfbc (_cfee ,_eagc ,_adab );if _ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_ecfc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _feba ,nil ;};_fcgg :=SelCreateBrick (1,_degc ,0,_degc /2,SelHit );_bbfc :=SelCreateBrick (_aefd ,1,_aefd /2,0,SelHit );_eadc ,_fdfe :=_gfbc (nil ,_eagc ,_fcgg );if _fdfe !=nil {return nil ,_c .Wrap (_fdfe ,_ecfc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_cfee ,_fdfe =_gfbc (_cfee ,_eadc ,_bbfc );if _fdfe !=nil {return nil ,_c .Wrap (_fdfe ,_ecfc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _cfee ,nil ;};func _adecd (_eggbe *Bitmap ,_dcce ,_fgea int ,_bebgf ,_gdfb int ,_dcee RasterOperator ){var (_ecagd int ;_cgef byte ;_fgbe ,_fbbc int ;_bgeb int ;);_dgbbe :=_bebgf >>3;_gddbg :=_bebgf &7;if _gddbg > 0{_cgef =_defc [_gddbg ];};_ecagd =_eggbe .RowStride *_fgea +(_dcce >>3);switch _dcee {case PixClr :for _fgbe =0;_fgbe < _gdfb ;_fgbe ++{_bgeb =_ecagd +_fgbe *_eggbe .RowStride ;for _fbbc =0;_fbbc < _dgbbe ;_fbbc ++{_eggbe .Data [_bgeb ]=0x0;_bgeb ++;};if _gddbg > 0{_eggbe .Data [_bgeb ]=_fecaaf (_eggbe .Data [_bgeb ],0x0,_cgef );};};case PixSet :for _fgbe =0;_fgbe < _gdfb ;_fgbe ++{_bgeb =_ecagd +_fgbe *_eggbe .RowStride ;for _fbbc =0;_fbbc < _dgbbe ;_fbbc ++{_eggbe .Data [_bgeb ]=0xff;_bgeb ++;};if _gddbg > 0{_eggbe .Data [_bgeb ]=_fecaaf (_eggbe .Data [_bgeb ],0xff,_cgef );};};case PixNotDst :for _fgbe =0;_fgbe < _gdfb ;_fgbe ++{_bgeb =_ecagd +_fgbe *_eggbe .RowStride ;for _fbbc =0;_fbbc < _dgbbe ;_fbbc ++{_eggbe .Data [_bgeb ]=^_eggbe .Data [_bgeb ];_bgeb ++;};if _gddbg > 0{_eggbe .Data [_bgeb ]=_fecaaf (_eggbe .Data [_bgeb ],^_eggbe .Data [_bgeb ],_cgef );};};};};func (_cgbb MorphProcess )getWidthHeight ()(_bfee ,_eaag int ){return _cgbb .Arguments [0],_cgbb .Arguments [1];};func (_acce *byWidth )Swap (i ,j int ){_acce .Values [i ],_acce .Values [j ]=_acce .Values [j ],_acce .Values [i ];if _acce .Boxes !=nil {_acce .Boxes [i ],_acce .Boxes [j ]=_acce .Boxes [j ],_acce .Boxes [i ];};};type Getter interface{GetBitmap ()*Bitmap ;};func (_ebba *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _ebba .removeBorderGeneral (left ,right ,top ,bot );};func (_edb *Bitmap )SetDefaultPixel (){for _bgb :=range _edb .Data {_edb .Data [_bgb ]=byte (0xff);};};func TstISymbol (t *_f .T ,scale ...int )*Bitmap {_ggbgd ,_cgfae :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_d .NoError (t ,_cgfae );return TstGetScaledSymbol (t ,_ggbgd ,scale ...);};func (_feea *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _eecf ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _feea ==nil {return nil ,_c .Error (_eecf ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_feea .Values )-1{return nil ,_c .Errorf (_eecf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _feea .Values [i ],nil ;};func TstDSymbol (t *_f .T ,scale ...int )*Bitmap {_edabg ,_eecb :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_d .NoError (t ,_eecb );return TstGetScaledSymbol (t ,_edabg ,scale ...);};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_gffa bool ,_ggbg error ){const _bbdd ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_cfec ,_gded :=p1 .Width ,p1 .Height ;_cfda ,_cde :=p3 .Width ,p3 .Height ;if _af .Abs (_cfec -_cfda )> maxDiffW {return false ,nil ;};if _af .Abs (_gded -_cde )> maxDiffH {return false ,nil ;};_ccbd :=int (float32 (area1 )*(1.0-rank )+0.5);_cfc :=int (float32 (area3 )*(1.0-rank )+0.5);var _ggagd ,_baed int ;if delX >=0{_ggagd =int (delX +0.5);}else {_ggagd =int (delX -0.5);};if delY >=0{_baed =int (delY +0.5);}else {_baed =int (delY -0.5);};_afdc :=p1 .CreateTemplate ();if _ggbg =_afdc .RasterOperation (0,0,_cfec ,_gded ,PixSrc ,p1 ,0,0);_ggbg !=nil {return false ,_c .Wrap (_ggbg ,_bbdd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ggbg =_afdc .RasterOperation (_ggagd ,_baed ,_cfec ,_gded ,PixNotSrcAndDst ,p4 ,0,0);_ggbg !=nil {return false ,_c .Wrap (_ggbg ,_bbdd ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_gffa ,_ggbg =_afdc .ThresholdPixelSum (_ccbd ,tab8 );if _ggbg !=nil {return false ,_c .Wrap (_ggbg ,_bbdd ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _gffa {return false ,nil ;};if _ggbg =_afdc .RasterOperation (_ggagd ,_baed ,_cfda ,_cde ,PixSrc ,p3 ,0,0);_ggbg !=nil {return false ,_c .Wrap (_ggbg ,_bbdd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ggbg =_afdc .RasterOperation (0,0,_cfda ,_cde ,PixNotSrcAndDst ,p2 ,0,0);_ggbg !=nil {return false ,_c .Wrap (_ggbg ,_bbdd ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_gffa ,_ggbg =_afdc .ThresholdPixelSum (_cfc ,tab8 );if _ggbg !=nil {return false ,_c .Wrap (_ggbg ,_bbdd ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_gffa ,nil ;};func (_def *Bitmap )And (s *Bitmap )(_gcae *Bitmap ,_aaa error ){const _efe ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _def ==nil {return nil ,_c .Error (_efe ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_c .Error (_efe ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_def .SizesEqual (s ){_fg .Log .Debug ("\u0025\u0073\u0020-\u0020\u0042\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0073\u0069\u007a\u0065 \u0077\u0069\u0074\u0068\u0020\u0027\u0062\u0027",_efe );};if _gcae ,_aaa =_ecdb (_gcae ,_def );_aaa !=nil {return nil ,_c .Wrap (_aaa ,_efe ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _aaa =_gcae .RasterOperation (0,0,_gcae .Width ,_gcae .Height ,PixSrcAndDst ,s ,0,0);_aaa !=nil {return nil ,_c .Wrap (_aaa ,_efe ,"");};return _gcae ,nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_cfcb :=make ([]Point ,len (bms ));_aedd :=_fffb ();_cae :=_feed ();var _cagc error ;for _ccdb ,_eeff :=range bms {_cfcb [_ccdb ],_cagc =_eeff .centroid (_aedd ,_cae );if _cagc !=nil {return nil ,_cagc ;};};_effa :=Points (_cfcb );return &_effa ,nil ;};type LocationFilter int ;func _eefeb (_ffdbb *Bitmap ,_geabc *_af .Stack ,_gege ,_fgbb int )(_dgde *_cc .Rectangle ,_ddcd error ){const _gefgd ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _ffdbb ==nil {return nil ,_c .Error (_gefgd ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _geabc ==nil {return nil ,_c .Error (_gefgd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_ceeg ,_ecbd :=_ffdbb .Width ,_ffdbb .Height ;_dbga :=_ceeg -1;_fafg :=_ecbd -1;if _gege < 0||_gege > _dbga ||_fgbb < 0||_fgbb > _fafg ||!_ffdbb .GetPixel (_gege ,_fgbb ){return nil ,nil ;};_fdfd :=_cc .Rect (100000,100000,0,0);if _ddcd =_gfcgc (_geabc ,_gege ,_gege ,_fgbb ,1,_fafg ,&_fdfd );_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ddcd =_gfcgc (_geabc ,_gege ,_gege ,_fgbb +1,-1,_fafg ,&_fdfd );_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_fdfd .Min .X ,_fdfd .Max .X =_gege ,_gege ;_fdfd .Min .Y ,_fdfd .Max .Y =_fgbb ,_fgbb ;var (_eeee *fillSegment ;_eged int ;);for _geabc .Len ()> 0{if _eeee ,_ddcd =_gfdef (_geabc );_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"");};_fgbb =_eeee ._edac ;for _gege =_eeee ._gedg -1;_gege >=0&&_ffdbb .GetPixel (_gege ,_fgbb );_gege --{if _ddcd =_ffdbb .SetPixel (_gege ,_fgbb ,0);_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _gege >=_eeee ._gedg -1{for {for _gege ++;_gege <=_eeee ._adaba +1&&_gege <=_dbga &&!_ffdbb .GetPixel (_gege ,_fgbb );_gege ++{};_eged =_gege ;if !(_gege <=_eeee ._adaba +1&&_gege <=_dbga ){break ;};for ;_gege <=_dbga &&_ffdbb .GetPixel (_gege ,_fgbb );_gege ++{if _ddcd =_ffdbb .SetPixel (_gege ,_fgbb ,0);_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ddcd =_gfcgc (_geabc ,_eged ,_gege -1,_eeee ._edac ,_eeee ._gdagbd ,_fafg ,&_fdfd );_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gege > _eeee ._adaba {if _ddcd =_gfcgc (_geabc ,_eeee ._adaba +1,_gege -1,_eeee ._edac ,-_eeee ._gdagbd ,_fafg ,&_fdfd );_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_eged =_gege +1;if _eged < _eeee ._gedg {if _ddcd =_gfcgc (_geabc ,_eged ,_eeee ._gedg -1,_eeee ._edac ,-_eeee ._gdagbd ,_fafg ,&_fdfd );_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_gege =_eeee ._gedg ;for {for ;_gege <=_dbga &&_ffdbb .GetPixel (_gege ,_fgbb );_gege ++{if _ddcd =_ffdbb .SetPixel (_gege ,_fgbb ,0);_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ddcd =_gfcgc (_geabc ,_eged ,_gege -1,_eeee ._edac ,_eeee ._gdagbd ,_fafg ,&_fdfd );_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gege > _eeee ._adaba {if _ddcd =_gfcgc (_geabc ,_eeee ._adaba +1,_gege -1,_eeee ._edac ,-_eeee ._gdagbd ,_fafg ,&_fdfd );_ddcd !=nil {return nil ,_c .Wrap (_ddcd ,_gefgd ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _gege ++;_gege <=_eeee ._adaba +1&&_gege <=_dbga &&!_ffdbb .GetPixel (_gege ,_fgbb );_gege ++{};_eged =_gege ;if !(_gege <=_eeee ._adaba +1&&_gege <=_dbga ){break ;};};};_fdfd .Max .X ++;_fdfd .Max .Y ++;return &_fdfd ,nil ;};func New (width ,height int )*Bitmap {_cbga :=_bcdc (width ,height );_cbga .Data =make ([]byte ,height *_cbga .RowStride );return _cbga ;};func (_cgba *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_cgba .Width ,Height :_cgba .Height ,RowStride :_cgba .RowStride ,Color :_cgba .Color ,Text :_cgba .Text ,BitmapNumber :_cgba .BitmapNumber ,Special :_cgba .Special ,Data :make ([]byte ,len (_cgba .Data ))};};func (_egcd *BitmapsArray )GetBox (i int )(*_cc .Rectangle ,error ){const _dbgaa ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _egcd ==nil {return nil ,_c .Error (_dbgaa ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_egcd .Boxes )-1{return nil ,_c .Errorf (_dbgaa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _egcd .Boxes [i ],nil ;};func TstNSymbol (t *_f .T ,scale ...int )*Bitmap {_cfdgc ,_ddee :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_d .NoError (t ,_ddee );return TstGetScaledSymbol (t ,_cfdgc ,scale ...);};func (_fbecd *Bitmap )clearAll ()error {return _fbecd .RasterOperation (0,0,_fbecd .Width ,_fbecd .Height ,PixClr ,nil ,0,0);};type CombinationOperator int ;var _ _g .Interface =&ClassedPoints {};func _bcbd (_aada *Bitmap )(_bffg *Bitmap ,_edcb int ,_aegc error ){const _cgg ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _aada ==nil {return nil ,0,_c .Errorf (_cgg ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _bccea ,_debgee *Bitmap ;if _bccea ,_aegc =_ecdb (nil ,_aada );_aegc !=nil {return nil ,0,_c .Wrap (_aegc ,_cgg ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_fbb [13]int ;_abca ,_edaga int ;);_aged :=12;_ecgdf :=_af .NewNumSlice (_aged +1);_fgad :=_af .NewNumSlice (_aged +1);var _fcf *Boxes ;for _acee :=0;_acee <=_aged ;_acee ++{if _acee ==0{if _debgee ,_aegc =_ecdb (nil ,_bccea );_aegc !=nil {return nil ,0,_c .Wrap (_aegc ,_cgg ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _debgee ,_aegc =_eccb (_bccea ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_aegc !=nil {return nil ,0,_c .Wrap (_aegc ,_cgg ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _fcf ,_aegc =_debgee .connComponentsBB (4);_aegc !=nil {return nil ,0,_c .Wrap (_aegc ,_cgg ,"");};_fbb [_acee ]=len (*_fcf );_ecgdf .AddInt (_fbb [_acee ]);switch _acee {case 0:_abca =_fbb [0];default:_edaga =_fbb [_acee -1]-_fbb [_acee ];_fgad .AddInt (_edaga );};_bccea =_debgee ;};_cbbe :=true ;_ecdg :=2;var _eccf ,_eabb int ;for _cfbg :=1;_cfbg < len (*_fgad );_cfbg ++{if _eccf ,_aegc =_ecgdf .GetInt (_cfbg );_aegc !=nil {return nil ,0,_c .Wrap (_aegc ,_cgg ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _cbbe &&_eccf < int (0.3*float32 (_abca )){_ecdg =_cfbg +1;_cbbe =false ;};if _edaga ,_aegc =_fgad .GetInt (_cfbg );_aegc !=nil {return nil ,0,_c .Wrap (_aegc ,_cgg ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _edaga > _eabb {_eabb =_edaga ;};};_eabg :=_aada .XResolution ;if _eabg ==0{_eabg =150;};if _eabg > 110{_ecdg ++;};if _ecdg < 2{_fg .Log .Trace ("J\u0042\u0049\u0047\u0032\u0020\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0069\u0042\u0065\u0073\u0074 \u0074\u006f\u0020\u006d\u0069\u006e\u0069\u006d\u0075\u006d a\u006c\u006c\u006fw\u0061b\u006c\u0065");_ecdg =2;};_edcb =_ecdg +1;if _bffg ,_aegc =_bbbcc (nil ,_aada ,_ecdg +1,1);_aegc !=nil {return nil ,0,_c .Wrap (_aegc ,_cgg ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _bffg ,_edcb ,nil ;};func _efdf (_bdda *Bitmap ,_ecfcc ,_cfcce int ,_eedf ,_cgce int ,_agec RasterOperator ){var (_gdfc bool ;_gbaf bool ;_acbc int ;_ebcf int ;_dbfb int ;_ccc int ;_gaeb bool ;_afag byte ;);_ggad :=8-(_ecfcc &7);_afbb :=_edebb [_ggad ];_fead :=_bdda .RowStride *_cfcce +(_ecfcc >>3);if _eedf < _ggad {_gdfc =true ;_afbb &=_defc [8-_ggad +_eedf ];};if !_gdfc {_acbc =(_eedf -_ggad )>>3;if _acbc !=0{_gbaf =true ;_ebcf =_fead +1;};};_dbfb =(_ecfcc +_eedf )&7;if !(_gdfc ||_dbfb ==0){_gaeb =true ;_afag =_defc [_dbfb ];_ccc =_fead +1+_acbc ;};var _cfac ,_eecg int ;switch _agec {case PixClr :for _cfac =0;_cfac < _cgce ;_cfac ++{_bdda .Data [_fead ]=_fecaaf (_bdda .Data [_fead ],0x0,_afbb );_fead +=_bdda .RowStride ;};if _gbaf {for _cfac =0;_cfac < _cgce ;_cfac ++{for _eecg =0;_eecg < _acbc ;_eecg ++{_bdda .Data [_ebcf +_eecg ]=0x0;};_ebcf +=_bdda .RowStride ;};};if _gaeb {for _cfac =0;_cfac < _cgce ;_cfac ++{_bdda .Data [_ccc ]=_fecaaf (_bdda .Data [_ccc ],0x0,_afag );_ccc +=_bdda .RowStride ;};};case PixSet :for _cfac =0;_cfac < _cgce ;_cfac ++{_bdda .Data [_fead ]=_fecaaf (_bdda .Data [_fead ],0xff,_afbb );_fead +=_bdda .RowStride ;};if _gbaf {for _cfac =0;_cfac < _cgce ;_cfac ++{for _eecg =0;_eecg < _acbc ;_eecg ++{_bdda .Data [_ebcf +_eecg ]=0xff;};_ebcf +=_bdda .RowStride ;};};if _gaeb {for _cfac =0;_cfac < _cgce ;_cfac ++{_bdda .Data [_ccc ]=_fecaaf (_bdda .Data [_ccc ],0xff,_afag );_ccc +=_bdda .RowStride ;};};case PixNotDst :for _cfac =0;_cfac < _cgce ;_cfac ++{_bdda .Data [_fead ]=_fecaaf (_bdda .Data [_fead ],^_bdda .Data [_fead ],_afbb );_fead +=_bdda .RowStride ;};if _gbaf {for _cfac =0;_cfac < _cgce ;_cfac ++{for _eecg =0;_eecg < _acbc ;_eecg ++{_bdda .Data [_ebcf +_eecg ]=^(_bdda .Data [_ebcf +_eecg ]);};_ebcf +=_bdda .RowStride ;};};if _gaeb {for _cfac =0;_cfac < _cgce ;_cfac ++{_bdda .Data [_ccc ]=_fecaaf (_bdda .Data [_ccc ],^_bdda .Data [_ccc ],_afag );_ccc +=_bdda .RowStride ;};};};};func _cebb (_baaef *Bitmap ,_ddff ,_gbbac ,_bce ,_gafa int ,_eaggb RasterOperator ,_gfda *Bitmap ,_efdg ,_abbe int )error {var (_agaf bool ;_abgf bool ;_bdfbg int ;_becg int ;_bgca int ;_bedf bool ;_dbcde byte ;_abce int ;_cfgec int ;_bgge int ;_cdba ,_dbcg int ;);_cgddd :=8-(_ddff &7);_cfgd :=_edebb [_cgddd ];_ggda :=_baaef .RowStride *_gbbac +(_ddff >>3);_dffd :=_gfda .RowStride *_abbe +(_efdg >>3);if _bce < _cgddd {_agaf =true ;_cfgd &=_defc [8-_cgddd +_bce ];};if !_agaf {_bdfbg =(_bce -_cgddd )>>3;if _bdfbg > 0{_abgf =true ;_becg =_ggda +1;_bgca =_dffd +1;};};_abce =(_ddff +_bce )&7;if !(_agaf ||_abce ==0){_bedf =true ;_dbcde =_defc [_abce ];_cfgec =_ggda +1+_bdfbg ;_bgge =_dffd +1+_bdfbg ;};switch _eaggb {case PixSrc :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],_gfda .Data [_dffd ],_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]=_gfda .Data [_bgca +_dbcg ];};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],_gfda .Data [_bgge ],_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixNotSrc :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],^_gfda .Data [_dffd ],_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]=^_gfda .Data [_bgca +_dbcg ];};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],^_gfda .Data [_bgge ],_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixSrcOrDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],_gfda .Data [_dffd ]|_baaef .Data [_ggda ],_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]|=_gfda .Data [_bgca +_dbcg ];};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],_gfda .Data [_bgge ]|_baaef .Data [_cfgec ],_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixSrcAndDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],_gfda .Data [_dffd ]&_baaef .Data [_ggda ],_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]&=_gfda .Data [_bgca +_dbcg ];};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],_gfda .Data [_bgge ]&_baaef .Data [_cfgec ],_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixSrcXorDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],_gfda .Data [_dffd ]^_baaef .Data [_ggda ],_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]^=_gfda .Data [_bgca +_dbcg ];};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],_gfda .Data [_bgge ]^_baaef .Data [_cfgec ],_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixNotSrcOrDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],^(_gfda .Data [_dffd ])|_baaef .Data [_ggda ],_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]|=^(_gfda .Data [_bgca +_dbcg ]);};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],^(_gfda .Data [_bgge ])|_baaef .Data [_cfgec ],_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixNotSrcAndDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],^(_gfda .Data [_dffd ])&_baaef .Data [_ggda ],_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]&=^_gfda .Data [_bgca +_dbcg ];};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],^(_gfda .Data [_bgge ])&_baaef .Data [_cfgec ],_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixSrcOrNotDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],_gfda .Data [_dffd ]|^(_baaef .Data [_ggda ]),_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]=_gfda .Data [_bgca +_dbcg ]|^(_baaef .Data [_becg +_dbcg ]);};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],_gfda .Data [_bgge ]|^(_baaef .Data [_cfgec ]),_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixSrcAndNotDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],_gfda .Data [_dffd ]&^(_baaef .Data [_ggda ]),_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]=_gfda .Data [_bgca +_dbcg ]&^(_baaef .Data [_becg +_dbcg ]);};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],_gfda .Data [_bgge ]&^(_baaef .Data [_cfgec ]),_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixNotPixSrcOrDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],^(_gfda .Data [_dffd ]|_baaef .Data [_ggda ]),_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]=^(_gfda .Data [_bgca +_dbcg ]|_baaef .Data [_becg +_dbcg ]);};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],^(_gfda .Data [_bgge ]|_baaef .Data [_cfgec ]),_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixNotPixSrcAndDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],^(_gfda .Data [_dffd ]&_baaef .Data [_ggda ]),_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]=^(_gfda .Data [_bgca +_dbcg ]&_baaef .Data [_becg +_dbcg ]);};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],^(_gfda .Data [_bgge ]&_baaef .Data [_cfgec ]),_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};case PixNotPixSrcXorDst :for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_ggda ]=_fecaaf (_baaef .Data [_ggda ],^(_gfda .Data [_dffd ]^_baaef .Data [_ggda ]),_cfgd );_ggda +=_baaef .RowStride ;_dffd +=_gfda .RowStride ;};if _abgf {for _cdba =0;_cdba < _gafa ;_cdba ++{for _dbcg =0;_dbcg < _bdfbg ;_dbcg ++{_baaef .Data [_becg +_dbcg ]=^(_gfda .Data [_bgca +_dbcg ]^_baaef .Data [_becg +_dbcg ]);};_becg +=_baaef .RowStride ;_bgca +=_gfda .RowStride ;};};if _bedf {for _cdba =0;_cdba < _gafa ;_cdba ++{_baaef .Data [_cfgec ]=_fecaaf (_baaef .Data [_cfgec ],^(_gfda .Data [_bgge ]^_baaef .Data [_cfgec ]),_dbcde );_cfgec +=_baaef .RowStride ;_bgge +=_gfda .RowStride ;};};default:_fg .Log .Debug ("I\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070e\u0072\u0061\u0074o\u0072:\u0020\u0025\u0064",_eaggb );return _c .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");};return nil ;};func (_adbg *Bitmap )ClipRectangle (box *_cc .Rectangle )(_aag *Bitmap ,_edee *_cc .Rectangle ,_debd error ){const _dbcd ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_c .Error (_dbcd ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_aca ,_bfd :=_adbg .Width ,_adbg .Height ;_fegf :=_cc .Rect (0,0,_aca ,_bfd );if !box .Overlaps (_fegf ){return nil ,nil ,_c .Error (_dbcd ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_bdf :=box .Intersect (_fegf );_daf ,_baa :=_bdf .Min .X ,_bdf .Min .Y ;_fdd ,_cdd :=_bdf .Dx (),_bdf .Dy ();_aag =New (_fdd ,_cdd );_aag .Text =_adbg .Text ;if _debd =_aag .RasterOperation (0,0,_fdd ,_cdd ,PixSrc ,_adbg ,_daf ,_baa );_debd !=nil {return nil ,nil ,_c .Wrap (_debd ,_dbcd ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");};_edee =&_bdf ;return _aag ,_edee ,nil ;};func _cgadc (_agcf ,_eggb *Bitmap ,_fcggb *Selection )(*Bitmap ,error ){const _eeeg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _gdagb ,_gcdd int ;if _eggb ==nil {return nil ,_c .Error (_eeeg ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _fcggb ==nil {return nil ,_c .Error (_eeeg ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_gdagb =_fcggb .Width ;_gcdd =_fcggb .Height ;if _gdagb ==0||_gcdd ==0{return nil ,_c .Error (_eeeg ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _agcf ==nil {return _eggb .createTemplate (),nil ;};if _dbgc :=_agcf .resizeImageData (_eggb );_dbgc !=nil {return nil ,_dbgc ;};return _agcf ,nil ;};func _fbga (_bdad ,_cbbb *Bitmap ,_fedda ,_bddc int )(*Bitmap ,error ){const _faca ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _cbbb ==nil {return nil ,_c .Error (_faca ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _fedda < 1&&_bddc < 1{return nil ,_c .Error (_faca ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _fedda ==1&&_bddc ==1{return _cbbb .Copy (),nil ;};if _fedda ==1||_bddc ==1{var _bgcf error ;_ebda :=SelCreateBrick (_bddc ,_fedda ,_bddc /2,_fedda /2,SelHit );_bdad ,_bgcf =_fdca (_bdad ,_cbbb ,_ebda );if _bgcf !=nil {return nil ,_c .Wrap (_bgcf ,_faca ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _bdad ,nil ;};_gaffb :=SelCreateBrick (1,_fedda ,0,_fedda /2,SelHit );_efdd :=SelCreateBrick (_bddc ,1,_bddc /2,0,SelHit );_aage ,_dafb :=_gfbc (nil ,_cbbb ,_gaffb );if _dafb !=nil {return nil ,_c .Wrap (_dafb ,_faca ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_bdad ,_dafb =_gfbc (_bdad ,_aage ,_efdd );if _dafb !=nil {return nil ,_c .Wrap (_dafb ,_faca ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_dafb =_cfge (_aage ,_bdad ,_gaffb );if _dafb !=nil {return nil ,_c .Wrap (_dafb ,_faca ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_ ,_dafb =_cfge (_bdad ,_aage ,_efdd );if _dafb !=nil {return nil ,_c .Wrap (_dafb ,_faca ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _bdad ,nil ;};func (_acaa *Bitmaps )Size ()int {return len (_acaa .Values )};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);type RasterOperator int ;func _gfcgc (_efcad *_af .Stack ,_fgfbg ,_dggad ,_fdgg ,_abage ,_gcdb int ,_abagf *_cc .Rectangle )(_fdcg error ){const _fffbd ="\u0070\u0075\u0073\u0068\u0046\u0069\u006c\u006c\u0053\u0065\u0067m\u0065\u006e\u0074\u0042\u006f\u0075\u006e\u0064\u0069\u006eg\u0042\u006f\u0078";if _efcad ==nil {return _c .Error (_fffbd ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _abagf ==nil {return _c .Error (_fffbd ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");};_abagf .Min .X =_af .Min (_abagf .Min .X ,_fgfbg );_abagf .Max .X =_af .Max (_abagf .Max .X ,_dggad );_abagf .Min .Y =_af .Min (_abagf .Min .Y ,_fdgg );_abagf .Max .Y =_af .Max (_abagf .Max .Y ,_fdgg );if !(_fdgg +_abage >=0&&_fdgg +_abage <=_gcdb ){return nil ;};if _efcad .Aux ==nil {return _c .Error (_fffbd ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _bdecc *fillSegment ;_ffdd ,_fcfe :=_efcad .Aux .Pop ();if _fcfe {if _bdecc ,_fcfe =_ffdd .(*fillSegment );!_fcfe {return _c .Error (_fffbd ,"a\u0075\u0078\u0053\u0074\u0061\u0063k\u0020\u0064\u0061\u0074\u0061\u0020i\u0073\u0020\u006e\u006f\u0074\u0020\u0061 \u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065n\u0074");};}else {_bdecc =&fillSegment {};};_bdecc ._gedg =_fgfbg ;_bdecc ._adaba =_dggad ;_bdecc ._edac =_fdgg ;_bdecc ._gdagbd =_abage ;_efcad .Push (_bdecc );return nil ;};func (_dge *Bitmap )Zero ()bool {_gec :=_dge .Width /8;_dfd :=_dge .Width &7;var _fbec byte ;if _dfd !=0{_fbec =byte (0xff<<uint (8-_dfd ));};var _cgfa ,_bccd ,_cbe int ;for _bccd =0;_bccd < _dge .Height ;_bccd ++{_cgfa =_dge .RowStride *_bccd ;for _cbe =0;_cbe < _gec ;_cbe ,_cgfa =_cbe +1,_cgfa +1{if _dge .Data [_cgfa ]!=0{return false ;};};if _dfd > 0{if _dge .Data [_cgfa ]&_fbec !=0{return false ;};};};return true ;};func (_cda *Bitmap )ToImage ()_cc .Image {_cgad ,_fca :=_fe .NewImage (_cda .Width ,_cda .Height ,1,1,_cda .Data ,nil ,nil );if _fca !=nil {_fg .Log .Error ("\u0043\u006f\u006e\u0076\u0065\u0072\u0074\u0069\u006e\u0067\u0020j\u0062\u0069\u0067\u0032\u002e\u0042\u0069\u0074m\u0061p\u0020\u0074\u006f\u0020\u0069\u006d\u0061\u0067\u0065\u0075\u0074\u0069\u006c\u002e\u0049\u006d\u0061\u0067e\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_fca );};return _cgad ;};func (_cabbg *BitmapsArray )AddBitmaps (bm *Bitmaps ){_cabbg .Values =append (_cabbg .Values ,bm )};func MakePixelCentroidTab8 ()[]int {return _fffb ()};func TstWriteSymbols (t *_f .T ,bms *Bitmaps ,src *Bitmap ){for _fbed :=0;_fbed < bms .Size ();_fbed ++{_efgf :=bms .Values [_fbed ];_ecbf :=bms .Boxes [_fbed ];_dccc :=src .RasterOperation (_ecbf .Min .X ,_ecbf .Min .Y ,_efgf .Width ,_efgf .Height ,PixSrc ,_efgf ,0,0);_d .NoError (t ,_dccc );};};func (_cege *Bitmap )setEightBytes (_eedg int ,_fdg uint64 )error {_abag :=_cege .RowStride -(_eedg %_cege .RowStride );if _cege .RowStride !=_cege .Width >>3{_abag --;};if _abag >=8{return _cege .setEightFullBytes (_eedg ,_fdg );};return _cege .setEightPartlyBytes (_eedg ,_abag ,_fdg );};func (_effb *Bitmap )InverseData (){_effb .inverseData ()};func _ag (_beed *Bitmap ,_ede ...int )(_gf *Bitmap ,_eeb error ){const _fgeb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _beed ==nil {return nil ,_c .Error (_fgeb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_ede )==0||len (_ede )> 4{return nil ,_c .Error (_fgeb ,"t\u0068\u0065\u0072\u0065\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0061\u0074\u0020\u006cea\u0073\u0074\u0020\u006fn\u0065\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020mo\u0073\u0074 \u0034\u0020\u006c\u0065\u0076\u0065\u006c\u0073");};if _ede [0]<=0{_fg .Log .Debug ("\u006c\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030 \u002d\u0020\u006e\u006f\u0020\u0072\u0065\u0064\u0075\u0063t\u0069\u006f\u006e");_gf ,_eeb =_ecdb (nil ,_beed );if _eeb !=nil {return nil ,_c .Wrap (_eeb ,_fgeb ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");};return _gf ,nil ;};_bc :=_bcg ();_gf =_beed ;for _ggfa ,_gad :=range _ede {if _gad <=0{break ;};_gf ,_eeb =_afed (_gf ,_gad ,_bc );if _eeb !=nil {return nil ,_c .Wrapf (_eeb ,_fgeb ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_ggfa );};};return _gf ,nil ;};func (_affd *Selection )setOrigin (_geba ,_ecgac int ){_affd .Cy ,_affd .Cx =_geba ,_ecgac };func (_fbag *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _fcgb ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _gcfb :=_fbag .validateIntSlice ();_gcfb !=nil {return nil ,_c .Wrap (_gcfb ,_fcgb ,"");};if _fbag .IntSlice .Size ()==0{return nil ,_c .Error (_fcgb ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_fbag .SortByY ();var (_fafbf []*ClassedPoints ;_dcace int ;);_egba :=-1;var _egdc *ClassedPoints ;for _gfaf :=0;_gfaf < len (_fbag .IntSlice );_gfaf ++{_dcace =int (_fbag .YAtIndex (_gfaf ));if _dcace !=_egba {_egdc =&ClassedPoints {Points :_fbag .Points };_egba =_dcace ;_fafbf =append (_fafbf ,_egdc );};_egdc .IntSlice =append (_egdc .IntSlice ,_fbag .IntSlice [_gfaf ]);};for _ ,_ebff :=range _fafbf {_ebff .SortByX ();};return _fafbf ,nil ;};type shift int ;func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_eefe float64 ,_edeb error ){const _ccgd ="\u0043\u006f\u0072\u0072el\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0053\u0069\u006d\u0070l\u0065";if bm1 ==nil ||bm2 ==nil {return _eefe ,_c .Error (_ccgd ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _eefe ,_c .Error (_ccgd ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if area1 ==0||area2 ==0{return _eefe ,_c .Error (_ccgd ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_fefa ,_ebbf :=bm1 .Width ,bm1 .Height ;_fgcee ,_bcba :=bm2 .Width ,bm2 .Height ;if _fgbd (_fefa -_fgcee )> maxDiffW {return 0,nil ;};if _fgbd (_ebbf -_bcba )> maxDiffH {return 0,nil ;};var _fbdc ,_fabca int ;if delX >=0{_fbdc =int (delX +0.5);}else {_fbdc =int (delX -0.5);};if delY >=0{_fabca =int (delY +0.5);}else {_fabca =int (delY -0.5);};_agge :=bm1 .createTemplate ();if _edeb =_agge .RasterOperation (_fbdc ,_fabca ,_fgcee ,_bcba ,PixSrc ,bm2 ,0,0);_edeb !=nil {return _eefe ,_c .Wrap (_edeb ,_ccgd ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _edeb =_agge .RasterOperation (0,0,_fefa ,_ebbf ,PixSrcAndDst ,bm1 ,0,0);_edeb !=nil {return _eefe ,_c .Wrap (_edeb ,_ccgd ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_dgad :=_agge .countPixels ();_eefe =float64 (_dgad )*float64 (_dgad )/(float64 (area1 )*float64 (area2 ));return _eefe ,nil ;};func (_deea *Bitmaps )WidthSorter ()func (_ceed ,_gbca int )bool {return func (_bddd ,_acad int )bool {return _deea .Values [_bddd ].Width < _deea .Values [_acad ].Width };};const (_gffc shift =iota ;_agebc ;);func _fgg (_fge ,_gd *Bitmap )(_dd error ){const _fb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_ca :=_gd .RowStride ;_e :=_fge .RowStride ;var (_ed byte ;_db uint16 ;_dg ,_feg ,_cb ,_ad ,_dbd int ;);for _cb =0;_cb < _gd .Height ;_cb ++{_dg =_cb *_ca ;_feg =2*_cb *_e ;for _ad =0;_ad < _ca ;_ad ++{_ed =_gd .Data [_dg +_ad ];_db =_cbdfc [_ed ];_dbd =_feg +_ad *2;if _fge .RowStride !=_gd .RowStride *2&&(_ad +1)*2> _fge .RowStride {_dd =_fge .SetByte (_dbd ,byte (_db >>8));}else {_dd =_fge .setTwoBytes (_dbd ,_db );};if _dd !=nil {return _c .Wrap (_dd ,_fb ,"");};};for _ad =0;_ad < _e ;_ad ++{_dbd =_feg +_e +_ad ;_ed =_fge .Data [_feg +_ad ];if _dd =_fge .SetByte (_dbd ,_ed );_dd !=nil {return _c .Wrapf (_dd ,_fb ,"c\u006f\u0070\u0079\u0020\u0064\u006fu\u0062\u006c\u0065\u0064\u0020\u006ci\u006e\u0065\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0042\u0079\u0074\u0065\u003a\u0020\u0027\u0025d\u0027",_feg +_ad ,_feg +_e +_ad );};};};return nil ;};var (_fbbb *Bitmap ;_abaab *Bitmap ;);func (_cadbc *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_cgagg *Bitmaps ,_gfcfe error ){const _bgbg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _cadbc ==nil {return nil ,_c .Error (_bgbg ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_bgbg ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_bgbg ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );};_aacb ,_gfcfe :=_cadbc .makeSizeIndicator (width ,height ,tp ,relation );if _gfcfe !=nil {return nil ,_c .Wrap (_gfcfe ,_bgbg ,"");};_cgagg ,_gfcfe =_cadbc .selectByIndicator (_aacb );if _gfcfe !=nil {return nil ,_c .Wrap (_gfcfe ,_bgbg ,"");};return _cgagg ,nil ;};func _fcbcf (_cfdaf ,_gdbc int ,_faga string )*Selection {_cfeee :=&Selection {Height :_cfdaf ,Width :_gdbc ,Name :_faga };_cfeee .Data =make ([][]SelectionValue ,_cfdaf );for _cacfc :=0;_cacfc < _cfdaf ;_cacfc ++{_cfeee .Data [_cacfc ]=make ([]SelectionValue ,_gdbc );};return _cfeee ;};func (_addf *Bitmaps )CountPixels ()*_af .NumSlice {_dbdeg :=&_af .NumSlice {};for _ ,_dgdeg :=range _addf .Values {_dbdeg .AddInt (_dgdeg .CountPixels ());};return _dbdeg ;};func (_cabg *Bitmap )equivalent (_gffb *Bitmap )bool {if _cabg ==_gffb {return true ;};if !_cabg .SizesEqual (_gffb ){return false ;};_bebb :=_ffcd (_cabg ,_gffb ,CmbOpXor );_cfeg :=_cabg .countPixels ();_aee :=int (0.25*float32 (_cfeg ));if _bebb .thresholdPixelSum (_aee ){return false ;};var (_bcb [9][9]int ;_bdfc [18][9]int ;_bebg [9][18]int ;_badg int ;_bgc int ;);_adfc :=9;_defa :=_cabg .Height /_adfc ;_abfgd :=_cabg .Width /_adfc ;_baec ,_agda :=_defa /2,_abfgd /2;if _defa < _abfgd {_baec =_abfgd /2;_agda =_defa /2;};_cfa :=float64 (_baec )*float64 (_agda )*_ff .Pi ;_aaad :=int (float64 (_defa *_abfgd /2)*0.9);_bcgg :=int (float64 (_abfgd *_defa /2)*0.9);for _deg :=0;_deg < _adfc ;_deg ++{_dddg :=_abfgd *_deg +_badg ;var _gcage int ;if _deg ==_adfc -1{_badg =0;_gcage =_cabg .Width ;}else {_gcage =_dddg +_abfgd ;if ((_cabg .Width -_badg )%_adfc )> 0{_badg ++;_gcage ++;};};for _bbbe :=0;_bbbe < _adfc ;_bbbe ++{_ccb :=_defa *_bbbe +_bgc ;var _ecce int ;if _bbbe ==_adfc -1{_bgc =0;_ecce =_cabg .Height ;}else {_ecce =_ccb +_defa ;if (_cabg .Height -_bgc )%_adfc > 0{_bgc ++;_ecce ++;};};var _dfcb ,_cacc ,_fcd ,_bfdf int ;_fec :=(_dddg +_gcage )/2;_ebf :=(_ccb +_ecce )/2;for _ffb :=_dddg ;_ffb < _gcage ;_ffb ++{for _cfaa :=_ccb ;_cfaa < _ecce ;_cfaa ++{if _bebb .GetPixel (_ffb ,_cfaa ){if _ffb < _fec {_dfcb ++;}else {_cacc ++;};if _cfaa < _ebf {_bfdf ++;}else {_fcd ++;};};};};_bcb [_deg ][_bbbe ]=_dfcb +_cacc ;_bdfc [_deg *2][_bbbe ]=_dfcb ;_bdfc [_deg *2+1][_bbbe ]=_cacc ;_bebg [_deg ][_bbbe *2]=_bfdf ;_bebg [_deg ][_bbbe *2+1]=_fcd ;};};for _gcgd :=0;_gcgd < _adfc *2-1;_gcgd ++{for _gdc :=0;_gdc < (_adfc -1);_gdc ++{var _edgb int ;for _fecd :=0;_fecd < 2;_fecd ++{for _gaa :=0;_gaa < 2;_gaa ++{_edgb +=_bdfc [_gcgd +_fecd ][_gdc +_gaa ];};};if _edgb > _bcgg {return false ;};};};for _aab :=0;_aab < (_adfc -1);_aab ++{for _fgge :=0;_fgge < ((_adfc *2)-1);_fgge ++{var _fddb int ;for _cgae :=0;_cgae < 2;_cgae ++{for _ccffc :=0;_ccffc < 2;_ccffc ++{_fddb +=_bebg [_aab +_cgae ][_fgge +_ccffc ];};};if _fddb > _aaad {return false ;};};};for _addg :=0;_addg < (_adfc -2);_addg ++{for _ecd :=0;_ecd < (_adfc -2);_ecd ++{var _bec ,_cedg int ;for _bba :=0;_bba < 3;_bba ++{for _bbcc :=0;_bbcc < 3;_bbcc ++{if _bba ==_bbcc {_bec +=_bcb [_addg +_bba ][_ecd +_bbcc ];};if (2-_bba )==_bbcc {_cedg +=_bcb [_addg +_bba ][_ecd +_bbcc ];};};};if _bec > _bcgg ||_cedg > _bcgg {return false ;};};};for _aabd :=0;_aabd < (_adfc -1);_aabd ++{for _bccdg :=0;_bccdg < (_adfc -1);_bccdg ++{var _dbab int ;for _ebcc :=0;_ebcc < 2;_ebcc ++{for _ffef :=0;_ffef < 2;_ffef ++{_dbab +=_bcb [_aabd +_ebcc ][_bccdg +_ffef ];};};if float64 (_dbab )> _cfa {return false ;};};};return true ;};func _fffb ()[]int {_defe :=make ([]int ,256);_defe [0]=0;_defe [1]=7;var _gbef int ;for _gbef =2;_gbef < 4;_gbef ++{_defe [_gbef ]=_defe [_gbef -2]+6;};for _gbef =4;_gbef < 8;_gbef ++{_defe [_gbef ]=_defe [_gbef -4]+5;};for _gbef =8;_gbef < 16;_gbef ++{_defe [_gbef ]=_defe [_gbef -8]+4;};for _gbef =16;_gbef < 32;_gbef ++{_defe [_gbef ]=_defe [_gbef -16]+3;};for _gbef =32;_gbef < 64;_gbef ++{_defe [_gbef ]=_defe [_gbef -32]+2;};for _gbef =64;_gbef < 128;_gbef ++{_defe [_gbef ]=_defe [_gbef -64]+1;};for _gbef =128;_gbef < 256;_gbef ++{_defe [_gbef ]=_defe [_gbef -128];};return _defe ;};func (_cace Points )GetIntX (i int )(int ,error ){if i >=len (_cace ){return 0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return int (_cace [i ].X ),nil ;};func (_dabe *ClassedPoints )SortByX (){_dabe ._ebdf =_dabe .xSortFunction ();_g .Sort (_dabe )};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_fgec :=_fcbcf (h ,w ,"");_fgec .setOrigin (cy ,cx );var _dffg ,_bcad int ;for _dffg =0;_dffg < h ;_dffg ++{for _bcad =0;_bcad < w ;_bcad ++{_fgec .Data [_dffg ][_bcad ]=tp ;};};return _fgec ;};func Rect (x ,y ,w ,h int )(*_cc .Rectangle ,error ){const _fdga ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_c .Errorf (_fdga ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_c .Error (_fdga ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_bgfc :=_cc .Rect (x ,y ,x +w ,y +h );return &_bgfc ,nil ;};func _fbaef (_eegd ,_adbd int )int {if _eegd < _adbd {return _eegd ;};return _adbd ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _cfge (d ,s ,sel )};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_cc .Rectangle ;};func _bdaa (_cfea uint ,_aagbg byte )byte {return _aagbg >>_cfea <<_cfea };const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func _gcea (_eaac ,_agdd *Bitmap ,_aafg ,_fbcb int )(*Bitmap ,error ){const _dgbbf ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _agdd ==nil {return nil ,_c .Error (_dgbbf ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _aafg < 1||_fbcb < 1{return nil ,_c .Error (_dgbbf ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _aafg ==1&&_fbcb ==1{return _ecdb (_eaac ,_agdd );};if MorphBC ==SymmetricMorphBC {_gcceb ,_eaae :=_bbbcc (_eaac ,_agdd ,_aafg ,_fbcb );if _eaae !=nil {return nil ,_c .Wrap (_eaae ,_dgbbf ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _gcceb ,nil ;};_abec :=_afbc (_aafg /2,_fbcb /2);_ddf :=8*((_abec +7)/8);_daede ,_dfgc :=_agdd .AddBorder (_ddf ,0);if _dfgc !=nil {return nil ,_c .Wrapf (_dfgc ,_dgbbf ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_ddf );};var _gcdg ,_dbge *Bitmap ;if _aafg ==1||_fbcb ==1{_faad :=SelCreateBrick (_fbcb ,_aafg ,_fbcb /2,_aafg /2,SelHit );_gcdg ,_dfgc =_gfa (nil ,_daede ,_faad );if _dfgc !=nil {return nil ,_c .Wrap (_dfgc ,_dgbbf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_adec :=SelCreateBrick (1,_aafg ,0,_aafg /2,SelHit );_eggc ,_aggfc :=_cfge (nil ,_daede ,_adec );if _aggfc !=nil {return nil ,_c .Wrap (_aggfc ,_dgbbf ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_daab :=SelCreateBrick (_fbcb ,1,_fbcb /2,0,SelHit );_gcdg ,_aggfc =_cfge (nil ,_eggc ,_daab );if _aggfc !=nil {return nil ,_c .Wrap (_aggfc ,_dgbbf ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_aggfc =_gfbc (_eggc ,_gcdg ,_adec );_aggfc !=nil {return nil ,_c .Wrap (_aggfc ,_dgbbf ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_aggfc =_gfbc (_gcdg ,_eggc ,_daab );_aggfc !=nil {return nil ,_c .Wrap (_aggfc ,_dgbbf ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");};};if _dbge ,_dfgc =_gcdg .RemoveBorder (_ddf );_dfgc !=nil {return nil ,_c .Wrap (_dfgc ,_dgbbf ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _eaac ==nil {return _dbge ,nil ;};if _ ,_dfgc =_ecdb (_eaac ,_dbge );_dfgc !=nil {return nil ,_dfgc ;};return _eaac ,nil ;};func TstOSymbol (t *_f .T ,scale ...int )*Bitmap {_eadga ,_gaef :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_d .NoError (t ,_gaef );return TstGetScaledSymbol (t ,_eadga ,scale ...);};func (_egc *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _egc .Copy (),nil ;};_eea ,_dag :=_egc .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _dag !=nil {return nil ,_c .Wrap (_dag ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _eea ,nil ;};func (_fbe *Bitmap )GetChocolateData ()[]byte {if _fbe .Color ==Vanilla {_fbe .inverseData ();};return _fbe .Data ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func TstWordBitmap (t *_f .T ,scale ...int )*Bitmap {_ffce :=1;if len (scale )> 0{_ffce =scale [0];};_agf :=3;_gdfd :=9+7+15+2*_agf ;_gefdc :=5+_agf +5;_efbe :=New (_gdfd *_ffce ,_gefdc *_ffce );_agdb :=&Bitmaps {};var _edbbb *int ;_agf *=_ffce ;_fgaf :=0;_edbbb =&_fgaf ;_cggc :=0;_cbeb :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,_agf );_cbeb =TstISymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,_agf );_cbeb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,0);*_edbbb =0;_cggc =5*_ffce +_agf ;_cbeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,_agf );_cbeb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,1*_ffce );_cbeb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_agdb ,_cbeb ,_edbbb ,_cggc ,0);TstWriteSymbols (t ,_agdb ,_efbe );return _efbe ;};func _fd (_aed ,_gc *Bitmap )(_eb error ){const _ea ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_ba :=_gc .RowStride ;_fa :=_aed .RowStride ;var _eeg ,_dc ,_be ,_ce ,_fcgd int ;for _be =0;_be < _gc .Height ;_be ++{_eeg =_be *_ba ;_dc =8*_be *_fa ;for _ce =0;_ce < _ba ;_ce ++{if _eb =_aed .setEightBytes (_dc +_ce *8,_bdgc [_gc .Data [_eeg +_ce ]]);_eb !=nil {return _c .Wrap (_eb ,_ea ,"");};};for _fcgd =1;_fcgd < 8;_fcgd ++{for _ce =0;_ce < _fa ;_ce ++{if _eb =_aed .SetByte (_dc +_fcgd *_fa +_ce ,_aed .Data [_dc +_ce ]);_eb !=nil {return _c .Wrap (_eb ,_ea ,"");};};};};return nil ;};type Color int ;func (_bgec *Bitmap )CreateTemplate ()*Bitmap {return _bgec .createTemplate ()};func (_fff *Bitmap )GetVanillaData ()[]byte {if _fff .Color ==Chocolate {_fff .inverseData ();};return _fff .Data ;};func (_ebbab *ClassedPoints )Swap (i ,j int ){_ebbab .IntSlice [i ],_ebbab .IntSlice [j ]=_ebbab .IntSlice [j ],_ebbab .IntSlice [i ];};func (_cbca *Bitmaps )AddBox (box *_cc .Rectangle ){_cbca .Boxes =append (_cbca .Boxes ,box )};func (_dga *Bitmap )SetPixel (x ,y int ,pixel byte )error {_dcf :=_dga .GetByteIndex (x ,y );if _dcf > len (_dga .Data )-1{return _c .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_dcf );};_fdae :=_dga .GetBitOffset (x );_gbba :=uint (7-_fdae );_abg :=_dga .Data [_dcf ];var _egeag byte ;if pixel ==1{_egeag =_abg |(pixel &0x01<<_gbba );}else {_egeag =_abg &^(1<<_gbba );};_dga .Data [_dcf ]=_egeag ;return nil ;};func (_ccfb *Bitmap )inverseData (){if _eaea :=_ccfb .RasterOperation (0,0,_ccfb .Width ,_ccfb .Height ,PixNotDst ,nil ,0,0);_eaea !=nil {_fg .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_eaea );};if _ccfb .Color ==Chocolate {_ccfb .Color =Vanilla ;}else {_ccfb .Color =Chocolate ;};};var _fefe =[5]int {1,2,3,0,4};func (_cbfc *byHeight )Swap (i ,j int ){_cbfc .Values [i ],_cbfc .Values [j ]=_cbfc .Values [j ],_cbfc .Values [i ];if _cbfc .Boxes !=nil {_cbfc .Boxes [i ],_cbfc .Boxes [j ]=_cbfc .Boxes [j ],_cbfc .Boxes [i ];};};func (_cdag *Bitmaps )makeSizeIndicator (_deba ,_eeae int ,_fbgcb LocationFilter ,_eebg SizeComparison )(_gcgfd *_af .NumSlice ,_gdfce error ){const _adaee ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _cdag ==nil {return nil ,_c .Error (_adaee ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _fbgcb {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_adaee ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",_fbgcb );};switch _eebg {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_adaee ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_eebg );};_gcgfd =&_af .NumSlice {};var (_ggfcc ,_cdbd ,_acbbf int ;_dafd *Bitmap ;);for _ ,_dafd =range _cdag .Values {_ggfcc =0;_cdbd ,_acbbf =_dafd .Width ,_dafd .Height ;switch _fbgcb {case LocSelectWidth :if (_eebg ==SizeSelectIfLT &&_cdbd < _deba )||(_eebg ==SizeSelectIfGT &&_cdbd > _deba )||(_eebg ==SizeSelectIfLTE &&_cdbd <=_deba )||(_eebg ==SizeSelectIfGTE &&_cdbd >=_deba )||(_eebg ==SizeSelectIfEQ &&_cdbd ==_deba ){_ggfcc =1;};case LocSelectHeight :if (_eebg ==SizeSelectIfLT &&_acbbf < _eeae )||(_eebg ==SizeSelectIfGT &&_acbbf > _eeae )||(_eebg ==SizeSelectIfLTE &&_acbbf <=_eeae )||(_eebg ==SizeSelectIfGTE &&_acbbf >=_eeae )||(_eebg ==SizeSelectIfEQ &&_acbbf ==_eeae ){_ggfcc =1;};case LocSelectIfEither :if (_eebg ==SizeSelectIfLT &&(_cdbd < _deba ||_acbbf < _eeae ))||(_eebg ==SizeSelectIfGT &&(_cdbd > _deba ||_acbbf > _eeae ))||(_eebg ==SizeSelectIfLTE &&(_cdbd <=_deba ||_acbbf <=_eeae ))||(_eebg ==SizeSelectIfGTE &&(_cdbd >=_deba ||_acbbf >=_eeae ))||(_eebg ==SizeSelectIfEQ &&(_cdbd ==_deba ||_acbbf ==_eeae )){_ggfcc =1;};case LocSelectIfBoth :if (_eebg ==SizeSelectIfLT &&(_cdbd < _deba &&_acbbf < _eeae ))||(_eebg ==SizeSelectIfGT &&(_cdbd > _deba &&_acbbf > _eeae ))||(_eebg ==SizeSelectIfLTE &&(_cdbd <=_deba &&_acbbf <=_eeae ))||(_eebg ==SizeSelectIfGTE &&(_cdbd >=_deba &&_acbbf >=_eeae ))||(_eebg ==SizeSelectIfEQ &&(_cdbd ==_deba &&_acbbf ==_eeae )){_ggfcc =1;};};_gcgfd .AddInt (_ggfcc );};return _gcgfd ,nil ;};func (_cgbac Points )YSorter ()func (_aeebe ,_feac int )bool {return func (_ceea ,_bcfgg int )bool {return _cgbac [_ceea ].Y < _cgbac [_bcfgg ].Y };};func TstASymbol (t *_f .T )*Bitmap {t .Helper ();_ccdgc :=New (6,6);_d .NoError (t ,_ccdgc .SetPixel (1,0,1));_d .NoError (t ,_ccdgc .SetPixel (2,0,1));_d .NoError (t ,_ccdgc .SetPixel (3,0,1));_d .NoError (t ,_ccdgc .SetPixel (4,0,1));_d .NoError (t ,_ccdgc .SetPixel (5,1,1));_d .NoError (t ,_ccdgc .SetPixel (1,2,1));_d .NoError (t ,_ccdgc .SetPixel (2,2,1));_d .NoError (t ,_ccdgc .SetPixel (3,2,1));_d .NoError (t ,_ccdgc .SetPixel (4,2,1));_d .NoError (t ,_ccdgc .SetPixel (5,2,1));_d .NoError (t ,_ccdgc .SetPixel (0,3,1));_d .NoError (t ,_ccdgc .SetPixel (5,3,1));_d .NoError (t ,_ccdgc .SetPixel (0,4,1));_d .NoError (t ,_ccdgc .SetPixel (5,4,1));_d .NoError (t ,_ccdgc .SetPixel (1,5,1));_d .NoError (t ,_ccdgc .SetPixel (2,5,1));_d .NoError (t ,_ccdgc .SetPixel (3,5,1));_d .NoError (t ,_ccdgc .SetPixel (4,5,1));_d .NoError (t ,_ccdgc .SetPixel (5,5,1));return _ccdgc ;};func TstWSymbol (t *_f .T ,scale ...int )*Bitmap {_edbbbc ,_fbgab :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_d .NoError (t ,_fbgab );return TstGetScaledSymbol (t ,_edbbbc ,scale ...);};func (_ccba *Bitmaps )AddBitmap (bm *Bitmap ){_ccba .Values =append (_ccba .Values ,bm )};func _ffbc (_eecec *Bitmap ,_eaad *Bitmap ,_dabb int )(_fagc error ){const _bdcb ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_fbad :=_fbaef (_eecec .Height ,_eaad .Height );_caab :=_fbaef (_eecec .RowStride ,_eaad .RowStride );switch _dabb {case 4:_fagc =_efbc (_eecec ,_eaad ,_fbad ,_caab );case 8:_fagc =_feae (_eecec ,_eaad ,_fbad ,_caab );default:return _c .Errorf (_bdcb ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0034\u0020\u006fr\u0020\u0038\u0020\u002d\u0020i\u0073\u003a \u0027\u0025\u0064\u0027",_dabb );};if _fagc !=nil {return _c .Wrap (_fagc ,_bdcb ,"");};return nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _eceb (oldByte ,newByte ,op );};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);var MorphBC BoundaryCondition ;func (_cdga *Bitmaps )SortByWidth (){_aaaf :=(*byWidth )(_cdga );_g .Sort (_aaaf )};var _dfgcd =[]byte {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x78,0x27,0xC2,0x27,0x91,0x00,0x22,0x48,0x21,0x03,0x24,0x91,0x00,0x22,0x48,0x21,0x02,0xA4,0x95,0x00,0x22,0x48,0x21,0x02,0x64,0x9B,0x00,0x3C,0x78,0x21,0x02,0x27,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};func (_dgdc *ClassedPoints )ySortFunction ()func (_edae int ,_acbb int )bool {return func (_caae ,_gggb int )bool {return _dgdc .YAtIndex (_caae )< _dgdc .YAtIndex (_gggb )};};func (_dgfd *Points )AddPoint (x ,y float32 ){*_dgfd =append (*_dgfd ,Point {x ,y })};func TstVSymbol (t *_f .T ,scale ...int )*Bitmap {_dbe ,_fegbc :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_d .NoError (t ,_fegbc );return TstGetScaledSymbol (t ,_dbe ,scale ...);};func (_cbge *Bitmaps )HeightSorter ()func (_adfba ,_bdbg int )bool {return func (_cbcf ,_fgfcf int )bool {_daef :=_cbge .Values [_cbcf ].Height < _cbge .Values [_fgfcf ].Height ;_fg .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_cbge .Values [_cbcf ].Height ,_cbge .Values [_fgfcf ].Height ,_daef );return _daef ;};};func _gfaa (_ebbe *Bitmap ,_effcb *Bitmap ,_ageb *Selection ,_egae **Bitmap )(*Bitmap ,error ){const _ccfg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _effcb ==nil {return nil ,_c .Error (_ccfg ,"\u004d\u006f\u0072\u0070\u0068\u0041\u0072\u0067\u0073\u0031\u0020'\u0073\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066i\u006e\u0065\u0064");};if _ageb ==nil {return nil ,_c .Error (_ccfg ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_aeee ,_ddbdd :=_ageb .Height ,_ageb .Width ;if _aeee ==0||_ddbdd ==0{return nil ,_c .Error (_ccfg ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _ebbe ==nil {_ebbe =_effcb .createTemplate ();*_egae =_effcb ;return _ebbe ,nil ;};_ebbe .Width =_effcb .Width ;_ebbe .Height =_effcb .Height ;_ebbe .RowStride =_effcb .RowStride ;_ebbe .Color =_effcb .Color ;_ebbe .Data =make ([]byte ,_effcb .RowStride *_effcb .Height );if _ebbe ==_effcb {*_egae =_effcb .Copy ();}else {*_egae =_effcb ;};return _ebbe ,nil ;};func _fgbd (_ccdg int )int {if _ccdg < 0{return -_ccdg ;};return _ccdg ;};type SizeSelection int ;func (_gddg *Bitmap )setEightPartlyBytes (_dgd ,_gce int ,_fdf uint64 )(_gcaed error ){var (_ega byte ;_accc int ;);const _gaab ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _gfe :=1;_gfe <=_gce ;_gfe ++{_accc =64-_gfe *8;_ega =byte (_fdf >>uint (_accc )&0xff);_fg .Log .Trace ("\u0074\u0065\u006d\u0070\u003a\u0020\u0025\u0030\u0038\u0062\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a %\u0064,\u0020\u0069\u0064\u0078\u003a\u0020\u0025\u0064\u002c\u0020\u0066\u0075l\u006c\u0042\u0079\u0074\u0065\u0073\u004e\u0075\u006d\u0062\u0065\u0072\u003a\u0020\u0025\u0064\u002c \u0073\u0068\u0069\u0066\u0074\u003a\u0020\u0025\u0064",_ega ,_dgd ,_dgd +_gfe -1,_gce ,_accc );if _gcaed =_gddg .SetByte (_dgd +_gfe -1,_ega );_gcaed !=nil {return _c .Wrap (_gcaed ,_gaab ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_dgab :=_gddg .RowStride *8-_gddg .Width ;if _dgab ==0{return nil ;};_accc -=8;_ega =byte (_fdf >>uint (_accc )&0xff)<<uint (_dgab );if _gcaed =_gddg .SetByte (_dgd +_gce ,_ega );_gcaed !=nil {return _c .Wrap (_gcaed ,_gaab ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func TstAddSymbol (t *_f .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_gfbe :=_cc .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_gfbe );*x +=sym .Width +space ;};func _eceb (_cbdg ,_befd byte ,_efg CombinationOperator )byte {switch _efg {case CmbOpOr :return _befd |_cbdg ;case CmbOpAnd :return _befd &_cbdg ;case CmbOpXor :return _befd ^_cbdg ;case CmbOpXNor :return ^(_befd ^_cbdg );case CmbOpNot :return ^(_befd );default:return _befd ;};};func _ege ()(_eda [256]uint16 ){for _ffg :=0;_ffg < 256;_ffg ++{if _ffg &0x01!=0{_eda [_ffg ]|=0x3;};if _ffg &0x02!=0{_eda [_ffg ]|=0xc;};if _ffg &0x04!=0{_eda [_ffg ]|=0x30;};if _ffg &0x08!=0{_eda [_ffg ]|=0xc0;};if _ffg &0x10!=0{_eda [_ffg ]|=0x300;};if _ffg &0x20!=0{_eda [_ffg ]|=0xc00;};if _ffg &0x40!=0{_eda [_ffg ]|=0x3000;};if _ffg &0x80!=0{_eda [_ffg ]|=0xc000;};};return _eda ;};func _dcc (_bee *Bitmap ,_cag int )(*Bitmap ,error ){const _ffa ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _bee ==nil {return nil ,_c .Error (_ffa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cag ==1{return _ecdb (nil ,_bee );};if _cag !=2&&_cag !=4&&_cag !=8{return nil ,_c .Error (_ffa ,"\u0066\u0061\u0063t\u006f\u0072\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069n\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020\u0072\u0061\u006e\u0067\u0065");};_fcc :=_cag *_bee .Width ;_ga :=_cag *_bee .Height ;_eec :=New (_fcc ,_ga );var _cg error ;switch _cag {case 2:_cg =_fgg (_eec ,_bee );case 4:_cg =_df (_eec ,_bee );case 8:_cg =_fd (_eec ,_bee );};if _cg !=nil {return nil ,_c .Wrap (_cg ,_ffa ,"");};return _eec ,nil ;};func ClipBoxToRectangle (box *_cc .Rectangle ,wi ,hi int )(_ecgd *_cc .Rectangle ,_bddg error ){const _ddea ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_c .Error (_ddea ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_c .Error (_ddea ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_ecgd =&(*box );if _ecgd .Min .X < 0{_ecgd .Max .X +=_ecgd .Min .X ;_ecgd .Min .X =0;};if _ecgd .Min .Y < 0{_ecgd .Max .Y +=_ecgd .Min .Y ;_ecgd .Min .Y =0;};if _ecgd .Max .X > wi {_ecgd .Max .X =wi ;};if _ecgd .Max .Y > hi {_ecgd .Max .Y =hi ;};return _ecgd ,nil ;};func (_feag *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _agcfd ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_cabd ,_fgga :=_feag .selectByIndexes (idx );if _fgga !=nil {return nil ,_c .Wrap (_fgga ,_agcfd ,"");};return _cabd ,nil ;};func (_fafa *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_cfaaf *Boxes ,_agb error ){const _aedc ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _fafa ==nil {return nil ,_c .Error (_aedc ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_c .Error (_aedc ,"\u0063\u006f\u006ene\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006e\u006f\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038");};if bms ==nil {if _cfaaf ,_agb =_fafa .connComponentsBB (connectivity );_agb !=nil {return nil ,_c .Wrap (_agb ,_aedc ,"");};}else {if _cfaaf ,_agb =_fafa .connComponentsBitmapsBB (bms ,connectivity );_agb !=nil {return nil ,_c .Wrap (_agb ,_aedc ,"");};};return _cfaaf ,nil ;};func (_aabb *Bitmap )nextOnPixel (_gcce ,_dfdd int )(_eee _cc .Point ,_aeb bool ,_cbd error ){const _agga ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_eee ,_aeb ,_cbd =_aabb .nextOnPixelLow (_aabb .Width ,_aabb .Height ,_aabb .RowStride ,_gcce ,_dfdd );if _cbd !=nil {return _eee ,false ,_c .Wrap (_cbd ,_agga ,"");};return _eee ,_aeb ,nil ;};func (_cga *Bitmap )String ()string {var _cea ="\u000a";for _edag :=0;_edag < _cga .Height ;_edag ++{var _ccd string ;for _gbgg :=0;_gbgg < _cga .Width ;_gbgg ++{_beaa :=_cga .GetPixel (_gbgg ,_edag );if _beaa {_ccd +="\u0031";}else {_ccd +="\u0030";};};_cea +=_ccd +"\u000a";};return _cea ;};func TstWordBitmapWithSpaces (t *_f .T ,scale ...int )*Bitmap {_fcbd :=1;if len (scale )> 0{_fcbd =scale [0];};_gega :=3;_gaedd :=9+7+15+2*_gega +2*_gega ;_dbdf :=5+_gega +5+2*_gega ;_dgdb :=New (_gaedd *_fcbd ,_dbdf *_fcbd );_fcbe :=&Bitmaps {};var _efa *int ;_gega *=_fcbd ;_fbbgf :=_gega ;_efa =&_fbbgf ;_befbd :=_gega ;_ffec :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,_gega );_ffec =TstISymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,_gega );_ffec =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,0);*_efa =_gega ;_befbd =5*_fcbd +_gega ;_ffec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,_gega );_ffec =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,1*_fcbd );_ffec =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fcbe ,_ffec ,_efa ,_befbd ,0);TstWriteSymbols (t ,_fcbe ,_dgdb );return _dgdb ;};func (_gaaf Points )GetIntY (i int )(int ,error ){if i >=len (_gaaf ){return 0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return int (_gaaf [i ].Y ),nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dcdg float64 ,_dgeg error ){const _eebc ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_c .Error (_eebc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_c .Error (_eebc ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_c .Error (_eebc ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_fea ,_cadb :=bm1 .Width ,bm1 .Height ;_dfee ,_dcea :=bm2 .Width ,bm2 .Height ;_fdfbd :=_fgbd (_fea -_dfee );if _fdfbd > maxDiffW {return 0,nil ;};_faaa :=_fgbd (_cadb -_dcea );if _faaa > maxDiffH {return 0,nil ;};var _ccbc ,_ddbb int ;if delX >=0{_ccbc =int (delX +0.5);}else {_ccbc =int (delX -0.5);};if delY >=0{_ddbb =int (delY +0.5);}else {_ddbb =int (delY -0.5);};_cbag :=_afbc (_ddbb ,0);_eaef :=_fbaef (_dcea +_ddbb ,_cadb );_cfdc :=bm1 .RowStride *_cbag ;_dbb :=bm2 .RowStride *(_cbag -_ddbb );_aef :=_afbc (_ccbc ,0);_cgc :=_fbaef (_dfee +_ccbc ,_fea );_edffb :=bm2 .RowStride ;var _abga ,_eggf int ;if _ccbc >=8{_abga =_ccbc >>3;_cfdc +=_abga ;_aef -=_abga <<3;_cgc -=_abga <<3;_ccbc &=7;}else if _ccbc <=-8{_eggf =-((_ccbc +7)>>3);_dbb +=_eggf ;_edffb -=_eggf ;_ccbc +=_eggf <<3;};if _aef >=_cgc ||_cbag >=_eaef {return 0,nil ;};_gfec :=(_cgc +7)>>3;var (_dcgc ,_ebef ,_gcec byte ;_dged ,_bffe ,_ceef int ;);switch {case _ccbc ==0:for _ceef =_cbag ;_ceef < _eaef ;_ceef ,_cfdc ,_dbb =_ceef +1,_cfdc +bm1 .RowStride ,_dbb +bm2 .RowStride {for _bffe =0;_bffe < _gfec ;_bffe ++{_gcec =bm1 .Data [_cfdc +_bffe ]&bm2 .Data [_dbb +_bffe ];_dged +=tab [_gcec ];};};case _ccbc > 0:if _edffb < _gfec {for _ceef =_cbag ;_ceef < _eaef ;_ceef ,_cfdc ,_dbb =_ceef +1,_cfdc +bm1 .RowStride ,_dbb +bm2 .RowStride {_dcgc ,_ebef =bm1 .Data [_cfdc ],bm2 .Data [_dbb ]>>uint (_ccbc );_gcec =_dcgc &_ebef ;_dged +=tab [_gcec ];for _bffe =1;_bffe < _edffb ;_bffe ++{_dcgc ,_ebef =bm1 .Data [_cfdc +_bffe ],(bm2 .Data [_dbb +_bffe ]>>uint (_ccbc ))|(bm2 .Data [_dbb +_bffe -1]<<uint (8-_ccbc ));_gcec =_dcgc &_ebef ;_dged +=tab [_gcec ];};_dcgc =bm1 .Data [_cfdc +_bffe ];_ebef =bm2 .Data [_dbb +_bffe -1]<<uint (8-_ccbc );_gcec =_dcgc &_ebef ;_dged +=tab [_gcec ];};}else {for _ceef =_cbag ;_ceef < _eaef ;_ceef ,_cfdc ,_dbb =_ceef +1,_cfdc +bm1 .RowStride ,_dbb +bm2 .RowStride {_dcgc ,_ebef =bm1 .Data [_cfdc ],bm2 .Data [_dbb ]>>uint (_ccbc );_gcec =_dcgc &_ebef ;_dged +=tab [_gcec ];for _bffe =1;_bffe < _gfec ;_bffe ++{_dcgc =bm1 .Data [_cfdc +_bffe ];_ebef =(bm2 .Data [_dbb +_bffe ]>>uint (_ccbc ))|(bm2 .Data [_dbb +_bffe -1]<<uint (8-_ccbc ));_gcec =_dcgc &_ebef ;_dged +=tab [_gcec ];};};};default:if _gfec < _edffb {for _ceef =_cbag ;_ceef < _eaef ;_ceef ,_cfdc ,_dbb =_ceef +1,_cfdc +bm1 .RowStride ,_dbb +bm2 .RowStride {for _bffe =0;_bffe < _gfec ;_bffe ++{_dcgc =bm1 .Data [_cfdc +_bffe ];_ebef =bm2 .Data [_dbb +_bffe ]<<uint (-_ccbc );_ebef |=bm2 .Data [_dbb +_bffe +1]>>uint (8+_ccbc );_gcec =_dcgc &_ebef ;_dged +=tab [_gcec ];};};}else {for _ceef =_cbag ;_ceef < _eaef ;_ceef ,_cfdc ,_dbb =_ceef +1,_cfdc +bm1 .RowStride ,_dbb +bm2 .RowStride {for _bffe =0;_bffe < _gfec -1;_bffe ++{_dcgc =bm1 .Data [_cfdc +_bffe ];_ebef =bm2 .Data [_dbb +_bffe ]<<uint (-_ccbc );_ebef |=bm2 .Data [_dbb +_bffe +1]>>uint (8+_ccbc );_gcec =_dcgc &_ebef ;_dged +=tab [_gcec ];};_dcgc =bm1 .Data [_cfdc +_bffe ];_ebef =bm2 .Data [_dbb +_bffe ]<<uint (-_ccbc );_gcec =_dcgc &_ebef ;_dged +=tab [_gcec ];};};};_dcdg =float64 (_dged )*float64 (_dged )/(float64 (area1 )*float64 (area2 ));return _dcdg ,nil ;};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _fgc (_ffed ,_aagb ,_gbd *Bitmap )(*Bitmap ,error ){const _dcac ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _aagb ==nil {return nil ,_c .Error (_dcac ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _gbd ==nil {return nil ,_c .Error (_dcac ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ffed ==_gbd {return nil ,_c .Error (_dcac ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_aagb .SizesEqual (_gbd ){_fg .Log .Debug ("\u0025s\u0020\u002d \u0042\u0069\u0074\u006da\u0070\u0020\u0027b\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074 e\u0071\u0075\u0061l\u0020\u0073i\u007a\u0065\u0020\u0077\u0069\u0074h\u0020\u0027b\u0032\u0027",_dcac );};var _bgd error ;if _ffed ,_bgd =_ecdb (_ffed ,_aagb );_bgd !=nil {return nil ,_c .Wrap (_bgd ,_dcac ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _bgd =_ffed .RasterOperation (0,0,_ffed .Width ,_ffed .Height ,PixSrcXorDst ,_gbd ,0,0);_bgd !=nil {return nil ,_c .Wrap (_bgd ,_dcac ,"");};return _ffed ,nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_cc .Rectangle ;};func (_gcb *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_gcagb *Bitmaps ,_dgfbb *Boxes ,_addgg error ){const _babd ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _gcb ==nil {return nil ,nil ,_c .Error (_babd ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_c .Error (_babd ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074s\u0020\u0070\u0061\u0072\u0061\u006d\u0065t\u0065\u0072");};if _gcb .Zero (){_dgfbb =&Boxes {};_gcagb =&Bitmaps {};return _gcagb ,_dgfbb ,nil ;};switch components {case ComponentConn :_gcagb =&Bitmaps {};if _dgfbb ,_addgg =_gcb .ConnComponents (_gcagb ,8);_addgg !=nil {return nil ,nil ,_c .Wrap (_addgg ,_babd ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentCharacters :_fgce ,_ebbad :=MorphSequence (_gcb ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _ebbad !=nil {return nil ,nil ,_c .Wrap (_ebbad ,_babd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _fg .Log .IsLogLevel (_fg .LogLevelTrace ){_fg .Log .Trace ("\u0043o\u006d\u0070o\u006e\u0065\u006e\u0074C\u0068\u0061\u0072a\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074ma\u0070\u0020\u0061f\u0074\u0065r\u0020\u0063\u006c\u006f\u0073\u0069n\u0067\u003a \u0025\u0073",_fgce .String ());};_bafe :=&Bitmaps {};_dgfbb ,_ebbad =_fgce .ConnComponents (_bafe ,8);if _ebbad !=nil {return nil ,nil ,_c .Wrap (_ebbad ,_babd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _fg .Log .IsLogLevel (_fg .LogLevelTrace ){_fg .Log .Trace ("\u0043\u006f\u006d\u0070\u006f\u006ee\u006e\u0074\u0043\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0020a\u0066\u0074\u0065\u0072\u0020\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076i\u0074y\u003a\u0020\u0025\u0073",_bafe .String ());};if _gcagb ,_ebbad =_bafe .ClipToBitmap (_gcb );_ebbad !=nil {return nil ,nil ,_c .Wrap (_ebbad ,_babd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_bbfa :=1;var _fcdd *Bitmap ;switch {case _gcb .XResolution <=200:_fcdd =_gcb ;case _gcb .XResolution <=400:_bbfa =2;_fcdd ,_addgg =_ag (_gcb ,1,0,0,0);if _addgg !=nil {return nil ,nil ,_c .Wrap (_addgg ,_babd ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");};default:_bbfa =4;_fcdd ,_addgg =_ag (_gcb ,1,1,0,0);if _addgg !=nil {return nil ,nil ,_c .Wrap (_addgg ,_babd ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");};};_ffeg ,_ ,_ffgc :=_bcbd (_fcdd );if _ffgc !=nil {return nil ,nil ,_c .Wrap (_ffgc ,_babd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_dfda ,_ffgc :=_bbbca (_ffeg ,_bbfa );if _ffgc !=nil {return nil ,nil ,_c .Wrap (_ffgc ,_babd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_ffcdg :=&Bitmaps {};if _dgfbb ,_ffgc =_dfda .ConnComponents (_ffcdg ,4);_ffgc !=nil {return nil ,nil ,_c .Wrap (_ffgc ,_babd ,"\u0077\u006f\u0072\u0064\u0020\u0070r\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u002c\u0020\u0063\u006f\u006en\u0065\u0063\u0074\u0020\u0065\u0078\u0070a\u006e\u0064\u0065\u0064");};if _gcagb ,_ffgc =_ffcdg .ClipToBitmap (_gcb );_ffgc !=nil {return nil ,nil ,_c .Wrap (_ffgc ,_babd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_gcagb ,_addgg =_gcagb .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _addgg !=nil {return nil ,nil ,_c .Wrap (_addgg ,_babd ,"");};_dgfbb ,_addgg =_dgfbb .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _addgg !=nil {return nil ,nil ,_c .Wrap (_addgg ,_babd ,"");};return _gcagb ,_dgfbb ,nil ;};func (_defea *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _cfaed ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_defea .Values )==0{return nil ,_c .Error (_cfaed ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_gedf :=&BitmapsArray {};_defea .SortByHeight ();_ggdb :=-1;_ebgfg :=-1;for _gcbd :=0;_gcbd < len (_defea .Values );_gcbd ++{_egcg :=_defea .Values [_gcbd ].Height ;if _egcg > _ggdb {_ggdb =_egcg ;_ebgfg ++;_gedf .Values =append (_gedf .Values ,&Bitmaps {});};_gedf .Values [_ebgfg ].AddBitmap (_defea .Values [_gcbd ]);};return _gedf ,nil ;};func TstImageBitmapData ()[]byte {return _abaab .Data };func _gged (_acbd ,_daed *Bitmap ,_ffcb ,_ecge ,_dbda ,_cbgb ,_dee int ,_beac CombinationOperator )error {var _dbgg int ;_dabf :=func (){_dbgg ++;_dbda +=_daed .RowStride ;_cbgb +=_acbd .RowStride ;_dee +=_acbd .RowStride };for _dbgg =_ffcb ;_dbgg < _ecge ;_dabf (){_bdd :=_dbda ;for _ebag :=_cbgb ;_ebag <=_dee ;_ebag ++{_edefd ,_ccda :=_daed .GetByte (_bdd );if _ccda !=nil {return _ccda ;};_effe ,_ccda :=_acbd .GetByte (_ebag );if _ccda !=nil {return _ccda ;};if _ccda =_daed .SetByte (_bdd ,_eceb (_edefd ,_effe ,_beac ));_ccda !=nil {return _ccda ;};_bdd ++;};};return nil ;};func _cgaf (_gggga ,_faac *Bitmap ,_aeeaf ,_fdbf int )(*Bitmap ,error ){const _bbcf ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _faac ==nil {_fg .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");return nil ,_c .Error (_bbcf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _aeeaf < 1||_fdbf < 1{return nil ,_c .Error (_bbcf ,"\u0068\u0053\u007a\u0069\u0065 \u0061\u006e\u0064\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u0061\u0072\u0065 \u006e\u006f\u0020\u0067\u0072\u0065\u0061\u0074\u0065\u0072\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");};if _aeeaf ==1&&_fdbf ==1{_dgadb ,_dfad :=_ecdb (_gggga ,_faac );if _dfad !=nil {return nil ,_c .Wrap (_dfad ,_bbcf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _dgadb ,nil ;};if _aeeaf ==1||_fdbf ==1{_dcad :=SelCreateBrick (_fdbf ,_aeeaf ,_fdbf /2,_aeeaf /2,SelHit );_fadfd ,_caga :=_cfge (_gggga ,_faac ,_dcad );if _caga !=nil {return nil ,_c .Wrap (_caga ,_bbcf ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fadfd ,nil ;};_fcbc :=SelCreateBrick (1,_aeeaf ,0,_aeeaf /2,SelHit );_ddba :=SelCreateBrick (_fdbf ,1,_fdbf /2,0,SelHit );_edcf ,_eebfa :=_cfge (nil ,_faac ,_fcbc );if _eebfa !=nil {return nil ,_c .Wrap (_eebfa ,_bbcf ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_gggga ,_eebfa =_cfge (_gggga ,_edcf ,_ddba );if _eebfa !=nil {return nil ,_c .Wrap (_eebfa ,_bbcf ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _gggga ,nil ;};type BoundaryCondition int ;func (_bbccd *Bitmaps )selectByIndexes (_fbade []int )(*Bitmaps ,error ){_ccag :=&Bitmaps {};for _ ,_fgebb :=range _fbade {_egcgc ,_gfecc :=_bbccd .GetBitmap (_fgebb );if _gfecc !=nil {return nil ,_c .Wrap (_gfecc ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_ccag .AddBitmap (_egcgc );};return _ccag ,nil ;};func _cbaa (_fadef *Bitmap ,_ffdb ,_ccfc int ,_fcgc ,_ccdaf int ,_debf RasterOperator ,_ebfg *Bitmap ,_dgaad ,_bfeb int )error {var _acgb ,_dbac ,_afcf ,_fbcaf int ;if _ffdb < 0{_dgaad -=_ffdb ;_fcgc +=_ffdb ;_ffdb =0;};if _dgaad < 0{_ffdb -=_dgaad ;_fcgc +=_dgaad ;_dgaad =0;};_acgb =_ffdb +_fcgc -_fadef .Width ;if _acgb > 0{_fcgc -=_acgb ;};_dbac =_dgaad +_fcgc -_ebfg .Width ;if _dbac > 0{_fcgc -=_dbac ;};if _ccfc < 0{_bfeb -=_ccfc ;_ccdaf +=_ccfc ;_ccfc =0;};if _bfeb < 0{_ccfc -=_bfeb ;_ccdaf +=_bfeb ;_bfeb =0;};_afcf =_ccfc +_ccdaf -_fadef .Height ;if _afcf > 0{_ccdaf -=_afcf ;};_fbcaf =_bfeb +_ccdaf -_ebfg .Height ;if _fbcaf > 0{_ccdaf -=_fbcaf ;};if _fcgc <=0||_ccdaf <=0{return nil ;};var _gafb error ;switch {case _ffdb &7==0&&_dgaad &7==0:_gafb =_ggfd (_fadef ,_ffdb ,_ccfc ,_fcgc ,_ccdaf ,_debf ,_ebfg ,_dgaad ,_bfeb );case _ffdb &7==_dgaad &7:_gafb =_cebb (_fadef ,_ffdb ,_ccfc ,_fcgc ,_ccdaf ,_debf ,_ebfg ,_dgaad ,_bfeb );default:_gafb =_bbcfd (_fadef ,_ffdb ,_ccfc ,_fcgc ,_ccdaf ,_debf ,_ebfg ,_dgaad ,_bfeb );};if _gafb !=nil {return _c .Wrap (_gafb ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};type fillSegment struct{_gedg int ;_adaba int ;_edac int ;_gdagbd int ;};func (_edbb *byHeight )Less (i ,j int )bool {return _edbb .Values [i ].Height < _edbb .Values [j ].Height };func (_facd *Bitmap )SetByte (index int ,v byte )error {if index > len (_facd .Data )-1||index < 0{return _c .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index );};_facd .Data [index ]=v ;return nil ;};func TstCSymbol (t *_f .T )*Bitmap {t .Helper ();_caca :=New (6,6);_d .NoError (t ,_caca .SetPixel (1,0,1));_d .NoError (t ,_caca .SetPixel (2,0,1));_d .NoError (t ,_caca .SetPixel (3,0,1));_d .NoError (t ,_caca .SetPixel (4,0,1));_d .NoError (t ,_caca .SetPixel (0,1,1));_d .NoError (t ,_caca .SetPixel (5,1,1));_d .NoError (t ,_caca .SetPixel (0,2,1));_d .NoError (t ,_caca .SetPixel (0,3,1));_d .NoError (t ,_caca .SetPixel (0,4,1));_d .NoError (t ,_caca .SetPixel (5,4,1));_d .NoError (t ,_caca .SetPixel (1,5,1));_d .NoError (t ,_caca .SetPixel (2,5,1));_d .NoError (t ,_caca .SetPixel (3,5,1));_d .NoError (t ,_caca .SetPixel (4,5,1));return _caca ;};func _fdca (_fdgd ,_eage *Bitmap ,_gdgf *Selection )(*Bitmap ,error ){const _fafb ="\u006f\u0070\u0065\u006e";var _cddde error ;_fdgd ,_cddde =_cgadc (_fdgd ,_eage ,_gdgf );if _cddde !=nil {return nil ,_c .Wrap (_cddde ,_fafb ,"");};_fdac ,_cddde :=_gfbc (nil ,_eage ,_gdgf );if _cddde !=nil {return nil ,_c .Wrap (_cddde ,_fafb ,"");};_ ,_cddde =_cfge (_fdgd ,_fdac ,_gdgf );if _cddde !=nil {return nil ,_c .Wrap (_cddde ,_fafb ,"");};return _fdgd ,nil ;};func TstGetScaledSymbol (t *_f .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_dgaac ,_abgaf :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_d .NoError (t ,_abgaf );return _dgaac ;};func (_ggfe *Bitmap )countPixels ()int {var (_gfc int ;_dbde uint8 ;_bgf byte ;_abc int ;);_badb :=_ggfe .RowStride ;_eebf :=uint (_ggfe .Width &0x07);if _eebf !=0{_dbde =uint8 ((0xff<<(8-_eebf ))&0xff);_badb --;};for _adefg :=0;_adefg < _ggfe .Height ;_adefg ++{for _abc =0;_abc < _badb ;_abc ++{_bgf =_ggfe .Data [_adefg *_ggfe .RowStride +_abc ];_gfc +=int (_bd [_bgf ]);};if _eebf !=0{_gfc +=int (_bd [_ggfe .Data [_adefg *_ggfe .RowStride +_abc ]&_dbde ]);};};return _gfc ;};func (_gga *Bitmap )resizeImageData (_abgd *Bitmap )error {if _abgd ==nil {return _c .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gga .SizesEqual (_abgd ){return nil ;};_gga .Data =make ([]byte ,len (_abgd .Data ));_gga .Width =_abgd .Width ;_gga .Height =_abgd .Height ;_gga .RowStride =_abgd .RowStride ;return nil ;};func (_bfca MorphProcess )verify (_cebe int ,_bbbed ,_eafb *int )error {const _gdcg ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _bfca .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_bfca .Arguments )!=2{return _c .Error (_gdcg ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0064\u0027\u002c\u0020\u0027\u0065\u0027\u002c \u0027\u006f\u0027\u002c\u0020\u0027\u0063\u0027\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0032\u0020\u0061r\u0067\u0075\u006d\u0065\u006et\u0073");};_feec ,_fcdc :=_bfca .getWidthHeight ();if _feec <=0||_fcdc <=0{return _c .Error (_gdcg ,"O\u0070er\u0061t\u0069o\u006e\u003a\u0020\u0027\u0064'\u002c\u0020\u0027e\u0027\u002c\u0020\u0027\u006f'\u002c\u0020\u0027c\u0027\u0020\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073 \u0062\u006f\u0074h w\u0069\u0064\u0074\u0068\u0020\u0061n\u0064\u0020\u0068\u0065\u0069\u0067\u0068\u0074\u0020\u0074\u006f\u0020b\u0065 \u003e\u003d\u0020\u0030");};case MopRankBinaryReduction :_aaf :=len (_bfca .Arguments );*_bbbed +=_aaf ;if _aaf < 1||_aaf > 4{return _c .Error (_gdcg ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0072\u0027\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061s\u0074\u0020\u0031\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020\u006d\u006fs\u0074\u0020\u0034\u0020\u0061\u0072g\u0075\u006d\u0065n\u0074\u0073");};for _dfce :=0;_dfce < _aaf ;_dfce ++{if _bfca .Arguments [_dfce ]< 1||_bfca .Arguments [_dfce ]> 4{return _c .Error (_gdcg ,"\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0052\u0065\u0064\u0075\u0063\u0074\u0069\u006f\u006e\u0020\u006c\u0065\u0076\u0065\u006c\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 \u00280\u002c\u0020\u0034\u003e");};};case MopReplicativeBinaryExpansion :if len (_bfca .Arguments )==0{return _c .Error (_gdcg ,"\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074i\u0076\u0065\u0042in\u0061\u0072\u0079\u0045\u0078\u0070a\u006e\u0073\u0069\u006f\u006e\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020o\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006de\u006e\u0074");};_cfcc :=_bfca .Arguments [0];if _cfcc !=2&&_cfcc !=4&&_cfcc !=8{return _c .Error (_gdcg ,"R\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u0076\u0065\u0042\u0069\u006e\u0061\u0072\u0079\u0045\u0078\u0070\u0061\u006e\u0073\u0069\u006f\u006e\u0020m\u0075s\u0074\u0020\u0062\u0065 \u006f\u0066 \u0066\u0061\u0063\u0074\u006f\u0072\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};*_bbbed -=_fefe [_cfcc /4];case MopAddBorder :if len (_bfca .Arguments )==0{return _c .Error (_gdcg ,"\u0041\u0064\u0064B\u006f\u0072\u0064\u0065r\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006f\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074");};_fbgfd :=_bfca .Arguments [0];if _cebe > 0{return _c .Error (_gdcg ,"\u0041\u0064\u0064\u0042\u006f\u0072\u0064\u0065\u0072\u0020\u006d\u0075\u0073t\u0020\u0062\u0065\u0020\u0061\u0020f\u0069\u0072\u0073\u0074\u0020\u006d\u006f\u0072\u0070\u0068\u0020\u0070\u0072o\u0063\u0065\u0073\u0073");};if _fbgfd < 1{return _c .Error (_gdcg ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_eafb =_fbgfd ;};return nil ;};func (_fafc *ClassedPoints )XAtIndex (i int )float32 {return (*_fafc .Points )[_fafc .IntSlice [i ]].X };func _ecdb (_age ,_acfa *Bitmap )(*Bitmap ,error ){if _acfa ==nil {return nil ,_c .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _acfa ==_age {return _age ,nil ;};if _age ==nil {_age =_acfa .createTemplate ();copy (_age .Data ,_acfa .Data );return _age ,nil ;};_acda :=_age .resizeImageData (_acfa );if _acda !=nil {return nil ,_c .Wrap (_acda ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");};_age .Text =_acfa .Text ;copy (_age .Data ,_acfa .Data );return _age ,nil ;};func (_ecceg *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_eeef *Boxes ,_ffca error ){const _egfd ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _ecceg ==nil {return nil ,_c .Error (_egfd ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_ecceg )==0{return _ecceg ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_egfd ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_c .Errorf (_egfd ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );};_egfb :=_ecceg .makeSizeIndicator (width ,height ,tp ,relation );_daec ,_ffca :=_ecceg .selectWithIndicator (_egfb );if _ffca !=nil {return nil ,_c .Wrap (_ffca ,_egfd ,"");};return _daec ,nil ;};func _acc (_cf *Bitmap ,_eac ,_fbdb int )(*Bitmap ,error ){const _ge ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _cf ==nil {return nil ,_c .Error (_ge ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _eac <=0||_fbdb <=0{return nil ,_c .Error (_ge ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0073\u0063\u0061l\u0065\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u003a\u0020<\u003d\u0020\u0030");};if _eac ==_fbdb {if _eac ==1{_acg ,_bab :=_ecdb (nil ,_cf );if _bab !=nil {return nil ,_c .Wrap (_bab ,_ge ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _acg ,nil ;};if _eac ==2||_eac ==4||_eac ==8{_fgf ,_eg :=_dcc (_cf ,_eac );if _eg !=nil {return nil ,_c .Wrap (_eg ,_ge ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _fgf ,nil ;};};_bb :=_eac *_cf .Width ;_dad :=_fbdb *_cf .Height ;_dfa :=New (_bb ,_dad );_ebc :=_dfa .RowStride ;var (_adf ,_eaga ,_ddb ,_ec ,_bae int ;_cbb byte ;_adb error ;);for _eaga =0;_eaga < _cf .Height ;_eaga ++{_adf =_fbdb *_eaga *_ebc ;for _ddb =0;_ddb < _cf .Width ;_ddb ++{if _fdc :=_cf .GetPixel (_ddb ,_eaga );_fdc {_bae =_eac *_ddb ;for _ec =0;_ec < _eac ;_ec ++{_dfa .setBit (_adf *8+_bae +_ec );};};};for _ec =1;_ec < _fbdb ;_ec ++{_dcbb :=_adf +_ec *_ebc ;for _ada :=0;_ada < _ebc ;_ada ++{if _cbb ,_adb =_dfa .GetByte (_adf +_ada );_adb !=nil {return nil ,_c .Wrapf (_adb ,_ge ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_ec );};if _adb =_dfa .SetByte (_dcbb +_ada ,_cbb );_adb !=nil {return nil ,_c .Wrap (_adb ,_ge ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _dfa ,nil ;};func _feae (_caeg ,_gfga *Bitmap ,_bbe ,_cbad int )(_fagbb error ){const _fgebd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_eafd ,_effg ,_befc ,_cagd int ;_ecef ,_cbcg ,_gefg ,_dgcd ,_cfbf ,_dbaf ,_cbgf ,_cbgfa byte ;);for _eafd =0;_eafd < _bbe ;_eafd ++{_befc =_eafd *_caeg .RowStride ;_cagd =_eafd *_gfga .RowStride ;for _effg =0;_effg < _cbad ;_effg ++{if _ecef ,_fagbb =_caeg .GetByte (_befc +_effg );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _cbcg ,_fagbb =_gfga .GetByte (_cagd +_effg );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _eafd > 0{if _gefg ,_fagbb =_caeg .GetByte (_befc -_caeg .RowStride +_effg );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_ecef |=_gefg |(_gefg <<1)|(_gefg >>1);if _effg > 0{if _cbgfa ,_fagbb =_caeg .GetByte (_befc -_caeg .RowStride +_effg -1);_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_ecef |=_cbgfa <<7;};if _effg < _cbad -1{if _cbgfa ,_fagbb =_caeg .GetByte (_befc -_caeg .RowStride +_effg +1);_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_ecef |=_cbgfa >>7;};};if _effg > 0{if _dgcd ,_fagbb =_caeg .GetByte (_befc +_effg -1);_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u006a\u0020\u003e \u0030");};_ecef |=_dgcd <<7;};_ecef &=_cbcg ;if _ecef ==0||^_ecef ==0{if _fagbb =_caeg .SetByte (_befc +_effg ,_ecef );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_cbgf =_ecef ;_ecef =(_ecef |(_ecef >>1)|(_ecef <<1))&_cbcg ;if (_ecef ^_cbgf )==0{if _fagbb =_caeg .SetByte (_befc +_effg ,_ecef );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _eafd =_bbe -1;_eafd >=0;_eafd --{_befc =_eafd *_caeg .RowStride ;_cagd =_eafd *_gfga .RowStride ;for _effg =_cbad -1;_effg >=0;_effg --{if _ecef ,_fagbb =_caeg .GetByte (_befc +_effg );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _cbcg ,_fagbb =_gfga .GetByte (_cagd +_effg );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _eafd < _bbe -1{if _cfbf ,_fagbb =_caeg .GetByte (_befc +_caeg .RowStride +_effg );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_ecef |=_cfbf |(_cfbf <<1)|_cfbf >>1;if _effg > 0{if _cbgfa ,_fagbb =_caeg .GetByte (_befc +_caeg .RowStride +_effg -1);_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0069\u0020\u003c h\u002d\u0031\u0020\u0026\u0020\u006a\u0020\u003e\u00200\u0020-\u003e \u0067e\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};_ecef |=_cbgfa <<7;};if _effg < _cbad -1{if _cbgfa ,_fagbb =_caeg .GetByte (_befc +_caeg .RowStride +_effg +1);_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0069\u0020\u003c\u0020\u0068\u002d\u0031\u0020\u0026\u0026\u0020\u006a\u0020\u003c\u0077\u0070\u006c\u002d\u0031\u0020\u002d\u003e\u0020\u0067e\u0074\u0020\u0073\u006f\u0075r\u0063\u0065 \u0062\u0079\u0074\u0065");};_ecef |=_cbgfa >>7;};};if _effg < _cbad -1{if _dbaf ,_fagbb =_caeg .GetByte (_befc +_effg +1);_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u006a\u0020<\u0020\u0077\u0070\u006c\u0020\u002d\u0031\u0020\u002d\u003e\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020by\u0074\u0065");};_ecef |=_dbaf >>7;};_ecef &=_cbcg ;if _ecef ==0||(^_ecef )==0{if _fagbb =_caeg .SetByte (_befc +_effg ,_ecef );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_cbgf =_ecef ;_ecef =(_ecef |(_ecef >>1)|(_ecef <<1))&_cbcg ;if (_ecef ^_cbgf )==0{if _fagbb =_caeg .SetByte (_befc +_effg ,_ecef );_fagbb !=nil {return _c .Wrap (_fagbb ,_fgebd ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");};break ;};};};};return nil ;};func (_dde *Bitmap )SizesEqual (s *Bitmap )bool {if _dde ==s {return true ;};if _dde .Width !=s .Width ||_dde .Height !=s .Height {return false ;};return true ;};func init (){const _fabcg ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_fbbb =New (50,40);var _ddbdc error ;_fbbb ,_ddbdc =_fbbb .AddBorder (2,1);if _ddbdc !=nil {panic (_c .Wrap (_ddbdc ,_fabcg ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_abaab ,_ddbdc =NewWithData (50,22,_dfgcd );if _ddbdc !=nil {panic (_c .Wrap (_ddbdc ,_fabcg ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func _dggge (_dcbcd *Bitmap ,_fbcbg ,_acdab ,_gdad ,_cgcd int ,_bcgd RasterOperator ,_cgfad *Bitmap ,_fagb ,_aac int )error {const _eece ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _dcbcd ==nil {return _c .Error (_eece ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _bcgd ==PixDst {return nil ;};switch _bcgd {case PixClr ,PixSet ,PixNotDst :_beeg (_dcbcd ,_fbcbg ,_acdab ,_gdad ,_cgcd ,_bcgd );return nil ;};if _cgfad ==nil {_fg .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");return _c .Error (_eece ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ebcb :=_cbaa (_dcbcd ,_fbcbg ,_acdab ,_gdad ,_cgcd ,_bcgd ,_cgfad ,_fagb ,_aac );_ebcb !=nil {return _c .Wrap (_ebcb ,_eece ,"");};return nil ;};func (_caa *Bitmap )setTwoBytes (_cdgf int ,_gfcf uint16 )error {if _cdgf +1> len (_caa .Data )-1{return _c .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_cdgf );};_caa .Data [_cdgf ]=byte ((_gfcf &0xff00)>>8);_caa .Data [_cdgf +1]=byte (_gfcf &0xff);return nil ;};func (_dcbbd *Bitmap )setEightFullBytes (_ebae int ,_bdg uint64 )error {if _ebae +7> len (_dcbbd .Data )-1{return _c .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};_dcbbd .Data [_ebae ]=byte ((_bdg &0xff00000000000000)>>56);_dcbbd .Data [_ebae +1]=byte ((_bdg &0xff000000000000)>>48);_dcbbd .Data [_ebae +2]=byte ((_bdg &0xff0000000000)>>40);_dcbbd .Data [_ebae +3]=byte ((_bdg &0xff00000000)>>32);_dcbbd .Data [_ebae +4]=byte ((_bdg &0xff000000)>>24);_dcbbd .Data [_ebae +5]=byte ((_bdg &0xff0000)>>16);_dcbbd .Data [_ebae +6]=byte ((_bdg &0xff00)>>8);_dcbbd .Data [_ebae +7]=byte (_bdg &0xff);return nil ;};func NewClassedPoints (points *Points ,classes _af .IntSlice )(*ClassedPoints ,error ){const _ggbc ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_c .Error (_ggbc ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_c .Error (_ggbc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_gcecg :=&ClassedPoints {Points :points ,IntSlice :classes };if _bbac :=_gcecg .validateIntSlice ();_bbac !=nil {return nil ,_c .Wrap (_bbac ,_ggbc ,"");};return _gcecg ,nil ;};func TstFrameBitmapData ()[]byte {return _fbbb .Data };func (_gbeb *Selection )findMaxTranslations ()(_ffcdcc ,_fgadb ,_gedd ,_gfdea int ){for _fcgcb :=0;_fcgcb < _gbeb .Height ;_fcgcb ++{for _cfbcc :=0;_cfbcc < _gbeb .Width ;_cfbcc ++{if _gbeb .Data [_fcgcb ][_cfbcc ]==SelHit {_ffcdcc =_afbc (_ffcdcc ,_gbeb .Cx -_cfbcc );_fgadb =_afbc (_fgadb ,_gbeb .Cy -_fcgcb );_gedd =_afbc (_gedd ,_cfbcc -_gbeb .Cx );_gfdea =_afbc (_gfdea ,_fcgcb -_gbeb .Cy );};};};return _ffcdcc ,_fgadb ,_gedd ,_gfdea ;};func (_ebbec *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _cbgba ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";if i >=_ebbec .IntSlice .Size (){return 0,_c .Errorf (_cbgba ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );};return int (_ebbec .XAtIndex (i )),nil ;};func TstPSymbol (t *_f .T )*Bitmap {t .Helper ();_gfad :=New (5,8);_d .NoError (t ,_gfad .SetPixel (0,0,1));_d .NoError (t ,_gfad .SetPixel (1,0,1));_d .NoError (t ,_gfad .SetPixel (2,0,1));_d .NoError (t ,_gfad .SetPixel (3,0,1));_d .NoError (t ,_gfad .SetPixel (4,1,1));_d .NoError (t ,_gfad .SetPixel (0,1,1));_d .NoError (t ,_gfad .SetPixel (4,2,1));_d .NoError (t ,_gfad .SetPixel (0,2,1));_d .NoError (t ,_gfad .SetPixel (4,3,1));_d .NoError (t ,_gfad .SetPixel (0,3,1));_d .NoError (t ,_gfad .SetPixel (0,4,1));_d .NoError (t ,_gfad .SetPixel (1,4,1));_d .NoError (t ,_gfad .SetPixel (2,4,1));_d .NoError (t ,_gfad .SetPixel (3,4,1));_d .NoError (t ,_gfad .SetPixel (0,5,1));_d .NoError (t ,_gfad .SetPixel (0,6,1));_d .NoError (t ,_gfad .SetPixel (0,7,1));return _gfad ;};type Points []Point ;func (_bged *Boxes )Add (box *_cc .Rectangle )error {if _bged ==nil {return _c .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};*_bged =append (*_bged ,box );return nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dggge (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _dgb (_gba ,_bge *Bitmap ,_afb int ,_efd []byte ,_fde int )(_ade error ){const _afc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_bef ,_geg ,_edd ,_dba ,_ebb ,_ead ,_ecg ,_baeb int ;_gaf ,_edc ,_bf ,_dcd uint32 ;_edefg ,_fedb byte ;_adef uint16 ;);_bcc :=make ([]byte ,4);_dabd :=make ([]byte ,4);for _edd =0;_edd < _gba .Height -1;_edd ,_dba =_edd +2,_dba +1{_bef =_edd *_gba .RowStride ;_geg =_dba *_bge .RowStride ;for _ebb ,_ead =0,0;_ebb < _fde ;_ebb ,_ead =_ebb +4,_ead +1{for _ecg =0;_ecg < 4;_ecg ++{_baeb =_bef +_ebb +_ecg ;if _baeb <=len (_gba .Data )-1&&_baeb < _bef +_gba .RowStride {_bcc [_ecg ]=_gba .Data [_baeb ];}else {_bcc [_ecg ]=0x00;};_baeb =_bef +_gba .RowStride +_ebb +_ecg ;if _baeb <=len (_gba .Data )-1&&_baeb < _bef +(2*_gba .RowStride ){_dabd [_ecg ]=_gba .Data [_baeb ];}else {_dabd [_ecg ]=0x00;};};_gaf =_ac .BigEndian .Uint32 (_bcc );_edc =_ac .BigEndian .Uint32 (_dabd );_bf =_gaf &_edc ;_bf |=_bf <<1;_dcd =_gaf |_edc ;_dcd &=_dcd <<1;_edc =_bf |_dcd ;_edc &=0xaaaaaaaa;_gaf =_edc |(_edc <<7);_edefg =byte (_gaf >>24);_fedb =byte ((_gaf >>8)&0xff);_baeb =_geg +_ead ;if _baeb +1==len (_bge .Data )-1||_baeb +1>=_geg +_bge .RowStride {if _ade =_bge .SetByte (_baeb ,_efd [_edefg ]);_ade !=nil {return _c .Wrapf (_ade ,_afc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_baeb );};}else {_adef =(uint16 (_efd [_edefg ])<<8)|uint16 (_efd [_fedb ]);if _ade =_bge .setTwoBytes (_baeb ,_adef );_ade !=nil {return _c .Wrapf (_ade ,_afc ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_baeb );};_ead ++;};};};return nil ;};func (_ecf *Bitmap )setBit (_cdae int ){_ecf .Data [(_cdae >>3)]|=0x80>>uint (_cdae &7)};func (_fcca *Bitmap )addPadBits ()(_debb error ){const _cdg ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_gccg :=_fcca .Width %8;if _gccg ==0{return nil ;};_efca :=_fcca .Width /8;_gcab :=_de .NewReader (_fcca .Data );_eaa :=make ([]byte ,_fcca .Height *_fcca .RowStride );_ebab :=_de .NewWriterMSB (_eaa );_agg :=make ([]byte ,_efca );var (_ffe int ;_fga uint64 ;);for _ffe =0;_ffe < _fcca .Height ;_ffe ++{if _ ,_debb =_gcab .Read (_agg );_debb !=nil {return _c .Wrap (_debb ,_cdg ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_debb =_ebab .Write (_agg );_debb !=nil {return _c .Wrap (_debb ,_cdg ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _fga ,_debb =_gcab .ReadBits (byte (_gccg ));_debb !=nil {return _c .Wrap (_debb ,_cdg ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _debb =_ebab .WriteByte (byte (_fga )<<uint (8-_gccg ));_debb !=nil {return _c .Wrap (_debb ,_cdg ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_fcca .Data =_ebab .Data ();return nil ;};func (_caed Points )GetGeometry (i int )(_aeeb ,_adg float32 ,_cge error ){if i > len (_caed )-1{return 0,0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};_fagge :=_caed [i ];return _fagge .X ,_fagge .Y ,nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _ecdb (d ,s )};func _afed (_acf *Bitmap ,_gdd int ,_ccg []byte )(_ef *Bitmap ,_dff error ){const _deb ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _acf ==nil {return nil ,_c .Error (_deb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gdd < 1||_gdd > 4{return nil ,_c .Error (_deb ,"\u006c\u0065\u0076\u0065\u006c\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0069\u006e\u0020\u0073e\u0074\u0020\u007b\u0031\u002c\u0032\u002c\u0033\u002c\u0034\u007d");};if _acf .Height <=1{return nil ,_c .Errorf (_deb ,"\u0073o\u0075\u0072c\u0065\u0020\u0068e\u0069\u0067\u0068\u0074\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0061t\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0027\u0032\u0027\u0020-\u0020\u0069\u0073\u003a\u0020\u0027\u0025\u0064\u0027",_acf .Height );};_ef =New (_acf .Width /2,_acf .Height /2);if _ccg ==nil {_ccg =_bcg ();};_fegg :=_fbaef (_acf .RowStride ,2*_ef .RowStride );switch _gdd {case 1:_dff =_cec (_acf ,_ef ,_gdd ,_ccg ,_fegg );case 2:_dff =_dgb (_acf ,_ef ,_gdd ,_ccg ,_fegg );case 3:_dff =_bfa (_acf ,_ef ,_gdd ,_ccg ,_fegg );case 4:_dff =_beab (_acf ,_ef ,_gdd ,_ccg ,_fegg );};if _dff !=nil {return nil ,_dff ;};return _ef ,nil ;};type SizeComparison int ;func _gfbc (_bgbd ,_ebdg *Bitmap ,_eefa *Selection )(*Bitmap ,error ){const _deeb ="\u0065\u0072\u006fd\u0065";var (_gbbcg error ;_gfdg *Bitmap ;);_bgbd ,_gbbcg =_gfaa (_bgbd ,_ebdg ,_eefa ,&_gfdg );if _gbbcg !=nil {return nil ,_c .Wrap (_gbbcg ,_deeb ,"");};if _gbbcg =_bgbd .setAll ();_gbbcg !=nil {return nil ,_c .Wrap (_gbbcg ,_deeb ,"");};var _gagg SelectionValue ;for _gbf :=0;_gbf < _eefa .Height ;_gbf ++{for _daca :=0;_daca < _eefa .Width ;_daca ++{_gagg =_eefa .Data [_gbf ][_daca ];if _gagg ==SelHit {_gbbcg =_dggge (_bgbd ,_eefa .Cx -_daca ,_eefa .Cy -_gbf ,_ebdg .Width ,_ebdg .Height ,PixSrcAndDst ,_gfdg ,0,0);if _gbbcg !=nil {return nil ,_c .Wrap (_gbbcg ,_deeb ,"");};};};};if MorphBC ==SymmetricMorphBC {return _bgbd ,nil ;};_egaa ,_gccgb ,_dfbc ,_ffaf :=_eefa .findMaxTranslations ();if _egaa > 0{if _gbbcg =_bgbd .RasterOperation (0,0,_egaa ,_ebdg .Height ,PixClr ,nil ,0,0);_gbbcg !=nil {return nil ,_c .Wrap (_gbbcg ,_deeb ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _dfbc > 0{if _gbbcg =_bgbd .RasterOperation (_ebdg .Width -_dfbc ,0,_dfbc ,_ebdg .Height ,PixClr ,nil ,0,0);_gbbcg !=nil {return nil ,_c .Wrap (_gbbcg ,_deeb ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _gccgb > 0{if _gbbcg =_bgbd .RasterOperation (0,0,_ebdg .Width ,_gccgb ,PixClr ,nil ,0,0);_gbbcg !=nil {return nil ,_c .Wrap (_gbbcg ,_deeb ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _ffaf > 0{if _gbbcg =_bgbd .RasterOperation (0,_ebdg .Height -_ffaf ,_ebdg .Width ,_ffaf ,PixClr ,nil ,0,0);_gbbcg !=nil {return nil ,_c .Wrap (_gbbcg ,_deeb ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _bgbd ,nil ;};func (_afd *Bitmap )setFourBytes (_ebd int ,_egg uint32 )error {if _ebd +3> len (_afd .Data )-1{return _c .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_ebd );};_afd .Data [_ebd ]=byte ((_egg &0xff000000)>>24);_afd .Data [_ebd +1]=byte ((_egg &0xff0000)>>16);_afd .Data [_ebd +2]=byte ((_egg &0xff00)>>8);_afd .Data [_ebd +3]=byte (_egg &0xff);return nil ;}; |