2020-09-21 01:20:10 +00:00

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 (_fd "encoding/binary";_g "github.com/stretchr/testify/require";_dfc "github.com/unidoc/unipdf/v3/common";_cf "github.com/unidoc/unipdf/v3/internal/bitwise";_b "github.com/unidoc/unipdf/v3/internal/imageutil";_e "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_f "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_df "image";_cfc "math";_c "sort";_gd "strings";_a "testing";);func _eddg (_eaec *Bitmap ,_adde *_e .Stack ,_ccca ,_fcbf int )(_bcdfb *_df .Rectangle ,_bdbe error ){const _bgge ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _eaec ==nil {return nil ,_f .Error (_bgge ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _adde ==nil {return nil ,_f .Error (_bgge ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_dbcf ,_defd :=_eaec .Width ,_eaec .Height ;_fcec :=_dbcf -1;_bded :=_defd -1;if _ccca < 0||_ccca > _fcec ||_fcbf < 0||_fcbf > _bded ||!_eaec .GetPixel (_ccca ,_fcbf ){return nil ,nil ;};_cdec :=_df .Rect (100000,100000,0,0);if _bdbe =_fefgf (_adde ,_ccca ,_ccca ,_fcbf ,1,_bded ,&_cdec );_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bdbe =_fefgf (_adde ,_ccca ,_ccca ,_fcbf +1,-1,_bded ,&_cdec );_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_cdec .Min .X ,_cdec .Max .X =_ccca ,_ccca ;_cdec .Min .Y ,_cdec .Max .Y =_fcbf ,_fcbf ;var (_ddcf *fillSegment ;_bgbf int ;);for _adde .Len ()> 0{if _ddcf ,_bdbe =_cafa (_adde );_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"");};_fcbf =_ddcf ._gdba ;for _ccca =_ddcf ._dccc -1;_ccca >=0&&_eaec .GetPixel (_ccca ,_fcbf );_ccca --{if _bdbe =_eaec .SetPixel (_ccca ,_fcbf ,0);_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _ccca >=_ddcf ._dccc -1{for {for _ccca ++;_ccca <=_ddcf ._eccc +1&&_ccca <=_fcec &&!_eaec .GetPixel (_ccca ,_fcbf );_ccca ++{};_bgbf =_ccca ;if !(_ccca <=_ddcf ._eccc +1&&_ccca <=_fcec ){break ;};for ;_ccca <=_fcec &&_eaec .GetPixel (_ccca ,_fcbf );_ccca ++{if _bdbe =_eaec .SetPixel (_ccca ,_fcbf ,0);_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bdbe =_fefgf (_adde ,_bgbf ,_ccca -1,_ddcf ._gdba ,_ddcf ._faac ,_bded ,&_cdec );_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ccca > _ddcf ._eccc {if _bdbe =_fefgf (_adde ,_ddcf ._eccc +1,_ccca -1,_ddcf ._gdba ,-_ddcf ._faac ,_bded ,&_cdec );_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_bgbf =_ccca +1;if _bgbf < _ddcf ._dccc {if _bdbe =_fefgf (_adde ,_bgbf ,_ddcf ._dccc -1,_ddcf ._gdba ,-_ddcf ._faac ,_bded ,&_cdec );_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_ccca =_ddcf ._dccc ;for {for ;_ccca <=_fcec &&_eaec .GetPixel (_ccca ,_fcbf );_ccca ++{if _bdbe =_eaec .SetPixel (_ccca ,_fcbf ,0);_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bdbe =_fefgf (_adde ,_bgbf ,_ccca -1,_ddcf ._gdba ,_ddcf ._faac ,_bded ,&_cdec );_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ccca > _ddcf ._eccc {if _bdbe =_fefgf (_adde ,_ddcf ._eccc +1,_ccca -1,_ddcf ._gdba ,-_ddcf ._faac ,_bded ,&_cdec );_bdbe !=nil {return nil ,_f .Wrap (_bdbe ,_bgge ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _ccca ++;_ccca <=_ddcf ._eccc +1&&_ccca <=_fcec &&!_eaec .GetPixel (_ccca ,_fcbf );_ccca ++{};_bgbf =_ccca ;if !(_ccca <=_ddcf ._eccc +1&&_ccca <=_fcec ){break ;};};};_cdec .Max .X ++;_cdec .Max .Y ++;return &_cdec ,nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _cffb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_fdaa ,_cdcg :=p1 .Width ,p1 .Height ;_egc ,_ebca :=p3 .Width ,p3 .Height ;if _e .Abs (_fdaa -_egc )> maxDiffW {return false ,nil ;};if _e .Abs (_cdcg -_ebca )> maxDiffH {return false ,nil ;};_eggc :=int (delX +_e .Sign (delX )*0.5);_aeff :=int (delY +_e .Sign (delY )*0.5);var _bdaf error ;_acbebe :=p1 .CreateTemplate ();if _bdaf =_acbebe .RasterOperation (0,0,_fdaa ,_cdcg ,PixSrc ,p1 ,0,0);_bdaf !=nil {return false ,_f .Wrap (_bdaf ,_cffb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bdaf =_acbebe .RasterOperation (_eggc ,_aeff ,_fdaa ,_cdcg ,PixNotSrcAndDst ,p4 ,0,0);_bdaf !=nil {return false ,_f .Wrap (_bdaf ,_cffb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _acbebe .Zero (){return false ,nil ;};if _bdaf =_acbebe .RasterOperation (_eggc ,_aeff ,_egc ,_ebca ,PixSrc ,p3 ,0,0);_bdaf !=nil {return false ,_f .Wrap (_bdaf ,_cffb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bdaf =_acbebe .RasterOperation (0,0,_egc ,_ebca ,PixNotSrcAndDst ,p2 ,0,0);_bdaf !=nil {return false ,_f .Wrap (_bdaf ,_cffb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _acbebe .Zero (),nil ;};func (_dbab *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _dbab .Copy (),nil ;};_ccd ,_dae :=_dbab .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _dae !=nil {return nil ,_f .Wrap (_dae ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _ccd ,nil ;};func _cg (_bg ,_ab *Bitmap )(_fc error ){const _ec ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_fde :=_ab .RowStride ;_de :=_bg .RowStride ;var (_ed byte ;_cc uint16 ;_ad ,_ac ,_ba ,_dc ,_fg int ;);for _ba =0;_ba < _ab .Height ;_ba ++{_ad =_ba *_fde ;_ac =2*_ba *_de ;for _dc =0;_dc < _fde ;_dc ++{_ed =_ab .Data [_ad +_dc ];_cc =_eaf [_ed ];_fg =_ac +_dc *2;if _bg .RowStride !=_ab .RowStride *2&&(_dc +1)*2> _bg .RowStride {_fc =_bg .SetByte (_fg ,byte (_cc >>8));}else {_fc =_bg .setTwoBytes (_fg ,_cc );};if _fc !=nil {return _f .Wrap (_fc ,_ec ,"");};};for _dc =0;_dc < _de ;_dc ++{_fg =_ac +_de +_dc ;_ed =_bg .Data [_ac +_dc ];if _fc =_bg .SetByte (_fg ,_ed );_fc !=nil {return _f .Wrapf (_fc ,_ec ,"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",_ac +_dc ,_ac +_de +_dc );};};};return nil ;};func _aecc (_cacc ,_fged ,_ceggc *Bitmap )(*Bitmap ,error ){const _efae ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _fged ==nil {return nil ,_f .Error (_efae ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ceggc ==nil {return nil ,_f .Error (_efae ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _cacc ==_ceggc {return nil ,_f .Error (_efae ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_fged .SizesEqual (_ceggc ){_dfc .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",_efae );};var _feaa error ;if _cacc ,_feaa =_beb (_cacc ,_fged );_feaa !=nil {return nil ,_f .Wrap (_feaa ,_efae ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _feaa =_cacc .RasterOperation (0,0,_cacc .Width ,_cacc .Height ,PixSrcXorDst ,_ceggc ,0,0);_feaa !=nil {return nil ,_f .Wrap (_feaa ,_efae ,"");};return _cacc ,nil ;};func _deg ()(_cgb [256]uint64 ){for _ddd :=0;_ddd < 256;_ddd ++{if _ddd &0x01!=0{_cgb [_ddd ]|=0xff;};if _ddd &0x02!=0{_cgb [_ddd ]|=0xff00;};if _ddd &0x04!=0{_cgb [_ddd ]|=0xff0000;};if _ddd &0x08!=0{_cgb [_ddd ]|=0xff000000;};if _ddd &0x10!=0{_cgb [_ddd ]|=0xff00000000;};if _ddd &0x20!=0{_cgb [_ddd ]|=0xff0000000000;};if _ddd &0x40!=0{_cgb [_ddd ]|=0xff000000000000;};if _ddd &0x80!=0{_cgb [_ddd ]|=0xff00000000000000;};};return _cgb ;};func (_badcg *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_acfge *Bitmaps ,_dbbbb error ){const _afee ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _badcg ==nil {return nil ,_f .Error (_afee ,"\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 ,_f .Errorf (_afee ,"\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 ,_f .Errorf (_afee ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );};_cfdfd ,_dbbbb :=_badcg .makeSizeIndicator (width ,height ,tp ,relation );if _dbbbb !=nil {return nil ,_f .Wrap (_dbbbb ,_afee ,"");};_acfge ,_dbbbb =_badcg .selectByIndicator (_cfdfd );if _dbbbb !=nil {return nil ,_f .Wrap (_dbbbb ,_afee ,"");};return _acfge ,nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _aaf ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_fae :=_bgaf (width ,height );_fae .Data =data ;if _bdb :=((width *height )+7)>>3;len (data )< _bdb {return nil ,_f .Errorf (_aaf ,"\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 ),_bdb );};if _dga :=_fae .addPadBits ();_dga !=nil {return nil ,_f .Wrap (_dga ,_aaf ,"");};return _fae ,nil ;};func (_accc *Bitmap )setAll ()error {_cbbe :=_bbg (_accc ,0,0,_accc .Width ,_accc .Height ,PixSet ,nil ,0,0);if _cbbe !=nil {return _f .Wrap (_cbbe ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func (_efad *Boxes )makeSizeIndicator (_gacf ,_fdgf int ,_dfde LocationFilter ,_faag SizeComparison )*_e .NumSlice {_ceb :=&_e .NumSlice {};var _eefc ,_efff ,_gggc int ;for _ ,_addd :=range *_efad {_eefc =0;_efff ,_gggc =_addd .Dx (),_addd .Dy ();switch _dfde {case LocSelectWidth :if (_faag ==SizeSelectIfLT &&_efff < _gacf )||(_faag ==SizeSelectIfGT &&_efff > _gacf )||(_faag ==SizeSelectIfLTE &&_efff <=_gacf )||(_faag ==SizeSelectIfGTE &&_efff >=_gacf ){_eefc =1;};case LocSelectHeight :if (_faag ==SizeSelectIfLT &&_gggc < _fdgf )||(_faag ==SizeSelectIfGT &&_gggc > _fdgf )||(_faag ==SizeSelectIfLTE &&_gggc <=_fdgf )||(_faag ==SizeSelectIfGTE &&_gggc >=_fdgf ){_eefc =1;};case LocSelectIfEither :if (_faag ==SizeSelectIfLT &&(_gggc < _fdgf ||_efff < _gacf ))||(_faag ==SizeSelectIfGT &&(_gggc > _fdgf ||_efff > _gacf ))||(_faag ==SizeSelectIfLTE &&(_gggc <=_fdgf ||_efff <=_gacf ))||(_faag ==SizeSelectIfGTE &&(_gggc >=_fdgf ||_efff >=_gacf )){_eefc =1;};case LocSelectIfBoth :if (_faag ==SizeSelectIfLT &&(_gggc < _fdgf &&_efff < _gacf ))||(_faag ==SizeSelectIfGT &&(_gggc > _fdgf &&_efff > _gacf ))||(_faag ==SizeSelectIfLTE &&(_gggc <=_fdgf &&_efff <=_gacf ))||(_faag ==SizeSelectIfGTE &&(_gggc >=_fdgf &&_efff >=_gacf )){_eefc =1;};};_ceb .AddInt (_eefc );};return _ceb ;};func (_dcadc *Bitmaps )CountPixels ()*_e .NumSlice {_abcae :=&_e .NumSlice {};for _ ,_fbgc :=range _dcadc .Values {_abcae .AddInt (_fbgc .CountPixels ());};return _abcae ;};func (_aaa *Bitmap )equivalent (_def *Bitmap )bool {if _aaa ==_def {return true ;};if !_aaa .SizesEqual (_def ){return false ;};_cfda :=_eccb (_aaa ,_def ,CmbOpXor );_gge :=_aaa .countPixels ();_dadg :=int (0.25*float32 (_gge ));if _cfda .thresholdPixelSum (_dadg ){return false ;};var (_cdca [9][9]int ;_bage [18][9]int ;_gee [9][18]int ;_edg int ;_cff int ;);_fgba :=9;_efa :=_aaa .Height /_fgba ;_gfae :=_aaa .Width /_fgba ;_dcc ,_cdbf :=_efa /2,_gfae /2;if _efa < _gfae {_dcc =_gfae /2;_cdbf =_efa /2;};_bcg :=float64 (_dcc )*float64 (_cdbf )*_cfc .Pi ;_ffda :=int (float64 (_efa *_gfae /2)*0.9);_ccgb :=int (float64 (_gfae *_efa /2)*0.9);for _gbde :=0;_gbde < _fgba ;_gbde ++{_baa :=_gfae *_gbde +_edg ;var _aeb int ;if _gbde ==_fgba -1{_edg =0;_aeb =_aaa .Width ;}else {_aeb =_baa +_gfae ;if ((_aaa .Width -_edg )%_fgba )> 0{_edg ++;_aeb ++;};};for _ggfe :=0;_ggfe < _fgba ;_ggfe ++{_agf :=_efa *_ggfe +_cff ;var _acdf int ;if _ggfe ==_fgba -1{_cff =0;_acdf =_aaa .Height ;}else {_acdf =_agf +_efa ;if (_aaa .Height -_cff )%_fgba > 0{_cff ++;_acdf ++;};};var _gfd ,_gce ,_cfe ,_acgc int ;_egge :=(_baa +_aeb )/2;_ebfe :=(_agf +_acdf )/2;for _caaag :=_baa ;_caaag < _aeb ;_caaag ++{for _ccgba :=_agf ;_ccgba < _acdf ;_ccgba ++{if _cfda .GetPixel (_caaag ,_ccgba ){if _caaag < _egge {_gfd ++;}else {_gce ++;};if _ccgba < _ebfe {_acgc ++;}else {_cfe ++;};};};};_cdca [_gbde ][_ggfe ]=_gfd +_gce ;_bage [_gbde *2][_ggfe ]=_gfd ;_bage [_gbde *2+1][_ggfe ]=_gce ;_gee [_gbde ][_ggfe *2]=_acgc ;_gee [_gbde ][_ggfe *2+1]=_cfe ;};};for _facb :=0;_facb < _fgba *2-1;_facb ++{for _dfbf :=0;_dfbf < (_fgba -1);_dfbf ++{var _afaf int ;for _dbaf :=0;_dbaf < 2;_dbaf ++{for _eggb :=0;_eggb < 2;_eggb ++{_afaf +=_bage [_facb +_dbaf ][_dfbf +_eggb ];};};if _afaf > _ccgb {return false ;};};};for _gcf :=0;_gcf < (_fgba -1);_gcf ++{for _dega :=0;_dega < ((_fgba *2)-1);_dega ++{var _fdf int ;for _fegd :=0;_fegd < 2;_fegd ++{for _bff :=0;_bff < 2;_bff ++{_fdf +=_gee [_gcf +_fegd ][_dega +_bff ];};};if _fdf > _ffda {return false ;};};};for _aeg :=0;_aeg < (_fgba -2);_aeg ++{for _fgdb :=0;_fgdb < (_fgba -2);_fgdb ++{var _cdbcb ,_fdb int ;for _daee :=0;_daee < 3;_daee ++{for _efde :=0;_efde < 3;_efde ++{if _daee ==_efde {_cdbcb +=_cdca [_aeg +_daee ][_fgdb +_efde ];};if (2-_daee )==_efde {_fdb +=_cdca [_aeg +_daee ][_fgdb +_efde ];};};};if _cdbcb > _ccgb ||_fdb > _ccgb {return false ;};};};for _eag :=0;_eag < (_fgba -1);_eag ++{for _bdf :=0;_bdf < (_fgba -1);_bdf ++{var _ebec int ;for _febd :=0;_febd < 2;_febd ++{for _dgc :=0;_dgc < 2;_dgc ++{_ebec +=_cdca [_eag +_febd ][_bdf +_dgc ];};};if float64 (_ebec )> _bcg {return false ;};};};return true ;};func _abgf (_fgffb *Bitmap ,_afedg *_e .Stack ,_bbagc ,_cdbea int )(_fgfc *_df .Rectangle ,_gbae error ){const _bfgfe ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _fgffb ==nil {return nil ,_f .Error (_bfgfe ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _afedg ==nil {return nil ,_f .Error (_bfgfe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_begd ,_cbff :=_fgffb .Width ,_fgffb .Height ;_gfef :=_begd -1;_dccae :=_cbff -1;if _bbagc < 0||_bbagc > _gfef ||_cdbea < 0||_cdbea > _dccae ||!_fgffb .GetPixel (_bbagc ,_cdbea ){return nil ,nil ;};var _gadd *_df .Rectangle ;_gadd ,_gbae =Rect (100000,100000,0,0);if _gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"");};if _gbae =_fefgf (_afedg ,_bbagc ,_bbagc ,_cdbea ,1,_dccae ,_gadd );_gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gbae =_fefgf (_afedg ,_bbagc ,_bbagc ,_cdbea +1,-1,_dccae ,_gadd );_gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_gadd .Min .X ,_gadd .Max .X =_bbagc ,_bbagc ;_gadd .Min .Y ,_gadd .Max .Y =_cdbea ,_cdbea ;var (_feeee *fillSegment ;_eadd int ;);for _afedg .Len ()> 0{if _feeee ,_gbae =_cafa (_afedg );_gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"");};_cdbea =_feeee ._gdba ;for _bbagc =_feeee ._dccc ;_bbagc >=0&&_fgffb .GetPixel (_bbagc ,_cdbea );_bbagc --{if _gbae =_fgffb .SetPixel (_bbagc ,_cdbea ,0);_gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"");};};if _bbagc >=_feeee ._dccc {for _bbagc ++;_bbagc <=_feeee ._eccc &&_bbagc <=_gfef &&!_fgffb .GetPixel (_bbagc ,_cdbea );_bbagc ++{};_eadd =_bbagc ;if !(_bbagc <=_feeee ._eccc &&_bbagc <=_gfef ){continue ;};}else {_eadd =_bbagc +1;if _eadd < _feeee ._dccc -1{if _gbae =_fefgf (_afedg ,_eadd ,_feeee ._dccc -1,_feeee ._gdba ,-_feeee ._faac ,_dccae ,_gadd );_gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_bbagc =_feeee ._dccc +1;};for {for ;_bbagc <=_gfef &&_fgffb .GetPixel (_bbagc ,_cdbea );_bbagc ++{if _gbae =_fgffb .SetPixel (_bbagc ,_cdbea ,0);_gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gbae =_fefgf (_afedg ,_eadd ,_bbagc -1,_feeee ._gdba ,_feeee ._faac ,_dccae ,_gadd );_gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bbagc > _feeee ._eccc +1{if _gbae =_fefgf (_afedg ,_feeee ._eccc +1,_bbagc -1,_feeee ._gdba ,-_feeee ._faac ,_dccae ,_gadd );_gbae !=nil {return nil ,_f .Wrap (_gbae ,_bfgfe ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _bbagc ++;_bbagc <=_feeee ._eccc &&_bbagc <=_gfef &&!_fgffb .GetPixel (_bbagc ,_cdbea );_bbagc ++{};_eadd =_bbagc ;if !(_bbagc <=_feeee ._eccc &&_bbagc <=_gfef ){break ;};};};_gadd .Max .X ++;_gadd .Max .Y ++;return _gadd ,nil ;};type Color int ;func _ea (_bfa *Bitmap ,_fda ,_cgc int )(*Bitmap ,error ){const _da ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _bfa ==nil {return nil ,_f .Error (_da ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fda <=0||_cgc <=0{return nil ,_f .Error (_da ,"\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 _fda ==_cgc {if _fda ==1{_ddg ,_ebe :=_beb (nil ,_bfa );if _ebe !=nil {return nil ,_f .Wrap (_ebe ,_da ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _ddg ,nil ;};if _fda ==2||_fda ==4||_fda ==8{_cae ,_gc :=_dd (_bfa ,_fda );if _gc !=nil {return nil ,_f .Wrap (_gc ,_da ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _cae ,nil ;};};_gec :=_fda *_bfa .Width ;_cd :=_cgc *_bfa .Height ;_ebeb :=New (_gec ,_cd );_gfa :=_ebeb .RowStride ;var (_fcd ,_faa ,_ee ,_fb ,_dgb int ;_cce byte ;_gbe error ;);for _faa =0;_faa < _bfa .Height ;_faa ++{_fcd =_cgc *_faa *_gfa ;for _ee =0;_ee < _bfa .Width ;_ee ++{if _cb :=_bfa .GetPixel (_ee ,_faa );_cb {_dgb =_fda *_ee ;for _fb =0;_fb < _fda ;_fb ++{_ebeb .setBit (_fcd *8+_dgb +_fb );};};};for _fb =1;_fb < _cgc ;_fb ++{_be :=_fcd +_fb *_gfa ;for _egd :=0;_egd < _gfa ;_egd ++{if _cce ,_gbe =_ebeb .GetByte (_fcd +_egd );_gbe !=nil {return nil ,_f .Wrapf (_gbe ,_da ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_fb );};if _gbe =_ebeb .SetByte (_be +_egd ,_cce );_gbe !=nil {return nil ,_f .Wrap (_gbe ,_da ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _ebeb ,nil ;};func (_ceec *Bitmaps )selectByIndexes (_gefd []int )(*Bitmaps ,error ){_bcbg :=&Bitmaps {};for _ ,_bedf :=range _gefd {_bagc ,_edeb :=_ceec .GetBitmap (_bedf );if _edeb !=nil {return nil ,_f .Wrap (_edeb ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_bcbg .AddBitmap (_bagc );};return _bcbg ,nil ;};func (_gfab *Bitmap )InverseData (){_gfab .inverseData ()};func init (){for _bfbc :=0;_bfbc < 256;_bfbc ++{_cgd [_bfbc ]=uint8 (_bfbc &0x1)+(uint8 (_bfbc >>1)&0x1)+(uint8 (_bfbc >>2)&0x1)+(uint8 (_bfbc >>3)&0x1)+(uint8 (_bfbc >>4)&0x1)+(uint8 (_bfbc >>5)&0x1)+(uint8 (_bfbc >>6)&0x1)+(uint8 (_bfbc >>7)&0x1);};};func (_ecfb *Bitmaps )selectByIndicator (_cadg *_e .NumSlice )(_deccc *Bitmaps ,_gecdc error ){const _cfbcg ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _ecfb ==nil {return nil ,_f .Error (_cfbcg ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _cadg ==nil {return nil ,_f .Error (_cfbcg ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_ecfb .Values )==0{return _ecfb ,nil ;};if len (*_cadg )!=len (_ecfb .Values ){return nil ,_f .Errorf (_cfbcg ,"\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 (*_cadg ),len (_ecfb .Values ));};var _cfba ,_accbg ,_feeb int ;for _accbg =0;_accbg < len (*_cadg );_accbg ++{if _cfba ,_gecdc =_cadg .GetInt (_accbg );_gecdc !=nil {return nil ,_f .Wrap (_gecdc ,_cfbcg ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _cfba ==1{_feeb ++;};};if _feeb ==len (_ecfb .Values ){return _ecfb ,nil ;};_deccc =&Bitmaps {};_cefce :=len (_ecfb .Values )==len (_ecfb .Boxes );for _accbg =0;_accbg < len (*_cadg );_accbg ++{if _cfba =int ((*_cadg )[_accbg ]);_cfba ==0{continue ;};_deccc .Values =append (_deccc .Values ,_ecfb .Values [_accbg ]);if _cefce {_deccc .Boxes =append (_deccc .Boxes ,_ecfb .Boxes [_accbg ]);};};return _deccc ,nil ;};func _ccg (_dea ,_bed *Bitmap ,_cdb int ,_gae []byte ,_fgc int )(_gea error ){const _dfcf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_cdd ,_egg ,_bagf ,_ccge ,_eea ,_gcd ,_eba ,_fdag int ;_cbgf ,_fgfg ,_egf ,_feb uint32 ;_cde ,_ecbd byte ;_bcca uint16 ;);_dec :=make ([]byte ,4);_bd :=make ([]byte ,4);for _bagf =0;_bagf < _dea .Height -1;_bagf ,_ccge =_bagf +2,_ccge +1{_cdd =_bagf *_dea .RowStride ;_egg =_ccge *_bed .RowStride ;for _eea ,_gcd =0,0;_eea < _fgc ;_eea ,_gcd =_eea +4,_gcd +1{for _eba =0;_eba < 4;_eba ++{_fdag =_cdd +_eea +_eba ;if _fdag <=len (_dea .Data )-1&&_fdag < _cdd +_dea .RowStride {_dec [_eba ]=_dea .Data [_fdag ];}else {_dec [_eba ]=0x00;};_fdag =_cdd +_dea .RowStride +_eea +_eba ;if _fdag <=len (_dea .Data )-1&&_fdag < _cdd +(2*_dea .RowStride ){_bd [_eba ]=_dea .Data [_fdag ];}else {_bd [_eba ]=0x00;};};_cbgf =_fd .BigEndian .Uint32 (_dec );_fgfg =_fd .BigEndian .Uint32 (_bd );_egf =_cbgf &_fgfg ;_egf |=_egf <<1;_feb =_cbgf |_fgfg ;_feb &=_feb <<1;_fgfg =_egf |_feb ;_fgfg &=0xaaaaaaaa;_cbgf =_fgfg |(_fgfg <<7);_cde =byte (_cbgf >>24);_ecbd =byte ((_cbgf >>8)&0xff);_fdag =_egg +_gcd ;if _fdag +1==len (_bed .Data )-1||_fdag +1>=_egg +_bed .RowStride {if _gea =_bed .SetByte (_fdag ,_gae [_cde ]);_gea !=nil {return _f .Wrapf (_gea ,_dfcf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fdag );};}else {_bcca =(uint16 (_gae [_cde ])<<8)|uint16 (_gae [_ecbd ]);if _gea =_bed .setTwoBytes (_fdag ,_bcca );_gea !=nil {return _f .Wrapf (_gea ,_dfcf ,"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",_fdag );};_gcd ++;};};};return nil ;};func _ef (_adb *Bitmap ,_ecg ...int )(_bad *Bitmap ,_fce error ){const _cbb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _adb ==nil {return nil ,_f .Error (_cbb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_ecg )==0||len (_ecg )> 4{return nil ,_f .Error (_cbb ,"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 _ecg [0]<=0{_dfc .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");_bad ,_fce =_beb (nil ,_adb );if _fce !=nil {return nil ,_f .Wrap (_fce ,_cbb ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");};return _bad ,nil ;};_cbg :=_cbbd ();_bad =_adb ;for _cfd ,_fbc :=range _ecg {if _fbc <=0{break ;};_bad ,_fce =_ccf (_bad ,_fbc ,_cbg );if _fce !=nil {return nil ,_f .Wrapf (_fce ,_cbb ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_cfd );};};return _bad ,nil ;};type ClassedPoints struct{*Points ;_e .IntSlice ;_aebe func (_edegf ,_fgfb int )bool ;};var _dbcc =[5]int {1,2,3,0,4};func _eec (_addb uint ,_bgaa byte )byte {return _bgaa >>_addb <<_addb };func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _cccb ,_caeg int ;_cfga :=src .RowStride -1;if x < 0{_caeg =-x ;x =0;}else if x +src .Width > dst .Width {_cfga -=src .Width +x -dst .Width ;};if y < 0{_cccb =-y ;y =0;_caeg +=src .RowStride ;_cfga +=src .RowStride ;}else if y +src .Height > dst .Height {_cccb =src .Height +y -dst .Height ;};var (_febdb int ;_fgbb error ;);_gefc :=x &0x07;_gcfe :=8-_gefc ;_aef :=src .Width &0x07;_cee :=_gcfe -_aef ;_beee :=_gcfe &0x07!=0;_dgde :=src .Width <=((_cfga -_caeg )<<3)+_gcfe ;_gfdf :=dst .GetByteIndex (x ,y );_bggd :=_cccb +dst .Height ;if src .Height > _bggd {_febdb =_bggd ;}else {_febdb =src .Height ;};switch {case !_beee :_fgbb =_fbd (src ,dst ,_cccb ,_febdb ,_gfdf ,_caeg ,_cfga ,op );case _dgde :_fgbb =_fbeg (src ,dst ,_cccb ,_febdb ,_gfdf ,_caeg ,_cfga ,_cee ,_gefc ,_gcfe ,op );default:_fgbb =_cdef (src ,dst ,_cccb ,_febdb ,_gfdf ,_caeg ,_cfga ,_cee ,_gefc ,_gcfe ,op ,_aef );};return _fgbb ;};func (_ggff *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_ggff .Width ,Height :_ggff .Height ,RowStride :_ggff .RowStride ,Color :_ggff .Color ,Text :_ggff .Text ,BitmapNumber :_ggff .BitmapNumber ,Special :_ggff .Special ,Data :make ([]byte ,len (_ggff .Data ))};};func TstFrameBitmap ()*Bitmap {return _gcea .Copy ()};func _daed (_ddge ,_ffae *Bitmap ,_dgeb ,_bcbee int )(*Bitmap ,error ){const _bffa ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _ffae ==nil {return nil ,_f .Error (_bffa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dgeb < 1||_bcbee < 1{return nil ,_f .Error (_bffa ,"\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 _dgeb ==1&&_bcbee ==1{_dfdc ,_bbfg :=_beb (_ddge ,_ffae );if _bbfg !=nil {return nil ,_f .Wrap (_bbfg ,_bffa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _dfdc ,nil ;};if _dgeb ==1||_bcbee ==1{_gdde :=SelCreateBrick (_bcbee ,_dgeb ,_bcbee /2,_dgeb /2,SelHit );_fffc ,_gefb :=_gggce (_ddge ,_ffae ,_gdde );if _gefb !=nil {return nil ,_f .Wrap (_gefb ,_bffa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fffc ,nil ;};_gfgc :=SelCreateBrick (1,_dgeb ,0,_dgeb /2,SelHit );_ffbd :=SelCreateBrick (_bcbee ,1,_bcbee /2,0,SelHit );_gfff ,_efbca :=_gggce (nil ,_ffae ,_gfgc );if _efbca !=nil {return nil ,_f .Wrap (_efbca ,_bffa ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_ddge ,_efbca =_gggce (_ddge ,_gfff ,_ffbd );if _efbca !=nil {return nil ,_f .Wrap (_efbca ,_bffa ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ddge ,nil ;};func (_fff *Bitmap )addPadBits ()(_bde error ){const _gade ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_fcef :=_fff .Width %8;if _fcef ==0{return nil ;};_fabd :=_fff .Width /8;_abd :=_cf .NewReader (_fff .Data );_ffe :=make ([]byte ,_fff .Height *_fff .RowStride );_dbb :=_cf .NewWriterMSB (_ffe );_edea :=make ([]byte ,_fabd );var (_abca int ;_gecd uint64 ;);for _abca =0;_abca < _fff .Height ;_abca ++{if _ ,_bde =_abd .Read (_edea );_bde !=nil {return _f .Wrap (_bde ,_gade ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_bde =_dbb .Write (_edea );_bde !=nil {return _f .Wrap (_bde ,_gade ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _gecd ,_bde =_abd .ReadBits (byte (_fcef ));_bde !=nil {return _f .Wrap (_bde ,_gade ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _bde =_dbb .WriteByte (byte (_gecd )<<uint (8-_fcef ));_bde !=nil {return _f .Wrap (_bde ,_gade ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_fff .Data =_dbb .Data ();return nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_df .Rectangle ;};func _debd (_ced *Bitmap )(_ccdf *Bitmap ,_fefa int ,_cega error ){const _gaec ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _ced ==nil {return nil ,0,_f .Errorf (_gaec ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _dce ,_adega *Bitmap ;if _dce ,_cega =_beb (nil ,_ced );_cega !=nil {return nil ,0,_f .Wrap (_cega ,_gaec ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_gddc [13]int ;_dag ,_dgad int ;);_bcbe :=12;_edgf :=_e .NewNumSlice (_bcbe +1);_aaga :=_e .NewNumSlice (_bcbe +1);var _cfcc *Boxes ;for _aage :=0;_aage <=_bcbe ;_aage ++{if _aage ==0{if _adega ,_cega =_beb (nil ,_dce );_cega !=nil {return nil ,0,_f .Wrap (_cega ,_gaec ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _adega ,_cega =_edeg (_dce ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_cega !=nil {return nil ,0,_f .Wrap (_cega ,_gaec ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _cfcc ,_cega =_adega .connComponentsBB (4);_cega !=nil {return nil ,0,_f .Wrap (_cega ,_gaec ,"");};_gddc [_aage ]=len (*_cfcc );_edgf .AddInt (_gddc [_aage ]);switch _aage {case 0:_dag =_gddc [0];default:_dgad =_gddc [_aage -1]-_gddc [_aage ];_aaga .AddInt (_dgad );};_dce =_adega ;};_cbf :=true ;_accf :=2;var _gecb ,_bega int ;for _dbf :=1;_dbf < len (*_aaga );_dbf ++{if _gecb ,_cega =_edgf .GetInt (_dbf );_cega !=nil {return nil ,0,_f .Wrap (_cega ,_gaec ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _cbf &&_gecb < int (0.3*float32 (_dag )){_accf =_dbf +1;_cbf =false ;};if _dgad ,_cega =_aaga .GetInt (_dbf );_cega !=nil {return nil ,0,_f .Wrap (_cega ,_gaec ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _dgad > _bega {_bega =_dgad ;};};_abbe :=_ced .XResolution ;if _abbe ==0{_abbe =150;};if _abbe > 110{_accf ++;};if _accf < 2{_dfc .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");_accf =2;};_fefa =_accf +1;if _ccdf ,_cega =_agfc (nil ,_ced ,_accf +1,1);_cega !=nil {return nil ,0,_f .Wrap (_cega ,_gaec ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _ccdf ,_fefa ,nil ;};func TstFrameBitmapData ()[]byte {return _gcea .Data };func (_gfe *Bitmap )SetByte (index int ,v byte )error {if index > len (_gfe .Data )-1||index < 0{return _f .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 );};_gfe .Data [index ]=v ;return nil ;};func (_gbeb *Points )Add (pt *Points )error {const _cgfcf ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _gbeb ==nil {return _f .Error (_cgfcf ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _f .Error (_cgfcf ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_gbeb =append (*_gbeb ,*pt ...);return nil ;};func _egcd (_ebfb *Bitmap ,_cbda ,_edbd ,_acdc ,_ffdb int ,_agcab RasterOperator ,_bfbb *Bitmap ,_caegc ,_eggaf int )error {var (_agcgc byte ;_gaecg int ;_gfbe int ;_cfcf ,_fegaf int ;_deeb ,_gdcd int ;);_afbb :=_acdc >>3;_fgfgb :=_acdc &7;if _fgfgb > 0{_agcgc =_accb [_fgfgb ];};_gaecg =_bfbb .RowStride *_eggaf +(_caegc >>3);_gfbe =_ebfb .RowStride *_edbd +(_cbda >>3);switch _agcab {case PixSrc :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]=_bfbb .Data [_cfcf ];_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],_bfbb .Data [_cfcf ],_agcgc );};};case PixNotSrc :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]=^(_bfbb .Data [_cfcf ]);_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],^_bfbb .Data [_cfcf ],_agcgc );};};case PixSrcOrDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]|=_bfbb .Data [_cfcf ];_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],_bfbb .Data [_cfcf ]|_ebfb .Data [_fegaf ],_agcgc );};};case PixSrcAndDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]&=_bfbb .Data [_cfcf ];_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],_bfbb .Data [_cfcf ]&_ebfb .Data [_fegaf ],_agcgc );};};case PixSrcXorDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]^=_bfbb .Data [_cfcf ];_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],_bfbb .Data [_cfcf ]^_ebfb .Data [_fegaf ],_agcgc );};};case PixNotSrcOrDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]|=^(_bfbb .Data [_cfcf ]);_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],^(_bfbb .Data [_cfcf ])|_ebfb .Data [_fegaf ],_agcgc );};};case PixNotSrcAndDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]&=^(_bfbb .Data [_cfcf ]);_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],^(_bfbb .Data [_cfcf ])&_ebfb .Data [_fegaf ],_agcgc );};};case PixSrcOrNotDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]=_bfbb .Data [_cfcf ]|^(_ebfb .Data [_fegaf ]);_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],_bfbb .Data [_cfcf ]|^(_ebfb .Data [_fegaf ]),_agcgc );};};case PixSrcAndNotDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]=_bfbb .Data [_cfcf ]&^(_ebfb .Data [_fegaf ]);_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],_bfbb .Data [_cfcf ]&^(_ebfb .Data [_fegaf ]),_agcgc );};};case PixNotPixSrcOrDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]=^(_bfbb .Data [_cfcf ]|_ebfb .Data [_fegaf ]);_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],^(_bfbb .Data [_cfcf ]|_ebfb .Data [_fegaf ]),_agcgc );};};case PixNotPixSrcAndDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]=^(_bfbb .Data [_cfcf ]&_ebfb .Data [_fegaf ]);_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],^(_bfbb .Data [_cfcf ]&_ebfb .Data [_fegaf ]),_agcgc );};};case PixNotPixSrcXorDst :for _deeb =0;_deeb < _ffdb ;_deeb ++{_cfcf =_gaecg +_deeb *_bfbb .RowStride ;_fegaf =_gfbe +_deeb *_ebfb .RowStride ;for _gdcd =0;_gdcd < _afbb ;_gdcd ++{_ebfb .Data [_fegaf ]=^(_bfbb .Data [_cfcf ]^_ebfb .Data [_fegaf ]);_fegaf ++;_cfcf ++;};if _fgfgb > 0{_ebfb .Data [_fegaf ]=_fafa (_ebfb .Data [_fegaf ],^(_bfbb .Data [_cfcf ]^_ebfb .Data [_fegaf ]),_agcgc );};};default:_dfc .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",_agcab );return _f .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 (_dacf CombinationOperator )String ()string {var _fagfe string ;switch _dacf {case CmbOpOr :_fagfe ="\u004f\u0052";case CmbOpAnd :_fagfe ="\u0041\u004e\u0044";case CmbOpXor :_fagfe ="\u0058\u004f\u0052";case CmbOpXNor :_fagfe ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_fagfe ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_fagfe ="\u004e\u004f\u0054";};return _fagfe ;};type shift int ;var _cgd [256]uint8 ;func (_edee *Bitmap )GetBitOffset (x int )int {return x &0x07};func _egeb (_gadc ,_aeea *Bitmap ,_fgdc ,_gcce int )(*Bitmap ,error ){const _fbgga ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _aeea ==nil {return nil ,_f .Error (_fbgga ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _fgdc < 1||_gcce < 1{return nil ,_f .Error (_fbgga ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _fgdc ==1&&_gcce ==1{return _beb (_gadc ,_aeea );};if MorphBC ==SymmetricMorphBC {_bffe ,_dggd :=_agfc (_gadc ,_aeea ,_fgdc ,_gcce );if _dggd !=nil {return nil ,_f .Wrap (_dggd ,_fbgga ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _bffe ,nil ;};_ebcb :=_cabe (_fgdc /2,_gcce /2);_cbde :=8*((_ebcb +7)/8);_dgbd ,_ggbgc :=_aeea .AddBorder (_cbde ,0);if _ggbgc !=nil {return nil ,_f .Wrapf (_ggbgc ,_fbgga ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_cbde );};var _egca ,_edca *Bitmap ;if _fgdc ==1||_gcce ==1{_ebdg :=SelCreateBrick (_gcce ,_fgdc ,_gcce /2,_fgdc /2,SelHit );_egca ,_ggbgc =_bbeg (nil ,_dgbd ,_ebdg );if _ggbgc !=nil {return nil ,_f .Wrap (_ggbgc ,_fbgga ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_dcdfd :=SelCreateBrick (1,_fgdc ,0,_fgdc /2,SelHit );_fbef ,_fafb :=_bdbb (nil ,_dgbd ,_dcdfd );if _fafb !=nil {return nil ,_f .Wrap (_fafb ,_fbgga ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_abbg :=SelCreateBrick (_gcce ,1,_gcce /2,0,SelHit );_egca ,_fafb =_bdbb (nil ,_fbef ,_abbg );if _fafb !=nil {return nil ,_f .Wrap (_fafb ,_fbgga ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_fafb =_gggce (_fbef ,_egca ,_dcdfd );_fafb !=nil {return nil ,_f .Wrap (_fafb ,_fbgga ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_fafb =_gggce (_egca ,_fbef ,_abbg );_fafb !=nil {return nil ,_f .Wrap (_fafb ,_fbgga ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");};};if _edca ,_ggbgc =_egca .RemoveBorder (_cbde );_ggbgc !=nil {return nil ,_f .Wrap (_ggbgc ,_fbgga ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _gadc ==nil {return _edca ,nil ;};if _ ,_ggbgc =_beb (_gadc ,_edca );_ggbgc !=nil {return nil ,_ggbgc ;};return _gadc ,nil ;};func _agd (_fceb ,_bcf *Bitmap ,_cga int ,_efg []byte ,_dac int )(_ceg error ){const _eff ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_bag ,_ffc ,_acce ,_acd ,_dfce ,_fba ,_fge ,_baea int ;_acg ,_ebd uint32 ;_cba ,_ggc byte ;_ega uint16 ;);_bcb :=make ([]byte ,4);_fgff :=make ([]byte ,4);for _acce =0;_acce < _fceb .Height -1;_acce ,_acd =_acce +2,_acd +1{_bag =_acce *_fceb .RowStride ;_ffc =_acd *_bcf .RowStride ;for _dfce ,_fba =0,0;_dfce < _dac ;_dfce ,_fba =_dfce +4,_fba +1{for _fge =0;_fge < 4;_fge ++{_baea =_bag +_dfce +_fge ;if _baea <=len (_fceb .Data )-1&&_baea < _bag +_fceb .RowStride {_bcb [_fge ]=_fceb .Data [_baea ];}else {_bcb [_fge ]=0x00;};_baea =_bag +_fceb .RowStride +_dfce +_fge ;if _baea <=len (_fceb .Data )-1&&_baea < _bag +(2*_fceb .RowStride ){_fgff [_fge ]=_fceb .Data [_baea ];}else {_fgff [_fge ]=0x00;};};_acg =_fd .BigEndian .Uint32 (_bcb );_ebd =_fd .BigEndian .Uint32 (_fgff );_ebd |=_acg ;_ebd |=_ebd <<1;_ebd &=0xaaaaaaaa;_acg =_ebd |(_ebd <<7);_cba =byte (_acg >>24);_ggc =byte ((_acg >>8)&0xff);_baea =_ffc +_fba ;if _baea +1==len (_bcf .Data )-1||_baea +1>=_ffc +_bcf .RowStride {_bcf .Data [_baea ]=_efg [_cba ];}else {_ega =(uint16 (_efg [_cba ])<<8)|uint16 (_efg [_ggc ]);if _ceg =_bcf .setTwoBytes (_baea ,_ega );_ceg !=nil {return _f .Wrapf (_ceg ,_eff ,"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",_baea );};_fba ++;};};};return nil ;};func _bgaf (_febc ,_ebf int )*Bitmap {return &Bitmap {Width :_febc ,Height :_ebf ,RowStride :(_febc +7)>>3};};func (_aeaed *ClassedPoints )SortByY (){_aeaed ._aebe =_aeaed .ySortFunction ();_c .Sort (_aeaed )};func (_bfd *Bitmap )removeBorderGeneral (_ccga ,_cecd ,_fcdd ,_ddde int )(*Bitmap ,error ){const _bafa ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _ccga < 0||_cecd < 0||_fcdd < 0||_ddde < 0{return nil ,_f .Error (_bafa ,"\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");};_fbec ,_aece :=_bfd .Width ,_bfd .Height ;_caaba :=_fbec -_ccga -_cecd ;_cegg :=_aece -_fcdd -_ddde ;if _caaba <=0{return nil ,_f .Errorf (_bafa ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_caaba );};if _cegg <=0{return nil ,_f .Errorf (_bafa ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_cegg );};_fgcc :=New (_caaba ,_cegg );_fgcc .Color =_bfd .Color ;_egab :=_fgcc .RasterOperation (0,0,_caaba ,_cegg ,PixSrc ,_bfd ,_ccga ,_fcdd );if _egab !=nil {return nil ,_f .Wrap (_egab ,_bafa ,"");};return _fgcc ,nil ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_aadgg *Bitmaps )SortByWidth (){_dbfb :=(*byWidth )(_aadgg );_c .Sort (_dbfb )};func TstAddSymbol (t *_a .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_dgab :=_df .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_dgab );*x +=sym .Width +space ;};const (_cefca shift =iota ;_faed ;);func TstWordBitmap (t *_a .T ,scale ...int )*Bitmap {_bddgg :=1;if len (scale )> 0{_bddgg =scale [0];};_fffe :=3;_cabb :=9+7+15+2*_fffe ;_fcdg :=5+_fffe +5;_bbgd :=New (_cabb *_bddgg ,_fcdg *_bddgg );_ggbbf :=&Bitmaps {};var _bffb *int ;_fffe *=_bddgg ;_bfca :=0;_bffb =&_bfca ;_dcfa :=0;_efeg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,_fffe );_efeg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,_fffe );_efeg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,0);*_bffb =0;_dcfa =5*_bddgg +_fffe ;_efeg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,_fffe );_efeg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,1*_bddgg );_efeg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ggbbf ,_efeg ,_bffb ,_dcfa ,0);TstWriteSymbols (t ,_ggbbf ,_bbgd );return _bbgd ;};func _cabe (_cgba ,_eda int )int {if _cgba > _eda {return _cgba ;};return _eda ;};func (_eefa *ClassedPoints )validateIntSlice ()error {const _abfg ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_fabf :=range _eefa .IntSlice {if _fabf >=(_eefa .Points .Size ()){return _f .Errorf (_abfg ,"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",_fabf ,_eefa .Points .Size ());};};return nil ;};func _cafa (_ggdf *_e .Stack )(_bfac *fillSegment ,_fegg error ){const _cbdaa ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _ggdf ==nil {return nil ,_f .Error (_cbdaa ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _ggdf .Aux ==nil {return nil ,_f .Error (_cbdaa ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_bbegc ,_bfag :=_ggdf .Pop ();if !_bfag {return nil ,nil ;};_cedf ,_bfag :=_bbegc .(*fillSegment );if !_bfag {return nil ,_f .Error (_cbdaa ,"\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");};_bfac =&fillSegment {_cedf ._dccc ,_cedf ._eccc ,_cedf ._gdba +_cedf ._faac ,_cedf ._faac };_ggdf .Aux .Push (_cedf );return _bfac ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dada float64 ,_aadg error ){const _febg ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_f .Error (_febg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_f .Error (_febg ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_f .Error (_febg ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_bgf ,_agbf :=bm1 .Width ,bm1 .Height ;_beeb ,_fbea :=bm2 .Width ,bm2 .Height ;_eded :=_efb (_bgf -_beeb );if _eded > maxDiffW {return 0,nil ;};_cbcd :=_efb (_agbf -_fbea );if _cbcd > maxDiffH {return 0,nil ;};var _eabg ,_cdeff int ;if delX >=0{_eabg =int (delX +0.5);}else {_eabg =int (delX -0.5);};if delY >=0{_cdeff =int (delY +0.5);}else {_cdeff =int (delY -0.5);};_bcba :=_cabe (_cdeff ,0);_dbbd :=_bfbcg (_fbea +_cdeff ,_agbf );_gbdb :=bm1 .RowStride *_bcba ;_fgac :=bm2 .RowStride *(_bcba -_cdeff );_dff :=_cabe (_eabg ,0);_dfdf :=_bfbcg (_beeb +_eabg ,_bgf );_fbgb :=bm2 .RowStride ;var _dcaf ,_edfc int ;if _eabg >=8{_dcaf =_eabg >>3;_gbdb +=_dcaf ;_dff -=_dcaf <<3;_dfdf -=_dcaf <<3;_eabg &=7;}else if _eabg <=-8{_edfc =-((_eabg +7)>>3);_fgac +=_edfc ;_fbgb -=_edfc ;_eabg +=_edfc <<3;};if _dff >=_dfdf ||_bcba >=_dbbd {return 0,nil ;};_aeae :=(_dfdf +7)>>3;var (_eegg ,_cefag ,_cbfe byte ;_cggb ,_cbge ,_eeaf int ;);switch {case _eabg ==0:for _eeaf =_bcba ;_eeaf < _dbbd ;_eeaf ,_gbdb ,_fgac =_eeaf +1,_gbdb +bm1 .RowStride ,_fgac +bm2 .RowStride {for _cbge =0;_cbge < _aeae ;_cbge ++{_cbfe =bm1 .Data [_gbdb +_cbge ]&bm2 .Data [_fgac +_cbge ];_cggb +=tab [_cbfe ];};};case _eabg > 0:if _fbgb < _aeae {for _eeaf =_bcba ;_eeaf < _dbbd ;_eeaf ,_gbdb ,_fgac =_eeaf +1,_gbdb +bm1 .RowStride ,_fgac +bm2 .RowStride {_eegg ,_cefag =bm1 .Data [_gbdb ],bm2 .Data [_fgac ]>>uint (_eabg );_cbfe =_eegg &_cefag ;_cggb +=tab [_cbfe ];for _cbge =1;_cbge < _fbgb ;_cbge ++{_eegg ,_cefag =bm1 .Data [_gbdb +_cbge ],(bm2 .Data [_fgac +_cbge ]>>uint (_eabg ))|(bm2 .Data [_fgac +_cbge -1]<<uint (8-_eabg ));_cbfe =_eegg &_cefag ;_cggb +=tab [_cbfe ];};_eegg =bm1 .Data [_gbdb +_cbge ];_cefag =bm2 .Data [_fgac +_cbge -1]<<uint (8-_eabg );_cbfe =_eegg &_cefag ;_cggb +=tab [_cbfe ];};}else {for _eeaf =_bcba ;_eeaf < _dbbd ;_eeaf ,_gbdb ,_fgac =_eeaf +1,_gbdb +bm1 .RowStride ,_fgac +bm2 .RowStride {_eegg ,_cefag =bm1 .Data [_gbdb ],bm2 .Data [_fgac ]>>uint (_eabg );_cbfe =_eegg &_cefag ;_cggb +=tab [_cbfe ];for _cbge =1;_cbge < _aeae ;_cbge ++{_eegg =bm1 .Data [_gbdb +_cbge ];_cefag =(bm2 .Data [_fgac +_cbge ]>>uint (_eabg ))|(bm2 .Data [_fgac +_cbge -1]<<uint (8-_eabg ));_cbfe =_eegg &_cefag ;_cggb +=tab [_cbfe ];};};};default:if _aeae < _fbgb {for _eeaf =_bcba ;_eeaf < _dbbd ;_eeaf ,_gbdb ,_fgac =_eeaf +1,_gbdb +bm1 .RowStride ,_fgac +bm2 .RowStride {for _cbge =0;_cbge < _aeae ;_cbge ++{_eegg =bm1 .Data [_gbdb +_cbge ];_cefag =bm2 .Data [_fgac +_cbge ]<<uint (-_eabg );_cefag |=bm2 .Data [_fgac +_cbge +1]>>uint (8+_eabg );_cbfe =_eegg &_cefag ;_cggb +=tab [_cbfe ];};};}else {for _eeaf =_bcba ;_eeaf < _dbbd ;_eeaf ,_gbdb ,_fgac =_eeaf +1,_gbdb +bm1 .RowStride ,_fgac +bm2 .RowStride {for _cbge =0;_cbge < _aeae -1;_cbge ++{_eegg =bm1 .Data [_gbdb +_cbge ];_cefag =bm2 .Data [_fgac +_cbge ]<<uint (-_eabg );_cefag |=bm2 .Data [_fgac +_cbge +1]>>uint (8+_eabg );_cbfe =_eegg &_cefag ;_cggb +=tab [_cbfe ];};_eegg =bm1 .Data [_gbdb +_cbge ];_cefag =bm2 .Data [_fgac +_cbge ]<<uint (-_eabg );_cbfe =_eegg &_cefag ;_cggb +=tab [_cbfe ];};};};_dada =float64 (_cggb )*float64 (_cggb )/(float64 (area1 )*float64 (area2 ));return _dada ,nil ;};func (_fga *Bitmap )GetPixel (x ,y int )bool {_gbd :=_fga .GetByteIndex (x ,y );_eccf :=_fga .GetBitOffset (x );_acba :=uint (7-_eccf );if _gbd > len (_fga .Data )-1{_dfc .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 ,_fga );return false ;};if (_fga .Data [_gbd ]>>_acba )&0x01>=1{return true ;};return false ;};func (_edecc *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _bedb ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_gbgg ,_gbaa :=_edecc .selectByIndexes (idx );if _gbaa !=nil {return nil ,_f .Wrap (_gbaa ,_bedb ,"");};return _gbgg ,nil ;};func (_dggg *Bitmap )setBit (_fbgg int ){_dggg .Data [(_fbgg >>3)]|=0x80>>uint (_fbgg &7)};type Component int ;func _bfbcg (_dab ,_cage int )int {if _dab < _cage {return _dab ;};return _cage ;};func (_efdf *BitmapsArray )GetBox (i int )(*_df .Rectangle ,error ){const _cbef ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _efdf ==nil {return nil ,_f .Error (_cbef ,"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 (_efdf .Boxes )-1{return nil ,_f .Errorf (_cbef ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _efdf .Boxes [i ],nil ;};func (_cbcg *ClassedPoints )xSortFunction ()func (_eae int ,_fefc int )bool {return func (_adac ,_facf int )bool {return _cbcg .XAtIndex (_adac )< _cbcg .XAtIndex (_facf )};};type BoundaryCondition int ;func (_aag *Bitmap )And (s *Bitmap )(_cfg *Bitmap ,_edb error ){const _ege ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _aag ==nil {return nil ,_f .Error (_ege ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_f .Error (_ege ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_aag .SizesEqual (s ){_dfc .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",_ege );};if _cfg ,_edb =_beb (_cfg ,_aag );_edb !=nil {return nil ,_f .Wrap (_edb ,_ege ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _edb =_cfg .RasterOperation (0,0,_cfg .Width ,_cfg .Height ,PixSrcAndDst ,s ,0,0);_edb !=nil {return nil ,_f .Wrap (_edb ,_ege ,"");};return _cfg ,nil ;};func (_baeb *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _ddfd ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _baeb ==nil {return nil ,_f .Error (_ddfd ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_f .Error (_ddfd ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_dbbg :=len (_baeb .Values );_fecbb :=&Bitmaps {Values :make ([]*Bitmap ,_dbbg ),Boxes :make ([]*_df .Rectangle ,_dbbg )};var (_eefac ,_fefgg *Bitmap ;_fedg *_df .Rectangle ;_fded error ;);for _febf :=0;_febf < _dbbg ;_febf ++{if _eefac ,_fded =_baeb .GetBitmap (_febf );_fded !=nil {return nil ,_f .Wrap (_fded ,_ddfd ,"");};if _fedg ,_fded =_baeb .GetBox (_febf );_fded !=nil {return nil ,_f .Wrap (_fded ,_ddfd ,"");};if _fefgg ,_fded =s .clipRectangle (_fedg ,nil );_fded !=nil {return nil ,_f .Wrap (_fded ,_ddfd ,"");};if _fefgg ,_fded =_fefgg .And (_eefac );_fded !=nil {return nil ,_f .Wrap (_fded ,_ddfd ,"");};_fecbb .Values [_febf ]=_fefgg ;_fecbb .Boxes [_febf ]=_fedg ;};return _fecbb ,nil ;};func _fcb (_bdga ,_gag *Bitmap ,_efbc ,_bgdg ,_bcdf uint ,_ecd ,_agcc int ,_bce bool ,_bbbc ,_gafe int )error {for _fdca :=_ecd ;_fdca < _agcc ;_fdca ++{if _bbbc +1< len (_bdga .Data ){_fbcf :=_fdca +1==_agcc ;_bggf ,_bged :=_bdga .GetByte (_bbbc );if _bged !=nil {return _bged ;};_bbbc ++;_bggf <<=_efbc ;_febca ,_bged :=_bdga .GetByte (_bbbc );if _bged !=nil {return _bged ;};_febca >>=_bgdg ;_ddbb :=_bggf |_febca ;if _fbcf &&!_bce {_ddbb =_eec (_bcdf ,_ddbb );};_bged =_gag .SetByte (_gafe ,_ddbb );if _bged !=nil {return _bged ;};_gafe ++;if _fbcf &&_bce {_ddbg ,_dbbb :=_bdga .GetByte (_bbbc );if _dbbb !=nil {return _dbbb ;};_ddbg <<=_efbc ;_ddbb =_eec (_bcdf ,_ddbg );if _dbbb =_gag .SetByte (_gafe ,_ddbb );_dbbb !=nil {return _dbbb ;};};continue ;};_geac ,_bcdg :=_bdga .GetByte (_bbbc );if _bcdg !=nil {_dfc .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",_bbbc ,_bcdg );return _bcdg ;};_geac <<=_efbc ;_bbbc ++;_bcdg =_gag .SetByte (_gafe ,_geac );if _bcdg !=nil {return _bcdg ;};_gafe ++;};return nil ;};type MorphOperation int ;func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _edeg (src ,sequence ...);};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func _abba (_faeb *Bitmap ,_ggbb *Bitmap ,_faebb *Selection ,_aegge **Bitmap )(*Bitmap ,error ){const _bfde ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _ggbb ==nil {return nil ,_f .Error (_bfde ,"\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 _faebb ==nil {return nil ,_f .Error (_bfde ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_feee ,_adbd :=_faebb .Height ,_faebb .Width ;if _feee ==0||_adbd ==0{return nil ,_f .Error (_bfde ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _faeb ==nil {_faeb =_ggbb .createTemplate ();*_aegge =_ggbb ;return _faeb ,nil ;};_faeb .Width =_ggbb .Width ;_faeb .Height =_ggbb .Height ;_faeb .RowStride =_ggbb .RowStride ;_faeb .Color =_ggbb .Color ;_faeb .Data =make ([]byte ,_ggbb .RowStride *_ggbb .Height );if _faeb ==_ggbb {*_aegge =_ggbb .Copy ();}else {*_aegge =_ggbb ;};return _faeb ,nil ;};var (_eaf =_dfe ();_abaf =_fgf ();_dgga =_deg (););type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func (_fag *Bitmap )String ()string {var _eee ="\u000a";for _cac :=0;_cac < _fag .Height ;_cac ++{var _eef string ;for _cbe :=0;_cbe < _fag .Width ;_cbe ++{_ebfgc :=_fag .GetPixel (_cbe ,_cac );if _ebfgc {_eef +="\u0031";}else {_eef +="\u0030";};};_eee +=_eef +"\u000a";};return _eee ;};func (_addg *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _addg .addBorderGeneral (left ,right ,top ,bot ,val );};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_fdgg bool ,_eaad error ){const _caeb ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_aaag ,_fdbg :=p1 .Width ,p1 .Height ;_adbf ,_eece :=p3 .Width ,p3 .Height ;if _e .Abs (_aaag -_adbf )> maxDiffW {return false ,nil ;};if _e .Abs (_fdbg -_eece )> maxDiffH {return false ,nil ;};_cgaa :=int (float32 (area1 )*(1.0-rank )+0.5);_bdea :=int (float32 (area3 )*(1.0-rank )+0.5);var _afcg ,_fddba int ;if delX >=0{_afcg =int (delX +0.5);}else {_afcg =int (delX -0.5);};if delY >=0{_fddba =int (delY +0.5);}else {_fddba =int (delY -0.5);};_ecgbg :=p1 .CreateTemplate ();if _eaad =_ecgbg .RasterOperation (0,0,_aaag ,_fdbg ,PixSrc ,p1 ,0,0);_eaad !=nil {return false ,_f .Wrap (_eaad ,_caeb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _eaad =_ecgbg .RasterOperation (_afcg ,_fddba ,_aaag ,_fdbg ,PixNotSrcAndDst ,p4 ,0,0);_eaad !=nil {return false ,_f .Wrap (_eaad ,_caeb ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_fdgg ,_eaad =_ecgbg .ThresholdPixelSum (_cgaa ,tab8 );if _eaad !=nil {return false ,_f .Wrap (_eaad ,_caeb ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _fdgg {return false ,nil ;};if _eaad =_ecgbg .RasterOperation (_afcg ,_fddba ,_adbf ,_eece ,PixSrc ,p3 ,0,0);_eaad !=nil {return false ,_f .Wrap (_eaad ,_caeb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _eaad =_ecgbg .RasterOperation (0,0,_adbf ,_eece ,PixNotSrcAndDst ,p2 ,0,0);_eaad !=nil {return false ,_f .Wrap (_eaad ,_caeb ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_fdgg ,_eaad =_ecgbg .ThresholdPixelSum (_bdea ,tab8 );if _eaad !=nil {return false ,_f .Wrap (_eaad ,_caeb ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_fdgg ,nil ;};func MakePixelCentroidTab8 ()[]int {return _gdag ()};func (_bca *Bitmap )GetByte (index int )(byte ,error ){if index > len (_bca .Data )-1||index < 0{return 0,_f .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 _bca .Data [index ],nil ;};func (_ccae *Bitmap )thresholdPixelSum (_abae int )bool {var (_gdd int ;_fec uint8 ;_fabb byte ;_dcce int ;);_cgf :=_ccae .RowStride ;_bggb :=uint (_ccae .Width &0x07);if _bggb !=0{_fec =uint8 ((0xff<<(8-_bggb ))&0xff);_cgf --;};for _dgaa :=0;_dgaa < _ccae .Height ;_dgaa ++{for _dcce =0;_dcce < _cgf ;_dcce ++{_fabb =_ccae .Data [_dgaa *_ccae .RowStride +_dcce ];_gdd +=int (_cgd [_fabb ]);};if _bggb !=0{_fabb =_ccae .Data [_dgaa *_ccae .RowStride +_dcce ]&_fec ;_gdd +=int (_cgd [_fabb ]);};if _gdd > _abae {return true ;};};return false ;};func _bbeg (_feag ,_afda *Bitmap ,_gbb *Selection )(*Bitmap ,error ){const _cdee ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _bege error ;if _feag ,_bege =_acbc (_feag ,_afda ,_gbb );_bege !=nil {return nil ,_bege ;};_cecfb ,_bege :=_bdbb (nil ,_afda ,_gbb );if _bege !=nil {return nil ,_f .Wrap (_bege ,_cdee ,"");};if _ ,_bege =_gggce (_feag ,_cecfb ,_gbb );_bege !=nil {return nil ,_f .Wrap (_bege ,_cdee ,"");};return _feag ,nil ;};var (_accb =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_abfc =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_dbaa *Bitmap )ToImage ()_df .Image {_fef ,_bbbb :=_b .NewImage (_dbaa .Width ,_dbaa .Height ,1,1,_dbaa .Data ,nil ,nil );if _bbbb !=nil {_dfc .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",_bbbb );};return _fef ;};func (_cdg *Bitmap )Equivalent (s *Bitmap )bool {return _cdg .equivalent (s )};func _cdef (_bgbb ,_gff *Bitmap ,_edfd ,_fegda ,_adfg ,_efgb ,_bfefg ,_gdc ,_bbc ,_cge int ,_acccd CombinationOperator ,_fefe int )error {var _aafc int ;_fffd :=func (){_aafc ++;_adfg +=_gff .RowStride ;_efgb +=_bgbb .RowStride ;_bfefg +=_bgbb .RowStride };for _aafc =_edfd ;_aafc < _fegda ;_fffd (){var _ggbfa uint16 ;_bgd :=_adfg ;for _ddaf :=_efgb ;_ddaf <=_bfefg ;_ddaf ++{_ggad ,_beec :=_gff .GetByte (_bgd );if _beec !=nil {return _beec ;};_fagb ,_beec :=_bgbb .GetByte (_ddaf );if _beec !=nil {return _beec ;};_ggbfa =(_ggbfa |(uint16 (_fagb )&0xff))<<uint (_cge );_fagb =byte (_ggbfa >>8);if _beec =_gff .SetByte (_bgd ,_cabdc (_ggad ,_fagb ,_acccd ));_beec !=nil {return _beec ;};_bgd ++;_ggbfa <<=uint (_bbc );if _ddaf ==_bfefg {_fagb =byte (_ggbfa >>(8-uint8 (_cge )));if _fefe !=0{_fagb =_eec (uint (8+_gdc ),_fagb );};_ggad ,_beec =_gff .GetByte (_bgd );if _beec !=nil {return _beec ;};if _beec =_gff .SetByte (_bgd ,_cabdc (_ggad ,_fagb ,_acccd ));_beec !=nil {return _beec ;};};};};return nil ;};func (_acfa *Bitmap )nextOnPixel (_dccf ,_fbcd int )(_fbe _df .Point ,_cfgf bool ,_bdgb error ){const _bfcc ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_fbe ,_cfgf ,_bdgb =_acfa .nextOnPixelLow (_acfa .Width ,_acfa .Height ,_acfa .RowStride ,_dccf ,_fbcd );if _bdgb !=nil {return _fbe ,false ,_f .Wrap (_bdgb ,_bfcc ,"");};return _fbe ,_cfgf ,nil ;};const (Vanilla Color =iota ;Chocolate ;);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 _dfe ()(_baba [256]uint16 ){for _fgd :=0;_fgd < 256;_fgd ++{if _fgd &0x01!=0{_baba [_fgd ]|=0x3;};if _fgd &0x02!=0{_baba [_fgd ]|=0xc;};if _fgd &0x04!=0{_baba [_fgd ]|=0x30;};if _fgd &0x08!=0{_baba [_fgd ]|=0xc0;};if _fgd &0x10!=0{_baba [_fgd ]|=0x300;};if _fgd &0x20!=0{_baba [_fgd ]|=0xc00;};if _fgd &0x40!=0{_baba [_fgd ]|=0x3000;};if _fgd &0x80!=0{_baba [_fgd ]|=0xc000;};};return _baba ;};func TstImageBitmap ()*Bitmap {return _dfad .Copy ()};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_aeaf *Boxes )Get (i int )(*_df .Rectangle ,error ){const _bbed ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _aeaf ==nil {return nil ,_f .Error (_bbed ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_aeaf )-1{return nil ,_f .Errorf (_bbed ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_aeaf )[i ],nil ;};type SizeComparison int ;func _fafa (_dde ,_dfbga ,_dggcd byte )byte {return (_dde &^(_dggcd ))|(_dfbga &_dggcd )};func Rect (x ,y ,w ,h int )(*_df .Rectangle ,error ){const _cef ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_f .Errorf (_cef ,"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 ,_f .Error (_cef ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_ebc :=_df .Rect (x ,y ,x +w ,y +h );return &_ebc ,nil ;};func _edeg (_ecce *Bitmap ,_cafd ...MorphProcess )(_dbde *Bitmap ,_bgaff error ){const _bffc ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _ecce ==nil {return nil ,_f .Error (_bffc ,"\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 (_cafd )==0{return nil ,_f .Error (_bffc ,"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 _bgaff =_cgfc (_cafd ...);_bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"");};var _bbae ,_fdee ,_gdac int ;_dbde =_ecce .Copy ();for _ ,_egfd :=range _cafd {switch _egfd .Operation {case MopDilation :_bbae ,_fdee =_egfd .getWidthHeight ();_dbde ,_bgaff =DilateBrick (nil ,_dbde ,_bbae ,_fdee );if _bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"");};case MopErosion :_bbae ,_fdee =_egfd .getWidthHeight ();_dbde ,_bgaff =_daed (nil ,_dbde ,_bbae ,_fdee );if _bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"");};case MopOpening :_bbae ,_fdee =_egfd .getWidthHeight ();_dbde ,_bgaff =_fffde (nil ,_dbde ,_bbae ,_fdee );if _bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"");};case MopClosing :_bbae ,_fdee =_egfd .getWidthHeight ();_dbde ,_bgaff =_egeb (nil ,_dbde ,_bbae ,_fdee );if _bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"");};case MopRankBinaryReduction :_dbde ,_bgaff =_ef (_dbde ,_egfd .Arguments ...);if _bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"");};case MopReplicativeBinaryExpansion :_dbde ,_bgaff =_dbeg (_dbde ,_egfd .Arguments [0]);if _bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"");};case MopAddBorder :_gdac =_egfd .Arguments [0];_dbde ,_bgaff =_dbde .AddBorder (_gdac ,0);if _bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"");};default:return nil ,_f .Error (_bffc ,"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 _gdac > 0{_dbde ,_bgaff =_dbde .RemoveBorder (_gdac );if _bgaff !=nil {return nil ,_f .Wrap (_bgaff ,_bffc ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _dbde ,nil ;};func _dbeg (_fbfe *Bitmap ,_fcfa int )(*Bitmap ,error ){const _afbf ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _fbfe ==nil {return nil ,_f .Error (_afbf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fcfa <=0{return nil ,_f .Error (_afbf ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _fcfa ==1{_cbfcg ,_dacab :=_beb (nil ,_fbfe );if _dacab !=nil {return nil ,_f .Wrap (_dacab ,_afbf ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _cbfcg ,nil ;};_dfbg ,_bcgg :=_ea (_fbfe ,_fcfa ,_fcfa );if _bcgg !=nil {return nil ,_f .Wrap (_bcgg ,_afbf ,"");};return _dfbg ,nil ;};func (_gcde Points )YSorter ()func (_ada ,_gcge int )bool {return func (_aaad ,_gcacg int )bool {return _gcde [_aaad ].Y < _gcde [_gcacg ].Y };};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_beca Points )GetIntY (i int )(int ,error ){if i >=len (_beca ){return 0,_f .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 (_beca [i ].Y ),nil ;};func _babdd (_feeef *Bitmap ,_dcad ,_bedd int ,_ebbb ,_dfac int ,_bdgfg RasterOperator ,_edeef *Bitmap ,_agca ,_egde int )error {var _agbg ,_gebf ,_fdbd ,_fdga int ;if _dcad < 0{_agca -=_dcad ;_ebbb +=_dcad ;_dcad =0;};if _agca < 0{_dcad -=_agca ;_ebbb +=_agca ;_agca =0;};_agbg =_dcad +_ebbb -_feeef .Width ;if _agbg > 0{_ebbb -=_agbg ;};_gebf =_agca +_ebbb -_edeef .Width ;if _gebf > 0{_ebbb -=_gebf ;};if _bedd < 0{_egde -=_bedd ;_dfac +=_bedd ;_bedd =0;};if _egde < 0{_bedd -=_egde ;_dfac +=_egde ;_egde =0;};_fdbd =_bedd +_dfac -_feeef .Height ;if _fdbd > 0{_dfac -=_fdbd ;};_fdga =_egde +_dfac -_edeef .Height ;if _fdga > 0{_dfac -=_fdga ;};if _ebbb <=0||_dfac <=0{return nil ;};var _fcfe error ;switch {case _dcad &7==0&&_agca &7==0:_fcfe =_egcd (_feeef ,_dcad ,_bedd ,_ebbb ,_dfac ,_bdgfg ,_edeef ,_agca ,_egde );case _dcad &7==_agca &7:_fcfe =_dbda (_feeef ,_dcad ,_bedd ,_ebbb ,_dfac ,_bdgfg ,_edeef ,_agca ,_egde );default:_fcfe =_daeca (_feeef ,_dcad ,_bedd ,_ebbb ,_dfac ,_bdgfg ,_edeef ,_agca ,_egde );};if _fcfe !=nil {return _f .Wrap (_fcfe ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func (_eecg *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _deaa ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _eecg ==nil {return nil ,_f .Error (_deaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_eecg .Values )-1{return nil ,_f .Errorf (_deaa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _eecg .Values [i ],nil ;};func (_ddag *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _bcaa ="\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 >=_ddag .IntSlice .Size (){return 0,_f .Errorf (_bcaa ,"\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 (_ddag .YAtIndex (i )),nil ;};func (_dggb *ClassedPoints )Less (i ,j int )bool {return _dggb ._aebe (i ,j )};func (_bgbg Points )Size ()int {return len (_bgbg )};func (_abbee *Bitmaps )AddBox (box *_df .Rectangle ){_abbee .Boxes =append (_abbee .Boxes ,box )};func (_beae *ClassedPoints )YAtIndex (i int )float32 {return (*_beae .Points )[_beae .IntSlice [i ]].Y };func (_bfeae *BitmapsArray )AddBitmaps (bm *Bitmaps ){_bfeae .Values =append (_bfeae .Values ,bm )};func ClipBoxToRectangle (box *_df .Rectangle ,wi ,hi int )(_daec *_df .Rectangle ,_faef error ){const _gcdf ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_f .Error (_gcdf ,"\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 ,_f .Error (_gcdf ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_daec =&(*box );if _daec .Min .X < 0{_daec .Max .X +=_daec .Min .X ;_daec .Min .X =0;};if _daec .Min .Y < 0{_daec .Max .Y +=_daec .Min .Y ;_daec .Min .Y =0;};if _daec .Max .X > wi {_daec .Max .X =wi ;};if _daec .Max .Y > hi {_daec .Max .Y =hi ;};return _daec ,nil ;};func (_fgfa *Bitmap )GetUnpaddedData ()([]byte ,error ){_cdc :=uint (_fgfa .Width &0x07);if _cdc ==0{return _fgfa .Data ,nil ;};_bdba :=_fgfa .Width *_fgfa .Height ;if _bdba %8!=0{_bdba >>=3;_bdba ++;}else {_bdba >>=3;};_bcdc :=make ([]byte ,_bdba );_dfg :=_cf .NewWriterMSB (_bcdc );const _gebg ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _ffbb :=0;_ffbb < _fgfa .Height ;_ffbb ++{for _gcg :=0;_gcg < _fgfa .RowStride ;_gcg ++{_cag :=_fgfa .Data [_ffbb *_fgfa .RowStride +_gcg ];if _gcg !=_fgfa .RowStride -1{_aab :=_dfg .WriteByte (_cag );if _aab !=nil {return nil ,_f .Wrap (_aab ,_gebg ,"");};continue ;};for _caf :=uint (0);_caf < _cdc ;_caf ++{_ebfg :=_dfg .WriteBit (int (_cag >>(7-_caf )&0x01));if _ebfg !=nil {return nil ,_f .Wrap (_ebfg ,_gebg ,"");};};};};return _bcdc ,nil ;};func (_ddec *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _gdge ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_ddec .Values )==0{return nil ,_f .Error (_gdge ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_efdaf :=&BitmapsArray {};_ddec .SortByWidth ();_gcba :=-1;_abfd :=-1;for _aeaeg :=0;_aeaeg < len (_ddec .Values );_aeaeg ++{_edgg :=_ddec .Values [_aeaeg ].Width ;if _edgg > _gcba {_gcba =_edgg ;_abfd ++;_efdaf .Values =append (_efdaf .Values ,&Bitmaps {});};_efdaf .Values [_abfd ].AddBitmap (_ddec .Values [_aeaeg ]);};return _efdaf ,nil ;};func (_egga *Bitmap )setTwoBytes (_dgcb int ,_gaf uint16 )error {if _dgcb +1> len (_egga .Data )-1{return _f .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",_dgcb );};_egga .Data [_dgcb ]=byte ((_gaf &0xff00)>>8);_egga .Data [_dgcb +1]=byte (_gaf &0xff);return nil ;};func (_abb *Bitmap )Equals (s *Bitmap )bool {if len (_abb .Data )!=len (s .Data )||_abb .Width !=s .Width ||_abb .Height !=s .Height {return false ;};for _gad :=0;_gad < _abb .Height ;_gad ++{_dfd :=_gad *_abb .RowStride ;for _dad :=0;_dad < _abb .RowStride ;_dad ++{if _abb .Data [_dfd +_dad ]!=s .Data [_dfd +_dad ]{return false ;};};};return true ;};type Point struct{X ,Y float32 ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _beb (d ,s )};func TstISymbol (t *_a .T ,scale ...int )*Bitmap {_fadf ,_fcddc :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_g .NoError (t ,_fcddc );return TstGetScaledSymbol (t ,_fadf ,scale ...);};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func _cabdc (_fgad ,_aagf byte ,_ddb CombinationOperator )byte {switch _ddb {case CmbOpOr :return _aagf |_fgad ;case CmbOpAnd :return _aagf &_fgad ;case CmbOpXor :return _aagf ^_fgad ;case CmbOpXNor :return ^(_aagf ^_fgad );case CmbOpNot :return ^(_aagf );default:return _aagf ;};};func TstOSymbol (t *_a .T ,scale ...int )*Bitmap {_adag ,_dddea :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_g .NoError (t ,_dddea );return TstGetScaledSymbol (t ,_adag ,scale ...);};var MorphBC BoundaryCondition ;func (_dcf *Boxes )selectWithIndicator (_fagc *_e .NumSlice )(_fgeg *Boxes ,_bbd error ){const _egec ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _dcf ==nil {return nil ,_f .Error (_egec ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _fagc ==nil {return nil ,_f .Error (_egec ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_fagc )!=len (*_dcf ){return nil ,_f .Error (_egec ,"\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 _gfc ,_gcfg int ;for _fgdf :=0;_fgdf < len (*_fagc );_fgdf ++{if _gfc ,_bbd =_fagc .GetInt (_fgdf );_bbd !=nil {return nil ,_f .Wrap (_bbd ,_egec ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _gfc ==1{_gcfg ++;};};if _gcfg ==len (*_dcf ){return _dcf ,nil ;};_fbdd :=Boxes {};for _aaed :=0;_aaed < len (*_fagc );_aaed ++{_gfc =int ((*_fagc )[_aaed ]);if _gfc ==0{continue ;};_fbdd =append (_fbdd ,(*_dcf )[_aaed ]);};_fgeg =&_fbdd ;return _fgeg ,nil ;};func _geg (_fadb *Bitmap ,_dbga ,_bgbgb int ,_acde ,_gaae int ,_daba RasterOperator ){var (_cfbg int ;_cbfb byte ;_cgaeg ,_dffb int ;_fbac int ;);_eacc :=_acde >>3;_cagd :=_acde &7;if _cagd > 0{_cbfb =_accb [_cagd ];};_cfbg =_fadb .RowStride *_bgbgb +(_dbga >>3);switch _daba {case PixClr :for _cgaeg =0;_cgaeg < _gaae ;_cgaeg ++{_fbac =_cfbg +_cgaeg *_fadb .RowStride ;for _dffb =0;_dffb < _eacc ;_dffb ++{_fadb .Data [_fbac ]=0x0;_fbac ++;};if _cagd > 0{_fadb .Data [_fbac ]=_fafa (_fadb .Data [_fbac ],0x0,_cbfb );};};case PixSet :for _cgaeg =0;_cgaeg < _gaae ;_cgaeg ++{_fbac =_cfbg +_cgaeg *_fadb .RowStride ;for _dffb =0;_dffb < _eacc ;_dffb ++{_fadb .Data [_fbac ]=0xff;_fbac ++;};if _cagd > 0{_fadb .Data [_fbac ]=_fafa (_fadb .Data [_fbac ],0xff,_cbfb );};};case PixNotDst :for _cgaeg =0;_cgaeg < _gaae ;_cgaeg ++{_fbac =_cfbg +_cgaeg *_fadb .RowStride ;for _dffb =0;_dffb < _eacc ;_dffb ++{_fadb .Data [_fbac ]=^_fadb .Data [_fbac ];_fbac ++;};if _cagd > 0{_fadb .Data [_fbac ]=_fafa (_fadb .Data [_fbac ],^_fadb .Data [_fbac ],_cbfb );};};};};func TstWordBitmapWithSpaces (t *_a .T ,scale ...int )*Bitmap {_egaee :=1;if len (scale )> 0{_egaee =scale [0];};_baaed :=3;_adge :=9+7+15+2*_baaed +2*_baaed ;_gbff :=5+_baaed +5+2*_baaed ;_fcac :=New (_adge *_egaee ,_gbff *_egaee );_fdae :=&Bitmaps {};var _gffe *int ;_baaed *=_egaee ;_ebcea :=_baaed ;_gffe =&_ebcea ;_fcad :=_baaed ;_bagde :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,_baaed );_bagde =TstISymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,_baaed );_bagde =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,0);*_gffe =_baaed ;_fcad =5*_egaee +_baaed ;_bagde =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,_baaed );_bagde =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,1*_egaee );_bagde =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fdae ,_bagde ,_gffe ,_fcad ,0);TstWriteSymbols (t ,_fdae ,_fcac );return _fcac ;};func TstImageBitmapData ()[]byte {return _dfad .Data };func (_afgb *Bitmap )setPadBits (_becd int ){_caaf :=8-_afgb .Width %8;if _caaf ==8{return ;};_fgbg :=_afgb .Width /8;_efge :=_abfc [_caaf ];if _becd ==0{_efge ^=_efge ;};var _bbbbc int ;for _bfdb :=0;_bfdb < _afgb .Height ;_bfdb ++{_bbbbc =_bfdb *_afgb .RowStride +_fgbg ;if _becd ==0{_afgb .Data [_bbbbc ]&=_efge ;}else {_afgb .Data [_bbbbc ]|=_efge ;};};};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _dcd ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_affg :=_bgaf (width ,height );_affg .Data =data ;if len (data )< height *_affg .RowStride {return nil ,_f .Errorf (_dcd ,"\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 *_affg .RowStride );};return _affg ,nil ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_df .Rectangle ;};func (_begeb Points )Get (i int )(Point ,error ){if i > len (_begeb )-1{return Point {},_f .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 _begeb [i ],nil ;};func (_ebff *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_gfea *Boxes ,_fega error ){const _aege ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _ebff ==nil {return nil ,_f .Error (_aege ,"\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 ,_f .Error (_aege ,"\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 _gfea ,_fega =_ebff .connComponentsBB (connectivity );_fega !=nil {return nil ,_f .Wrap (_fega ,_aege ,"");};}else {if _gfea ,_fega =_ebff .connComponentsBitmapsBB (bms ,connectivity );_fega !=nil {return nil ,_f .Wrap (_fega ,_aege ,"");};};return _gfea ,nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _cabdc (oldByte ,newByte ,op );};var _ _c .Interface =&ClassedPoints {};func (_eab *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _eab .Copy (),nil ;};_ddcc ,_fcgd :=_eab .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _fcgd !=nil {return nil ,_f .Wrap (_fcgd ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _ddcc ,nil ;};func _bdfa (_defe *Bitmap ,_fbaca *_e .Stack ,_abcd ,_fabc ,_fdbb int )(_cabdcd *_df .Rectangle ,_ebgc error ){const _eedb ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _defe ==nil {return nil ,_f .Error (_eedb ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _fbaca ==nil {return nil ,_f .Error (_eedb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _fdbb {case 4:if _cabdcd ,_ebgc =_abgf (_defe ,_fbaca ,_abcd ,_fabc );_ebgc !=nil {return nil ,_f .Wrap (_ebgc ,_eedb ,"");};return _cabdcd ,nil ;case 8:if _cabdcd ,_ebgc =_eddg (_defe ,_fbaca ,_abcd ,_fabc );_ebgc !=nil {return nil ,_f .Wrap (_ebgc ,_eedb ,"");};return _cabdcd ,nil ;default:return nil ,_f .Errorf (_eedb ,"\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",_fdbb );};};func (_fgee *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _adggd ="\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 >=_fgee .IntSlice .Size (){return 0,_f .Errorf (_adggd ,"\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 (_fgee .XAtIndex (i )),nil ;};func (_dege *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _cdge ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _dege ==nil {return nil ,_f .Error (_cdge ,"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 (_dege .Values )-1{return nil ,_f .Errorf (_cdge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dege .Values [i ],nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _dee ="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 ,_f .Error (_dee ,"\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 ,_f .Error (_dee ,"\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 ,_f .Error (_dee ,"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 ,_f .Error (_dee ,"\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 ,_f .Error (_dee ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");};_adca ,_ddcd :=bm1 .Width ,bm1 .Height ;_gacd ,_eeggd :=bm2 .Width ,bm2 .Height ;if _e .Abs (_adca -_gacd )> maxDiffW {return false ,nil ;};if _e .Abs (_ddcd -_eeggd )> maxDiffH {return false ,nil ;};_fdef :=int (delX +_e .Sign (delX )*0.5);_bfgf :=int (delY +_e .Sign (delY )*0.5);_ddf :=int (_cfc .Ceil (_cfc .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_fdff :=bm2 .RowStride ;_agcg :=_cabe (_bfgf ,0);_abcc :=_bfbcg (_eeggd +_bfgf ,_ddcd );_gdaa :=bm1 .RowStride *_agcg ;_ceed :=bm2 .RowStride *(_agcg -_bfgf );var _edbg int ;if _abcc <=_ddcd {_edbg =downcount [_abcc -1];};_debc :=_cabe (_fdef ,0);_daa :=_bfbcg (_gacd +_fdef ,_adca );var _babd ,_aadcc int ;if _fdef >=8{_babd =_fdef >>3;_gdaa +=_babd ;_debc -=_babd <<3;_daa -=_babd <<3;_fdef &=7;}else if _fdef <=-8{_aadcc =-((_fdef +7)>>3);_ceed +=_aadcc ;_fdff -=_aadcc ;_fdef +=_aadcc <<3;};var (_efc ,_feae ,_agbd int ;_cgcc ,_aabb ,_geec byte ;);if _debc >=_daa ||_agcg >=_abcc {return false ,nil ;};_badc :=(_daa +7)>>3;switch {case _fdef ==0:for _feae =_agcg ;_feae < _abcc ;_feae ,_gdaa ,_ceed =_feae +1,_gdaa +bm1 .RowStride ,_ceed +bm2 .RowStride {for _agbd =0;_agbd < _badc ;_agbd ++{_cgcc =bm1 .Data [_gdaa +_agbd ]&bm2 .Data [_ceed +_agbd ];_efc +=tab [_cgcc ];};if _efc >=_ddf {return true ,nil ;};if _faaa :=_efc +downcount [_feae ]-_edbg ;_faaa < _ddf {return false ,nil ;};};case _fdef > 0&&_fdff < _badc :for _feae =_agcg ;_feae < _abcc ;_feae ,_gdaa ,_ceed =_feae +1,_gdaa +bm1 .RowStride ,_ceed +bm2 .RowStride {_aabb =bm1 .Data [_gdaa ];_geec =bm2 .Data [_ceed ]>>uint (_fdef );_cgcc =_aabb &_geec ;_efc +=tab [_cgcc ];for _agbd =1;_agbd < _fdff ;_agbd ++{_aabb =bm1 .Data [_gdaa +_agbd ];_geec =bm2 .Data [_ceed +_agbd ]>>uint (_fdef )|bm2 .Data [_ceed +_agbd -1]<<uint (8-_fdef );_cgcc =_aabb &_geec ;_efc +=tab [_cgcc ];};_aabb =bm1 .Data [_gdaa +_agbd ];_geec =bm2 .Data [_ceed +_agbd -1]<<uint (8-_fdef );_cgcc =_aabb &_geec ;_efc +=tab [_cgcc ];if _efc >=_ddf {return true ,nil ;}else if _efc +downcount [_feae ]-_edbg < _ddf {return false ,nil ;};};case _fdef > 0&&_fdff >=_badc :for _feae =_agcg ;_feae < _abcc ;_feae ,_gdaa ,_ceed =_feae +1,_gdaa +bm1 .RowStride ,_ceed +bm2 .RowStride {_aabb =bm1 .Data [_gdaa ];_geec =bm2 .Data [_ceed ]>>uint (_fdef );_cgcc =_aabb &_geec ;_efc +=tab [_cgcc ];for _agbd =1;_agbd < _badc ;_agbd ++{_aabb =bm1 .Data [_gdaa +_agbd ];_geec =bm2 .Data [_ceed +_agbd ]>>uint (_fdef );_geec |=bm2 .Data [_ceed +_agbd -1]<<uint (8-_fdef );_cgcc =_aabb &_geec ;_efc +=tab [_cgcc ];};if _efc >=_ddf {return true ,nil ;}else if _efc +downcount [_feae ]-_edbg < _ddf {return false ,nil ;};};case _badc < _fdff :for _feae =_agcg ;_feae < _abcc ;_feae ,_gdaa ,_ceed =_feae +1,_gdaa +bm1 .RowStride ,_ceed +bm2 .RowStride {for _agbd =0;_agbd < _badc ;_agbd ++{_aabb =bm1 .Data [_gdaa +_agbd ];_geec =bm2 .Data [_ceed +_agbd ]<<uint (-_fdef );_geec |=bm2 .Data [_ceed +_agbd +1]>>uint (8+_fdef );_cgcc =_aabb &_geec ;_efc +=tab [_cgcc ];};if _efc >=_ddf {return true ,nil ;}else if _dbc :=_efc +downcount [_feae ]-_edbg ;_dbc < _ddf {return false ,nil ;};};case _fdff >=_badc :for _feae =_agcg ;_feae < _abcc ;_feae ,_gdaa ,_ceed =_feae +1,_gdaa +bm1 .RowStride ,_ceed +bm2 .RowStride {for _agbd =0;_agbd < _badc ;_agbd ++{_aabb =bm1 .Data [_gdaa +_agbd ];_geec =bm2 .Data [_ceed +_agbd ]<<uint (-_fdef );_geec |=bm2 .Data [_ceed +_agbd +1]>>uint (8+_fdef );_cgcc =_aabb &_geec ;_efc +=tab [_cgcc ];};_aabb =bm1 .Data [_gdaa +_agbd ];_geec =bm2 .Data [_ceed +_agbd ]<<uint (-_fdef );_cgcc =_aabb &_geec ;_efc +=tab [_cgcc ];if _efc >=_ddf {return true ,nil ;}else if _efc +downcount [_feae ]-_edbg < _ddf {return false ,nil ;};};};_aefa :=float32 (_efc )*float32 (_efc )/(float32 (area1 )*float32 (area2 ));if _aefa >=scoreThreshold {_dfc .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",_efc ,_ddf ,_aefa ,scoreThreshold );};return false ,nil ;};func _gdag ()[]int {_badg :=make ([]int ,256);_badg [0]=0;_badg [1]=7;var _dabf int ;for _dabf =2;_dabf < 4;_dabf ++{_badg [_dabf ]=_badg [_dabf -2]+6;};for _dabf =4;_dabf < 8;_dabf ++{_badg [_dabf ]=_badg [_dabf -4]+5;};for _dabf =8;_dabf < 16;_dabf ++{_badg [_dabf ]=_badg [_dabf -8]+4;};for _dabf =16;_dabf < 32;_dabf ++{_badg [_dabf ]=_badg [_dabf -16]+3;};for _dabf =32;_dabf < 64;_dabf ++{_badg [_dabf ]=_badg [_dabf -32]+2;};for _dabf =64;_dabf < 128;_dabf ++{_badg [_dabf ]=_badg [_dabf -64]+1;};for _dabf =128;_dabf < 256;_dabf ++{_badg [_dabf ]=_badg [_dabf -128];};return _badg ;};func (_gbg *ClassedPoints )Swap (i ,j int ){_gbg .IntSlice [i ],_gbg .IntSlice [j ]=_gbg .IntSlice [j ],_gbg .IntSlice [i ];};func TstDSymbol (t *_a .T ,scale ...int )*Bitmap {_fbbcf ,_eabgc :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_g .NoError (t ,_eabgc );return TstGetScaledSymbol (t ,_fbbcf ,scale ...);};func (_baga *Bitmap )centroid (_fcf ,_dgbe []int )(Point ,error ){_efgg :=Point {};_baga .setPadBits (0);if len (_fcf )==0{_fcf =_gdag ();};if len (_dgbe )==0{_dgbe =_gdecf ();};var _ebce ,_fbaa ,_eed ,_bafd ,_cefb ,_aegb int ;var _gfcfb byte ;for _cefb =0;_cefb < _baga .Height ;_cefb ++{_gbdd :=_baga .RowStride *_cefb ;_bafd =0;for _aegb =0;_aegb < _baga .RowStride ;_aegb ++{_gfcfb =_baga .Data [_gbdd +_aegb ];if _gfcfb !=0{_bafd +=_dgbe [_gfcfb ];_ebce +=_fcf [_gfcfb ]+_aegb *8*_dgbe [_gfcfb ];};};_eed +=_bafd ;_fbaa +=_bafd *_cefb ;};if _eed !=0{_efgg .X =float32 (_ebce )/float32 (_eed );_efgg .Y =float32 (_fbaa )/float32 (_eed );};return _efgg ,nil ;};func TstASymbol (t *_a .T )*Bitmap {t .Helper ();_ebffd :=New (6,6);_g .NoError (t ,_ebffd .SetPixel (1,0,1));_g .NoError (t ,_ebffd .SetPixel (2,0,1));_g .NoError (t ,_ebffd .SetPixel (3,0,1));_g .NoError (t ,_ebffd .SetPixel (4,0,1));_g .NoError (t ,_ebffd .SetPixel (5,1,1));_g .NoError (t ,_ebffd .SetPixel (1,2,1));_g .NoError (t ,_ebffd .SetPixel (2,2,1));_g .NoError (t ,_ebffd .SetPixel (3,2,1));_g .NoError (t ,_ebffd .SetPixel (4,2,1));_g .NoError (t ,_ebffd .SetPixel (5,2,1));_g .NoError (t ,_ebffd .SetPixel (0,3,1));_g .NoError (t ,_ebffd .SetPixel (5,3,1));_g .NoError (t ,_ebffd .SetPixel (0,4,1));_g .NoError (t ,_ebffd .SetPixel (5,4,1));_g .NoError (t ,_ebffd .SetPixel (1,5,1));_g .NoError (t ,_ebffd .SetPixel (2,5,1));_g .NoError (t ,_ebffd .SetPixel (3,5,1));_g .NoError (t ,_ebffd .SetPixel (4,5,1));_g .NoError (t ,_ebffd .SetPixel (5,5,1));return _ebffd ;};func _bdbb (_fgbgd *Bitmap ,_ebda *Bitmap ,_cgcf *Selection )(*Bitmap ,error ){var (_beag *Bitmap ;_abde error ;);_fgbgd ,_abde =_abba (_fgbgd ,_ebda ,_cgcf ,&_beag );if _abde !=nil {return nil ,_abde ;};if _abde =_fgbgd .clearAll ();_abde !=nil {return nil ,_abde ;};var _eefce SelectionValue ;for _fdgc :=0;_fdgc < _cgcf .Height ;_fdgc ++{for _fdab :=0;_fdab < _cgcf .Width ;_fdab ++{_eefce =_cgcf .Data [_fdgc ][_fdab ];if _eefce ==SelHit {if _abde =_fgbgd .RasterOperation (_fdab -_cgcf .Cx ,_fdgc -_cgcf .Cy ,_ebda .Width ,_ebda .Height ,PixSrcOrDst ,_beag ,0,0);_abde !=nil {return nil ,_abde ;};};};};return _fgbgd ,nil ;};func _daeca (_eade *Bitmap ,_fcfc ,_cdcf ,_fgdd ,_geea int ,_cbcf RasterOperator ,_ggdae *Bitmap ,_fagd ,_ceeb int )error {var (_ceefb bool ;_eccd bool ;_abedb byte ;_fcfb int ;_fade int ;_ebgf int ;_gab int ;_dgge bool ;_bgc int ;_fegbf int ;_cfbc int ;_egda bool ;_fdgd byte ;_afdb int ;_acaa int ;_gada int ;_aegd byte ;_gaad int ;_cbbag int ;_gfffb uint ;_gbgd uint ;_fdabd byte ;_aeec shift ;_ccgcd bool ;_dbfd bool ;_cbgec ,_fdgad int ;);if _fagd &7!=0{_cbbag =8-(_fagd &7);};if _fcfc &7!=0{_fade =8-(_fcfc &7);};if _cbbag ==0&&_fade ==0{_fdabd =_abfc [0];}else {if _fade > _cbbag {_gfffb =uint (_fade -_cbbag );}else {_gfffb =uint (8-(_cbbag -_fade ));};_gbgd =8-_gfffb ;_fdabd =_abfc [_gfffb ];};if (_fcfc &7)!=0{_ceefb =true ;_fcfb =8-(_fcfc &7);_abedb =_abfc [_fcfb ];_ebgf =_eade .RowStride *_cdcf +(_fcfc >>3);_gab =_ggdae .RowStride *_ceeb +(_fagd >>3);_gaad =8-(_fagd &7);if _fcfb > _gaad {_aeec =_cefca ;if _fgdd >=_cbbag {_ccgcd =true ;};}else {_aeec =_faed ;};};if _fgdd < _fcfb {_eccd =true ;_abedb &=_accb [8-_fcfb +_fgdd ];};if !_eccd {_bgc =(_fgdd -_fcfb )>>3;if _bgc !=0{_dgge =true ;_fegbf =_eade .RowStride *_cdcf +((_fcfc +_fade )>>3);_cfbc =_ggdae .RowStride *_ceeb +((_fagd +_fade )>>3);};};_afdb =(_fcfc +_fgdd )&7;if !(_eccd ||_afdb ==0){_egda =true ;_fdgd =_accb [_afdb ];_acaa =_eade .RowStride *_cdcf +((_fcfc +_fade )>>3)+_bgc ;_gada =_ggdae .RowStride *_ceeb +((_fagd +_fade )>>3)+_bgc ;if _afdb > int (_gbgd ){_dbfd =true ;};};switch _cbcf {case PixSrc :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],_aegd ,_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]=_aegd ;};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],_aegd ,_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixNotSrc :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],^_aegd ,_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]=^_aegd ;};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],^_aegd ,_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixSrcOrDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],_aegd |_eade .Data [_ebgf ],_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]|=_aegd ;};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],_aegd |_eade .Data [_acaa ],_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixSrcAndDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],_aegd &_eade .Data [_ebgf ],_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]&=_aegd ;};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],_aegd &_eade .Data [_acaa ],_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixSrcXorDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],_aegd ^_eade .Data [_ebgf ],_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]^=_aegd ;};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],_aegd ^_eade .Data [_acaa ],_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixNotSrcOrDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],^_aegd |_eade .Data [_ebgf ],_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]|=^_aegd ;};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],^_aegd |_eade .Data [_acaa ],_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixNotSrcAndDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],^_aegd &_eade .Data [_ebgf ],_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]&=^_aegd ;};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],^_aegd &_eade .Data [_acaa ],_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixSrcOrNotDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],_aegd |^_eade .Data [_ebgf ],_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]=_aegd |^_eade .Data [_fegbf +_fdgad ];};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],_aegd |^_eade .Data [_acaa ],_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixSrcAndNotDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],_aegd &^_eade .Data [_ebgf ],_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]=_aegd &^_eade .Data [_fegbf +_fdgad ];};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],_aegd &^_eade .Data [_acaa ],_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixNotPixSrcOrDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],^(_aegd |_eade .Data [_ebgf ]),_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]=^(_aegd |_eade .Data [_fegbf +_fdgad ]);};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],^(_aegd |_eade .Data [_acaa ]),_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixNotPixSrcAndDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],^(_aegd &_eade .Data [_ebgf ]),_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]=^(_aegd &_eade .Data [_fegbf +_fdgad ]);};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],^(_aegd &_eade .Data [_acaa ]),_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};case PixNotPixSrcXorDst :if _ceefb {for _cbgec =0;_cbgec < _geea ;_cbgec ++{if _aeec ==_cefca {_aegd =_ggdae .Data [_gab ]<<_gfffb ;if _ccgcd {_aegd =_fafa (_aegd ,_ggdae .Data [_gab +1]>>_gbgd ,_fdabd );};}else {_aegd =_ggdae .Data [_gab ]>>_gbgd ;};_eade .Data [_ebgf ]=_fafa (_eade .Data [_ebgf ],^(_aegd ^_eade .Data [_ebgf ]),_abedb );_ebgf +=_eade .RowStride ;_gab +=_ggdae .RowStride ;};};if _dgge {for _cbgec =0;_cbgec < _geea ;_cbgec ++{for _fdgad =0;_fdgad < _bgc ;_fdgad ++{_aegd =_fafa (_ggdae .Data [_cfbc +_fdgad ]<<_gfffb ,_ggdae .Data [_cfbc +_fdgad +1]>>_gbgd ,_fdabd );_eade .Data [_fegbf +_fdgad ]=^(_aegd ^_eade .Data [_fegbf +_fdgad ]);};_fegbf +=_eade .RowStride ;_cfbc +=_ggdae .RowStride ;};};if _egda {for _cbgec =0;_cbgec < _geea ;_cbgec ++{_aegd =_ggdae .Data [_gada ]<<_gfffb ;if _dbfd {_aegd =_fafa (_aegd ,_ggdae .Data [_gada +1]>>_gbgd ,_fdabd );};_eade .Data [_acaa ]=_fafa (_eade .Data [_acaa ],^(_aegd ^_eade .Data [_acaa ]),_fdgd );_acaa +=_eade .RowStride ;_gada +=_ggdae .RowStride ;};};default:_dfc .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",_cbcf );return _f .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 (_dgae *ClassedPoints )SortByX (){_dgae ._aebe =_dgae .xSortFunction ();_c .Sort (_dgae )};func (_bcge *byWidth )Less (i ,j int )bool {return _bcge .Values [i ].Width < _bcge .Values [j ].Width };func _ae (_bc ,_fa *Bitmap )(_af error ){const _ge ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_add :=_fa .RowStride ;_abc :=_bc .RowStride ;var _gf ,_ecb ,_eg ,_bae ,_fee int ;for _eg =0;_eg < _fa .Height ;_eg ++{_gf =_eg *_add ;_ecb =8*_eg *_abc ;for _bae =0;_bae < _add ;_bae ++{if _af =_bc .setEightBytes (_ecb +_bae *8,_dgga [_fa .Data [_gf +_bae ]]);_af !=nil {return _f .Wrap (_af ,_ge ,"");};};for _fee =1;_fee < 8;_fee ++{for _bae =0;_bae < _abc ;_bae ++{if _af =_bc .SetByte (_ecb +_fee *_abc +_bae ,_bc .Data [_ecb +_bae ]);_af !=nil {return _f .Wrap (_af ,_ge ,"");};};};};return nil ;};func (_fedc *Bitmap )GetByteIndex (x ,y int )int {return y *_fedc .RowStride +(x >>3)};func _acbc (_acee ,_gcac *Bitmap ,_eafg *Selection )(*Bitmap ,error ){const _cfcca ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _fbfc ,_ecbg int ;if _gcac ==nil {return nil ,_f .Error (_cfcca ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _eafg ==nil {return nil ,_f .Error (_cfcca ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_fbfc =_eafg .Width ;_ecbg =_eafg .Height ;if _fbfc ==0||_ecbg ==0{return nil ,_f .Error (_cfcca ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _acee ==nil {return _gcac .createTemplate (),nil ;};if _fbcb :=_acee .resizeImageData (_gcac );_fbcb !=nil {return nil ,_fbcb ;};return _acee ,nil ;};func _eb (_bf *Bitmap ,_bab *Bitmap ,_dfca int )(_bfb error ){const _bfe ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _dfca {case 2:_bfb =_cg (_bf ,_bab );case 4:_bfb =_dfb (_bf ,_bab );case 8:_bfb =_ae (_bf ,_bab );default:return _f .Error (_bfe ,"\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 _bfb !=nil {_bfb =_f .Wrap (_bfb ,_bfe ,"");};return _bfb ;};func _aecgf (_geef ,_dbgaf *Bitmap ,_bfbg ,_cgbaf int )(_faae error ){const _ffea ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_fbbge ,_ffgd ,_agga ,_efda int ;_adaa ,_afag ,_dfbge ,_fbbc ,_gbcfg ,_ddccf ,_acgd byte ;);for _fbbge =0;_fbbge < _bfbg ;_fbbge ++{_agga =_fbbge *_geef .RowStride ;_efda =_fbbge *_dbgaf .RowStride ;for _ffgd =0;_ffgd < _cgbaf ;_ffgd ++{_adaa ,_faae =_geef .GetByte (_agga +_ffgd );if _faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_afag ,_faae =_dbgaf .GetByte (_efda +_ffgd );if _faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _fbbge > 0{_dfbge ,_faae =_geef .GetByte (_agga -_geef .RowStride +_ffgd );if _faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u0069\u0020\u003e \u0030");};_adaa |=_dfbge ;};if _ffgd > 0{_fbbc ,_faae =_geef .GetByte (_agga +_ffgd -1);if _faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u006a\u0020\u003e \u0030");};_adaa |=_fbbc <<7;};_adaa &=_afag ;if _adaa ==0||(^_adaa )==0{if _faae =_geef .SetByte (_agga +_ffgd ,_adaa );_faae !=nil {return _f .Wrap (_faae ,_ffea ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_acgd =_adaa ;_adaa =(_adaa |(_adaa >>1)|(_adaa <<1))&_afag ;if (_adaa ^_acgd )==0{if _faae =_geef .SetByte (_agga +_ffgd ,_adaa );_faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _fbbge =_bfbg -1;_fbbge >=0;_fbbge --{_agga =_fbbge *_geef .RowStride ;_efda =_fbbge *_dbgaf .RowStride ;for _ffgd =_cgbaf -1;_ffgd >=0;_ffgd --{if _adaa ,_faae =_geef .GetByte (_agga +_ffgd );_faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _afag ,_faae =_dbgaf .GetByte (_efda +_ffgd );_faae !=nil {return _f .Wrap (_faae ,_ffea ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _fbbge < _bfbg -1{if _gbcfg ,_faae =_geef .GetByte (_agga +_geef .RowStride +_ffgd );_faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_adaa |=_gbcfg ;};if _ffgd < _cgbaf -1{if _ddccf ,_faae =_geef .GetByte (_agga +_ffgd +1);_faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_adaa |=_ddccf >>7;};_adaa &=_afag ;if _adaa ==0||(^_adaa )==0{if _faae =_geef .SetByte (_agga +_ffgd ,_adaa );_faae !=nil {return _f .Wrap (_faae ,_ffea ,"\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 {_acgd =_adaa ;_adaa =(_adaa |(_adaa >>1)|(_adaa <<1))&_afag ;if (_adaa ^_acgd )==0{if _faae =_geef .SetByte (_agga +_ffgd ,_adaa );_faae !=nil {return _f .Wrap (_faae ,_ffea ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");};break ;};};};};return nil ;};func (_gfed *Bitmap )setEightFullBytes (_adcg int ,_ccc uint64 )error {if _adcg +7> len (_gfed .Data )-1{return _f .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");};_gfed .Data [_adcg ]=byte ((_ccc &0xff00000000000000)>>56);_gfed .Data [_adcg +1]=byte ((_ccc &0xff000000000000)>>48);_gfed .Data [_adcg +2]=byte ((_ccc &0xff0000000000)>>40);_gfed .Data [_adcg +3]=byte ((_ccc &0xff00000000)>>32);_gfed .Data [_adcg +4]=byte ((_ccc &0xff000000)>>24);_gfed .Data [_adcg +5]=byte ((_ccc &0xff0000)>>16);_gfed .Data [_adcg +6]=byte ((_ccc &0xff00)>>8);_gfed .Data [_adcg +7]=byte (_ccc &0xff);return nil ;};func (_cdefd *Bitmaps )HeightSorter ()func (_afde ,_bcgb int )bool {return func (_ggdac ,_gfbf int )bool {_cbdb :=_cdefd .Values [_ggdac ].Height < _cdefd .Values [_gfbf ].Height ;_dfc .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_cdefd .Values [_ggdac ].Height ,_cdefd .Values [_gfbf ].Height ,_cbdb );return _cbdb ;};};func (_fafe MorphProcess )verify (_abee int ,_cbd ,_bfeg *int )error {const _bgee ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _fafe .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_fafe .Arguments )!=2{return _f .Error (_bgee ,"\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");};_bbbg ,_ebaa :=_fafe .getWidthHeight ();if _bbbg <=0||_ebaa <=0{return _f .Error (_bgee ,"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 :_fgec :=len (_fafe .Arguments );*_cbd +=_fgec ;if _fgec < 1||_fgec > 4{return _f .Error (_bgee ,"\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 _deef :=0;_deef < _fgec ;_deef ++{if _fafe .Arguments [_deef ]< 1||_fafe .Arguments [_deef ]> 4{return _f .Error (_bgee ,"\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 (_fafe .Arguments )==0{return _f .Error (_bgee ,"\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");};_eagg :=_fafe .Arguments [0];if _eagg !=2&&_eagg !=4&&_eagg !=8{return _f .Error (_bgee ,"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");};*_cbd -=_dbcc [_eagg /4];case MopAddBorder :if len (_fafe .Arguments )==0{return _f .Error (_bgee ,"\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");};_ddab :=_fafe .Arguments [0];if _abee > 0{return _f .Error (_bgee ,"\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 _ddab < 1{return _f .Error (_bgee ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_bfeg =_ddab ;};return nil ;};func (_effg *ClassedPoints )Len ()int {return _effg .IntSlice .Size ()};func (_bdd *Bitmap )CreateTemplate ()*Bitmap {return _bdd .createTemplate ()};func _cecb (_bffg *Bitmap ,_cdbeb ,_cfab int ,_efcb ,_debda int ,_egce RasterOperator ){var (_gaded bool ;_abbga bool ;_ffed int ;_fefgd int ;_daad int ;_bcbff int ;_cfdf bool ;_eeb byte ;);_ffcd :=8-(_cdbeb &7);_aebeg :=_abfc [_ffcd ];_acbb :=_bffg .RowStride *_cfab +(_cdbeb >>3);if _efcb < _ffcd {_gaded =true ;_aebeg &=_accb [8-_ffcd +_efcb ];};if !_gaded {_ffed =(_efcb -_ffcd )>>3;if _ffed !=0{_abbga =true ;_fefgd =_acbb +1;};};_daad =(_cdbeb +_efcb )&7;if !(_gaded ||_daad ==0){_cfdf =true ;_eeb =_accb [_daad ];_bcbff =_acbb +1+_ffed ;};var _cfdg ,_eefb int ;switch _egce {case PixClr :for _cfdg =0;_cfdg < _debda ;_cfdg ++{_bffg .Data [_acbb ]=_fafa (_bffg .Data [_acbb ],0x0,_aebeg );_acbb +=_bffg .RowStride ;};if _abbga {for _cfdg =0;_cfdg < _debda ;_cfdg ++{for _eefb =0;_eefb < _ffed ;_eefb ++{_bffg .Data [_fefgd +_eefb ]=0x0;};_fefgd +=_bffg .RowStride ;};};if _cfdf {for _cfdg =0;_cfdg < _debda ;_cfdg ++{_bffg .Data [_bcbff ]=_fafa (_bffg .Data [_bcbff ],0x0,_eeb );_bcbff +=_bffg .RowStride ;};};case PixSet :for _cfdg =0;_cfdg < _debda ;_cfdg ++{_bffg .Data [_acbb ]=_fafa (_bffg .Data [_acbb ],0xff,_aebeg );_acbb +=_bffg .RowStride ;};if _abbga {for _cfdg =0;_cfdg < _debda ;_cfdg ++{for _eefb =0;_eefb < _ffed ;_eefb ++{_bffg .Data [_fefgd +_eefb ]=0xff;};_fefgd +=_bffg .RowStride ;};};if _cfdf {for _cfdg =0;_cfdg < _debda ;_cfdg ++{_bffg .Data [_bcbff ]=_fafa (_bffg .Data [_bcbff ],0xff,_eeb );_bcbff +=_bffg .RowStride ;};};case PixNotDst :for _cfdg =0;_cfdg < _debda ;_cfdg ++{_bffg .Data [_acbb ]=_fafa (_bffg .Data [_acbb ],^_bffg .Data [_acbb ],_aebeg );_acbb +=_bffg .RowStride ;};if _abbga {for _cfdg =0;_cfdg < _debda ;_cfdg ++{for _eefb =0;_eefb < _ffed ;_eefb ++{_bffg .Data [_fefgd +_eefb ]=^(_bffg .Data [_fefgd +_eefb ]);};_fefgd +=_bffg .RowStride ;};};if _cfdf {for _cfdg =0;_cfdg < _debda ;_cfdg ++{_bffg .Data [_bcbff ]=_fafa (_bffg .Data [_bcbff ],^_bffg .Data [_bcbff ],_eeb );_bcbff +=_bffg .RowStride ;};};};};func (_ddbdd *Bitmaps )makeSizeIndicator (_bedgb ,_agfe int ,_edga LocationFilter ,_gddf SizeComparison )(_bggdb *_e .NumSlice ,_bfdc error ){const _ceae ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _ddbdd ==nil {return nil ,_f .Error (_ceae ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _edga {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_ceae ,"\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",_edga );};switch _gddf {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_f .Errorf (_ceae ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_gddf );};_bggdb =&_e .NumSlice {};var (_gfead ,_fcff ,_cfdd int ;_cgad *Bitmap ;);for _ ,_cgad =range _ddbdd .Values {_gfead =0;_fcff ,_cfdd =_cgad .Width ,_cgad .Height ;switch _edga {case LocSelectWidth :if (_gddf ==SizeSelectIfLT &&_fcff < _bedgb )||(_gddf ==SizeSelectIfGT &&_fcff > _bedgb )||(_gddf ==SizeSelectIfLTE &&_fcff <=_bedgb )||(_gddf ==SizeSelectIfGTE &&_fcff >=_bedgb )||(_gddf ==SizeSelectIfEQ &&_fcff ==_bedgb ){_gfead =1;};case LocSelectHeight :if (_gddf ==SizeSelectIfLT &&_cfdd < _agfe )||(_gddf ==SizeSelectIfGT &&_cfdd > _agfe )||(_gddf ==SizeSelectIfLTE &&_cfdd <=_agfe )||(_gddf ==SizeSelectIfGTE &&_cfdd >=_agfe )||(_gddf ==SizeSelectIfEQ &&_cfdd ==_agfe ){_gfead =1;};case LocSelectIfEither :if (_gddf ==SizeSelectIfLT &&(_fcff < _bedgb ||_cfdd < _agfe ))||(_gddf ==SizeSelectIfGT &&(_fcff > _bedgb ||_cfdd > _agfe ))||(_gddf ==SizeSelectIfLTE &&(_fcff <=_bedgb ||_cfdd <=_agfe ))||(_gddf ==SizeSelectIfGTE &&(_fcff >=_bedgb ||_cfdd >=_agfe ))||(_gddf ==SizeSelectIfEQ &&(_fcff ==_bedgb ||_cfdd ==_agfe )){_gfead =1;};case LocSelectIfBoth :if (_gddf ==SizeSelectIfLT &&(_fcff < _bedgb &&_cfdd < _agfe ))||(_gddf ==SizeSelectIfGT &&(_fcff > _bedgb &&_cfdd > _agfe ))||(_gddf ==SizeSelectIfLTE &&(_fcff <=_bedgb &&_cfdd <=_agfe ))||(_gddf ==SizeSelectIfGTE &&(_fcff >=_bedgb &&_cfdd >=_agfe ))||(_gddf ==SizeSelectIfEQ &&(_fcff ==_bedgb &&_cfdd ==_agfe )){_gfead =1;};};_bggdb .AddInt (_gfead );};return _bggdb ,nil ;};func (_ecca *Bitmap )clearAll ()error {return _ecca .RasterOperation (0,0,_ecca .Width ,_ecca .Height ,PixClr ,nil ,0,0);};type byWidth Bitmaps ;func (_fegad *byHeight )Less (i ,j int )bool {return _fegad .Values [i ].Height < _fegad .Values [j ].Height };func _cbga (_caccg ,_ebfd *Bitmap ,_dgdf ,_eegb int )(*Bitmap ,error ){const _afbg ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _ebfd ==nil {_dfc .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 ,_f .Error (_afbg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _dgdf < 1||_eegb < 1{return nil ,_f .Error (_afbg ,"\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 _dgdf ==1&&_eegb ==1{_dabb ,_agec :=_beb (_caccg ,_ebfd );if _agec !=nil {return nil ,_f .Wrap (_agec ,_afbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _dabb ,nil ;};if _dgdf ==1||_eegb ==1{_fagcb :=SelCreateBrick (_eegb ,_dgdf ,_eegb /2,_dgdf /2,SelHit );_bedg ,_fage :=_bdbb (_caccg ,_ebfd ,_fagcb );if _fage !=nil {return nil ,_f .Wrap (_fage ,_afbg ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _bedg ,nil ;};_cdaa :=SelCreateBrick (1,_dgdf ,0,_dgdf /2,SelHit );_cffd :=SelCreateBrick (_eegb ,1,_eegb /2,0,SelHit );_gbce ,_feef :=_bdbb (nil ,_ebfd ,_cdaa );if _feef !=nil {return nil ,_f .Wrap (_feef ,_afbg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_caccg ,_feef =_bdbb (_caccg ,_gbce ,_cffd );if _feef !=nil {return nil ,_f .Wrap (_feef ,_afbg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _caccg ,nil ;};func (_fgfd *Bitmap )GetVanillaData ()[]byte {if _fgfd .Color ==Chocolate {_fgfd .inverseData ();};return _fgfd .Data ;};func _cbbd ()(_bac []byte ){_bac =make ([]byte ,256);for _ggda :=0;_ggda < 256;_ggda ++{_bee :=byte (_ggda );_bac [_bee ]=(_bee &0x01)|((_bee &0x04)>>1)|((_bee &0x10)>>2)|((_bee &0x40)>>3)|((_bee &0x02)<<3)|((_bee &0x08)<<2)|((_bee &0x20)<<1)|(_bee &0x80);};return _bac ;};var _cdbd =[]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 (_adg *Bitmap )Zero ()bool {_daca :=_adg .Width /8;_bcac :=_adg .Width &7;var _agaa byte ;if _bcac !=0{_agaa =byte (0xff<<uint (8-_bcac ));};var _dgg ,_gba ,_cecf int ;for _gba =0;_gba < _adg .Height ;_gba ++{_dgg =_adg .RowStride *_gba ;for _cecf =0;_cecf < _daca ;_cecf ,_dgg =_cecf +1,_dgg +1{if _adg .Data [_dgg ]!=0{return false ;};};if _bcac > 0{if _adg .Data [_dgg ]&_agaa !=0{return false ;};};};return true ;};func _fbeg (_dcbf ,_gdbb *Bitmap ,_cbac ,_ffec ,_aad ,_aaea ,_afge ,_dgbf ,_cgbe ,_afb int ,_ffg CombinationOperator )error {var _gffg int ;_dddee :=func (){_gffg ++;_aad +=_gdbb .RowStride ;_aaea +=_dcbf .RowStride ;_afge +=_dcbf .RowStride };for _gffg =_cbac ;_gffg < _ffec ;_dddee (){var _agaf uint16 ;_cfgfe :=_aad ;for _abe :=_aaea ;_abe <=_afge ;_abe ++{_gacg ,_cbcb :=_gdbb .GetByte (_cfgfe );if _cbcb !=nil {return _cbcb ;};_gcc ,_cbcb :=_dcbf .GetByte (_abe );if _cbcb !=nil {return _cbcb ;};_agaf =(_agaf |uint16 (_gcc ))<<uint (_afb );_gcc =byte (_agaf >>8);if _abe ==_afge {_gcc =_eec (uint (_dgbf ),_gcc );};if _cbcb =_gdbb .SetByte (_cfgfe ,_cabdc (_gacg ,_gcc ,_ffg ));_cbcb !=nil {return _cbcb ;};_cfgfe ++;_agaf <<=uint (_cgbe );};};return nil ;};func _gggce (_facbg ,_gca *Bitmap ,_eede *Selection )(*Bitmap ,error ){const _fgeca ="\u0065\u0072\u006fd\u0065";var (_eeag error ;_cgfdf *Bitmap ;);_facbg ,_eeag =_abba (_facbg ,_gca ,_eede ,&_cgfdf );if _eeag !=nil {return nil ,_f .Wrap (_eeag ,_fgeca ,"");};if _eeag =_facbg .setAll ();_eeag !=nil {return nil ,_f .Wrap (_eeag ,_fgeca ,"");};var _gfb SelectionValue ;for _gaga :=0;_gaga < _eede .Height ;_gaga ++{for _ecae :=0;_ecae < _eede .Width ;_ecae ++{_gfb =_eede .Data [_gaga ][_ecae ];if _gfb ==SelHit {_eeag =_bbg (_facbg ,_eede .Cx -_ecae ,_eede .Cy -_gaga ,_gca .Width ,_gca .Height ,PixSrcAndDst ,_cgfdf ,0,0);if _eeag !=nil {return nil ,_f .Wrap (_eeag ,_fgeca ,"");};};};};if MorphBC ==SymmetricMorphBC {return _facbg ,nil ;};_bafe ,_abedc ,_bdgg ,_bcea :=_eede .findMaxTranslations ();if _bafe > 0{if _eeag =_facbg .RasterOperation (0,0,_bafe ,_gca .Height ,PixClr ,nil ,0,0);_eeag !=nil {return nil ,_f .Wrap (_eeag ,_fgeca ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _bdgg > 0{if _eeag =_facbg .RasterOperation (_gca .Width -_bdgg ,0,_bdgg ,_gca .Height ,PixClr ,nil ,0,0);_eeag !=nil {return nil ,_f .Wrap (_eeag ,_fgeca ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _abedc > 0{if _eeag =_facbg .RasterOperation (0,0,_gca .Width ,_abedc ,PixClr ,nil ,0,0);_eeag !=nil {return nil ,_f .Wrap (_eeag ,_fgeca ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _bcea > 0{if _eeag =_facbg .RasterOperation (0,_gca .Height -_bcea ,_gca .Width ,_bcea ,PixClr ,nil ,0,0);_eeag !=nil {return nil ,_f .Wrap (_eeag ,_fgeca ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _facbg ,nil ;};func TstWSymbol (t *_a .T ,scale ...int )*Bitmap {_fgcf ,_gbdef :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_g .NoError (t ,_gbdef );return TstGetScaledSymbol (t ,_fgcf ,scale ...);};func (_afae *Selection )findMaxTranslations ()(_dcfd ,_faagc ,_bfdf ,_eaeb int ){for _ebbe :=0;_ebbe < _afae .Height ;_ebbe ++{for _dcec :=0;_dcec < _afae .Width ;_dcec ++{if _afae .Data [_ebbe ][_dcec ]==SelHit {_dcfd =_cabe (_dcfd ,_afae .Cx -_dcec );_faagc =_cabe (_faagc ,_afae .Cy -_ebbe );_bfdf =_cabe (_bfdf ,_dcec -_afae .Cx );_eaeb =_cabe (_eaeb ,_ebbe -_afae .Cy );};};};return _dcfd ,_faagc ,_bfdf ,_eaeb ;};type Boxes []*_df .Rectangle ;func _bagec (_cgdf ,_fbda ,_feccd *Bitmap ,_debde int )(*Bitmap ,error ){const _bbcg ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _fbda ==nil {return nil ,_f .Error (_bbcg ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _feccd ==nil {return nil ,_f .Error (_bbcg ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _debde !=4&&_debde !=8{return nil ,_f .Error (_bbcg ,"\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 _cfae error ;_cgdf ,_cfae =_beb (_cgdf ,_fbda );if _cfae !=nil {return nil ,_f .Wrap (_cfae ,_bbcg ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_begef :=_fbda .createTemplate ();_feccd .setPadBits (0);for _cgdg :=0;_cgdg < _egfbg ;_cgdg ++{_begef ,_cfae =_beb (_begef ,_cgdf );if _cfae !=nil {return nil ,_f .Wrapf (_cfae ,_bbcg ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_cgdg );};if _cfae =_faff (_cgdf ,_feccd ,_debde );_cfae !=nil {return nil ,_f .Wrapf (_cfae ,_bbcg ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_cgdg );};if _begef .Equals (_cgdf ){break ;};};return _cgdf ,nil ;};func _faff (_daddf *Bitmap ,_abaa *Bitmap ,_egb int )(_fdegg error ){const _ffcf ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_aecg :=_bfbcg (_daddf .Height ,_abaa .Height );_dcca :=_bfbcg (_daddf .RowStride ,_abaa .RowStride );switch _egb {case 4:_fdegg =_aecgf (_daddf ,_abaa ,_aecg ,_dcca );case 8:_fdegg =_fffb (_daddf ,_abaa ,_aecg ,_dcca );default:return _f .Errorf (_ffcf ,"\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",_egb );};if _fdegg !=nil {return _f .Wrap (_fdegg ,_ffcf ,"");};return nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func _bbg (_agdg *Bitmap ,_bfff ,_cfce ,_babf ,_feeg int ,_effb RasterOperator ,_cgae *Bitmap ,_deac ,_dgdg int )error {const _dcgd ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _agdg ==nil {return _f .Error (_dcgd ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _effb ==PixDst {return nil ;};switch _effb {case PixClr ,PixSet ,PixNotDst :_fgeea (_agdg ,_bfff ,_cfce ,_babf ,_feeg ,_effb );return nil ;};if _cgae ==nil {_dfc .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 _f .Error (_dcgd ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dbdea :=_babdd (_agdg ,_bfff ,_cfce ,_babf ,_feeg ,_effb ,_cgae ,_deac ,_dgdg );_dbdea !=nil {return _f .Wrap (_dbdea ,_dcgd ,"");};return nil ;};func _fcge (_cadfb ,_ffag int ,_debf string )*Selection {_bbbe :=&Selection {Height :_cadfb ,Width :_ffag ,Name :_debf };_bbbe .Data =make ([][]SelectionValue ,_cadfb );for _fgg :=0;_fgg < _cadfb ;_fgg ++{_bbbe .Data [_fgg ]=make ([]SelectionValue ,_ffag );};return _bbbe ;};func (_afcga MorphProcess )getWidthHeight ()(_bdfc ,_gdbc int ){return _afcga .Arguments [0],_afcga .Arguments [1];};type LocationFilter int ;type fillSegment struct{_dccc int ;_eccc int ;_gdba int ;_faac int ;};func (_gaed *Bitmap )nextOnPixelLow (_cgg ,_baaa ,_bfg ,_deb ,_gfg int )(_agb _df .Point ,_aee bool ,_gbec error ){const _cbbfe ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_bfba int ;_ggce byte ;);_cfcb :=_gfg *_bfg ;_afg :=_cfcb +(_deb /8);if _ggce ,_gbec =_gaed .GetByte (_afg );_gbec !=nil {return _agb ,false ,_f .Wrap (_gbec ,_cbbfe ,"\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 _ggce !=0{_adeg :=_deb -(_deb %8)+7;for _bfba =_deb ;_bfba <=_adeg &&_bfba < _cgg ;_bfba ++{if _gaed .GetPixel (_bfba ,_gfg ){_agb .X =_bfba ;_agb .Y =_gfg ;return _agb ,true ,nil ;};};};_caab :=(_deb /8)+1;_bfba =8*_caab ;var _cdeb int ;for _afg =_cfcb +_caab ;_bfba < _cgg ;_afg ,_bfba =_afg +1,_bfba +8{if _ggce ,_gbec =_gaed .GetByte (_afg );_gbec !=nil {return _agb ,false ,_f .Wrap (_gbec ,_cbbfe ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _ggce ==0{continue ;};for _cdeb =0;_cdeb < 8&&_bfba < _cgg ;_cdeb ,_bfba =_cdeb +1,_bfba +1{if _gaed .GetPixel (_bfba ,_gfg ){_agb .X =_bfba ;_agb .Y =_gfg ;return _agb ,true ,nil ;};};};for _ebfa :=_gfg +1;_ebfa < _baaa ;_ebfa ++{_cfcb =_ebfa *_bfg ;for _afg ,_bfba =_cfcb ,0;_bfba < _cgg ;_afg ,_bfba =_afg +1,_bfba +8{if _ggce ,_gbec =_gaed .GetByte (_afg );_gbec !=nil {return _agb ,false ,_f .Wrap (_gbec ,_cbbfe ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _ggce ==0{continue ;};for _cdeb =0;_cdeb < 8&&_bfba < _cgg ;_cdeb ,_bfba =_cdeb +1,_bfba +1{if _gaed .GetPixel (_bfba ,_ebfa ){_agb .X =_bfba ;_agb .Y =_ebfa ;return _agb ,true ,nil ;};};};};return _agb ,false ,nil ;};func (_geedg *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _bbg (_geedg ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_decc *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_aegg *Boxes ,_eacf error ){const _eecc ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _decc ==nil {return nil ,_f .Error (_eecc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_decc )==0{return _decc ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_eecc ,"\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 ,_f .Errorf (_eecc ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );};_fad :=_decc .makeSizeIndicator (width ,height ,tp ,relation );_fdbe ,_eacf :=_decc .selectWithIndicator (_fad );if _eacf !=nil {return nil ,_f .Wrap (_eacf ,_eecc ,"");};return _fdbe ,nil ;};func New (width ,height int )*Bitmap {_ddc :=_bgaf (width ,height );_ddc .Data =make ([]byte ,height *_ddc .RowStride );return _ddc ;};func (_ggab Points )GetIntX (i int )(int ,error ){if i >=len (_ggab ){return 0,_f .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 (_ggab [i ].X ),nil ;};func (_abcf *Boxes )Add (box *_df .Rectangle )error {if _abcf ==nil {return _f .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");};*_abcf =append (*_abcf ,box );return nil ;};func _gdecf ()[]int {_gcfc :=make ([]int ,256);for _ggbd :=0;_ggbd <=0xff;_ggbd ++{_dggdf :=byte (_ggbd );_gcfc [_dggdf ]=int (_dggdf &0x1)+(int (_dggdf >>1)&0x1)+(int (_dggdf >>2)&0x1)+(int (_dggdf >>3)&0x1)+(int (_dggdf >>4)&0x1)+(int (_dggdf >>5)&0x1)+(int (_dggdf >>6)&0x1)+(int (_dggdf >>7)&0x1);};return _gcfc ;};func Extract (roi _df .Rectangle ,src *Bitmap )(*Bitmap ,error ){_dece :=New (roi .Dx (),roi .Dy ());_dcfb :=roi .Min .X &0x07;_cea :=8-_dcfb ;_fefg :=uint (8-_dece .Width &0x07);_abed :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_cebe :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_fccb :=_dece .RowStride ==_cebe +1-_abed ;var _cafb int ;for _adcc :=roi .Min .Y ;_adcc < roi .Max .Y ;_adcc ++{_adgg :=_abed ;_fbcdf :=_cafb ;switch {case _abed ==_cebe :_fecc ,_edd :=src .GetByte (_adgg );if _edd !=nil {return nil ,_edd ;};_fecc <<=uint (_dcfb );_edd =_dece .SetByte (_fbcdf ,_eec (_fefg ,_fecc ));if _edd !=nil {return nil ,_edd ;};case _dcfb ==0:for _bgbd :=_abed ;_bgbd <=_cebe ;_bgbd ++{_ggeb ,_bafg :=src .GetByte (_adgg );if _bafg !=nil {return nil ,_bafg ;};_adgg ++;if _bgbd ==_cebe &&_fccb {_ggeb =_eec (_fefg ,_ggeb );};_bafg =_dece .SetByte (_fbcdf ,_ggeb );if _bafg !=nil {return nil ,_bafg ;};_fbcdf ++;};default:_cadf :=_fcb (src ,_dece ,uint (_dcfb ),uint (_cea ),_fefg ,_abed ,_cebe ,_fccb ,_adgg ,_fbcdf );if _cadf !=nil {return nil ,_cadf ;};};_abed +=src .RowStride ;_cebe +=src .RowStride ;_cafb +=_dece .RowStride ;};return _dece ,nil ;};func (_fca *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_bbf bool ,_aac error ){const _dbag ="\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 =_gdecf ();};_fbb :=_fca .Width >>3;_adc :=_fca .Width &7;_dfec :=byte (0xff<<uint (8-_adc ));var (_bagd ,_fac ,_abab ,_faf int ;_caaa byte ;);for _bagd =0;_bagd < _fca .Height ;_bagd ++{_abab =_fca .RowStride *_bagd ;for _fac =0;_fac < _fbb ;_fac ++{_caaa ,_aac =_fca .GetByte (_abab +_fac );if _aac !=nil {return false ,_f .Wrap (_aac ,_dbag ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_faf +=tab8 [_caaa ];};if _adc !=0{_caaa ,_aac =_fca .GetByte (_abab +_fac );if _aac !=nil {return false ,_f .Wrap (_aac ,_dbag ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_caaa &=_dfec ;_faf +=tab8 [_caaa ];};if _faf > thresh {return true ,nil ;};};return _bbf ,nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _bbg (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_bbaf *Bitmap )resizeImageData (_bacb *Bitmap )error {if _bacb ==nil {return _f .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 _bbaf .SizesEqual (_bacb ){return nil ;};_bbaf .Data =make ([]byte ,len (_bacb .Data ));_bbaf .Width =_bacb .Width ;_bbaf .Height =_bacb .Height ;_bbaf .RowStride =_bacb .RowStride ;return nil ;};func NewClassedPoints (points *Points ,classes _e .IntSlice )(*ClassedPoints ,error ){const _ebdaa ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_f .Error (_ebdaa ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_f .Error (_ebdaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_eabeb :=&ClassedPoints {Points :points ,IntSlice :classes };if _edcc :=_eabeb .validateIntSlice ();_edcc !=nil {return nil ,_f .Wrap (_edcc ,_ebdaa ,"");};return _eabeb ,nil ;};func (_cec *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _cec .removeBorderGeneral (left ,right ,top ,bot );};func (_aed *ClassedPoints )XAtIndex (i int )float32 {return (*_aed .Points )[_aed .IntSlice [i ]].X };const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func _dbda (_gcgf *Bitmap ,_becb ,_fbcbd ,_daaf ,_afcc int ,_cebg RasterOperator ,_fgbgb *Bitmap ,_bbba ,_faged int )error {var (_edcd bool ;_bfga bool ;_fgea int ;_bdeg int ;_ccgc int ;_fcebc bool ;_cfcbe byte ;_befd int ;_adcf int ;_aabg int ;_bgdf ,_gagg int ;);_cfef :=8-(_becb &7);_fdad :=_abfc [_cfef ];_dgcd :=_gcgf .RowStride *_fbcbd +(_becb >>3);_deace :=_fgbgb .RowStride *_faged +(_bbba >>3);if _daaf < _cfef {_edcd =true ;_fdad &=_accb [8-_cfef +_daaf ];};if !_edcd {_fgea =(_daaf -_cfef )>>3;if _fgea > 0{_bfga =true ;_bdeg =_dgcd +1;_ccgc =_deace +1;};};_befd =(_becb +_daaf )&7;if !(_edcd ||_befd ==0){_fcebc =true ;_cfcbe =_accb [_befd ];_adcf =_dgcd +1+_fgea ;_aabg =_deace +1+_fgea ;};switch _cebg {case PixSrc :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],_fgbgb .Data [_deace ],_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]=_fgbgb .Data [_ccgc +_gagg ];};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],_fgbgb .Data [_aabg ],_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixNotSrc :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],^_fgbgb .Data [_deace ],_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]=^_fgbgb .Data [_ccgc +_gagg ];};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],^_fgbgb .Data [_aabg ],_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixSrcOrDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],_fgbgb .Data [_deace ]|_gcgf .Data [_dgcd ],_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]|=_fgbgb .Data [_ccgc +_gagg ];};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],_fgbgb .Data [_aabg ]|_gcgf .Data [_adcf ],_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixSrcAndDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],_fgbgb .Data [_deace ]&_gcgf .Data [_dgcd ],_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]&=_fgbgb .Data [_ccgc +_gagg ];};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],_fgbgb .Data [_aabg ]&_gcgf .Data [_adcf ],_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixSrcXorDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],_fgbgb .Data [_deace ]^_gcgf .Data [_dgcd ],_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]^=_fgbgb .Data [_ccgc +_gagg ];};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],_fgbgb .Data [_aabg ]^_gcgf .Data [_adcf ],_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixNotSrcOrDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],^(_fgbgb .Data [_deace ])|_gcgf .Data [_dgcd ],_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]|=^(_fgbgb .Data [_ccgc +_gagg ]);};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],^(_fgbgb .Data [_aabg ])|_gcgf .Data [_adcf ],_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixNotSrcAndDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],^(_fgbgb .Data [_deace ])&_gcgf .Data [_dgcd ],_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]&=^_fgbgb .Data [_ccgc +_gagg ];};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],^(_fgbgb .Data [_aabg ])&_gcgf .Data [_adcf ],_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixSrcOrNotDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],_fgbgb .Data [_deace ]|^(_gcgf .Data [_dgcd ]),_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]=_fgbgb .Data [_ccgc +_gagg ]|^(_gcgf .Data [_bdeg +_gagg ]);};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],_fgbgb .Data [_aabg ]|^(_gcgf .Data [_adcf ]),_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixSrcAndNotDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],_fgbgb .Data [_deace ]&^(_gcgf .Data [_dgcd ]),_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]=_fgbgb .Data [_ccgc +_gagg ]&^(_gcgf .Data [_bdeg +_gagg ]);};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],_fgbgb .Data [_aabg ]&^(_gcgf .Data [_adcf ]),_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixNotPixSrcOrDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],^(_fgbgb .Data [_deace ]|_gcgf .Data [_dgcd ]),_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]=^(_fgbgb .Data [_ccgc +_gagg ]|_gcgf .Data [_bdeg +_gagg ]);};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],^(_fgbgb .Data [_aabg ]|_gcgf .Data [_adcf ]),_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixNotPixSrcAndDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],^(_fgbgb .Data [_deace ]&_gcgf .Data [_dgcd ]),_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]=^(_fgbgb .Data [_ccgc +_gagg ]&_gcgf .Data [_bdeg +_gagg ]);};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],^(_fgbgb .Data [_aabg ]&_gcgf .Data [_adcf ]),_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};case PixNotPixSrcXorDst :for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_dgcd ]=_fafa (_gcgf .Data [_dgcd ],^(_fgbgb .Data [_deace ]^_gcgf .Data [_dgcd ]),_fdad );_dgcd +=_gcgf .RowStride ;_deace +=_fgbgb .RowStride ;};if _bfga {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{for _gagg =0;_gagg < _fgea ;_gagg ++{_gcgf .Data [_bdeg +_gagg ]=^(_fgbgb .Data [_ccgc +_gagg ]^_gcgf .Data [_bdeg +_gagg ]);};_bdeg +=_gcgf .RowStride ;_ccgc +=_fgbgb .RowStride ;};};if _fcebc {for _bgdf =0;_bgdf < _afcc ;_bgdf ++{_gcgf .Data [_adcf ]=_fafa (_gcgf .Data [_adcf ],^(_fgbgb .Data [_aabg ]^_gcgf .Data [_adcf ]),_cfcbe );_adcf +=_gcgf .RowStride ;_aabg +=_fgbgb .RowStride ;};};default:_dfc .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",_cebg );return _f .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 _afgec (_fdac ,_bdgf *Bitmap ,_cddb *Selection )(*Bitmap ,error ){const _ceef ="\u006f\u0070\u0065\u006e";var _cggg error ;_fdac ,_cggg =_acbc (_fdac ,_bdgf ,_cddb );if _cggg !=nil {return nil ,_f .Wrap (_cggg ,_ceef ,"");};_geed ,_cggg :=_gggce (nil ,_bdgf ,_cddb );if _cggg !=nil {return nil ,_f .Wrap (_cggg ,_ceef ,"");};_ ,_cggg =_bdbb (_fdac ,_geed ,_cddb );if _cggg !=nil {return nil ,_f .Wrap (_cggg ,_ceef ,"");};return _fdac ,nil ;};func _fcg (_gfac ,_cdbc *Bitmap ,_fed int ,_ffd []byte ,_affe int )(_cab error ){const _gbf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_acbe ,_ccgg ,_cca ,_bccab ,_beg ,_agg ,_cda ,_agdb int ;_ffb ,_geb uint32 ;_ggd ,_gde byte ;_bcd uint16 ;);_cfaf :=make ([]byte ,4);_ggf :=make ([]byte ,4);for _cca =0;_cca < _gfac .Height -1;_cca ,_bccab =_cca +2,_bccab +1{_acbe =_cca *_gfac .RowStride ;_ccgg =_bccab *_cdbc .RowStride ;for _beg ,_agg =0,0;_beg < _affe ;_beg ,_agg =_beg +4,_agg +1{for _cda =0;_cda < 4;_cda ++{_agdb =_acbe +_beg +_cda ;if _agdb <=len (_gfac .Data )-1&&_agdb < _acbe +_gfac .RowStride {_cfaf [_cda ]=_gfac .Data [_agdb ];}else {_cfaf [_cda ]=0x00;};_agdb =_acbe +_gfac .RowStride +_beg +_cda ;if _agdb <=len (_gfac .Data )-1&&_agdb < _acbe +(2*_gfac .RowStride ){_ggf [_cda ]=_gfac .Data [_agdb ];}else {_ggf [_cda ]=0x00;};};_ffb =_fd .BigEndian .Uint32 (_cfaf );_geb =_fd .BigEndian .Uint32 (_ggf );_geb &=_ffb ;_geb &=_geb <<1;_geb &=0xaaaaaaaa;_ffb =_geb |(_geb <<7);_ggd =byte (_ffb >>24);_gde =byte ((_ffb >>8)&0xff);_agdb =_ccgg +_agg ;if _agdb +1==len (_cdbc .Data )-1||_agdb +1>=_ccgg +_cdbc .RowStride {_cdbc .Data [_agdb ]=_ffd [_ggd ];if _cab =_cdbc .SetByte (_agdb ,_ffd [_ggd ]);_cab !=nil {return _f .Wrapf (_cab ,_gbf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_agdb );};}else {_bcd =(uint16 (_ffd [_ggd ])<<8)|uint16 (_ffd [_gde ]);if _cab =_cdbc .setTwoBytes (_agdb ,_bcd );_cab !=nil {return _f .Wrapf (_cab ,_gbf ,"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",_agdb );};_agg ++;};};};return nil ;};func TstGetScaledSymbol (t *_a .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_fddcf ,_egcg :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_g .NoError (t ,_egcg );return _fddcf ;};func (_fefcd *Bitmaps )AddBitmap (bm *Bitmap ){_fefcd .Values =append (_fefcd .Values ,bm )};func (_dadc *byHeight )Swap (i ,j int ){_dadc .Values [i ],_dadc .Values [j ]=_dadc .Values [j ],_dadc .Values [i ];if _dadc .Boxes !=nil {_dadc .Boxes [i ],_dadc .Boxes [j ]=_dadc .Boxes [j ],_dadc .Boxes [i ];};};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func MakePixelSumTab8 ()[]int {return _gdecf ()};type RasterOperator int ;func (_dcg *Bitmap )SetPixel (x ,y int ,pixel byte )error {_aec :=_dcg .GetByteIndex (x ,y );if _aec > len (_dcg .Data )-1{return _f .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",_aec );};_bbaa :=_dcg .GetBitOffset (x );_ggb :=uint (7-_bbaa );_efd :=_dcg .Data [_aec ];var _adba byte ;if pixel ==1{_adba =_efd |(pixel &0x01<<_ggb );}else {_adba =_efd &^(1<<_ggb );};_dcg .Data [_aec ]=_adba ;return nil ;};func (_eeg *Bitmap )inverseData (){if _bfea :=_eeg .RasterOperation (0,0,_eeg .Width ,_eeg .Height ,PixNotDst ,nil ,0,0);_bfea !=nil {_dfc .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_bfea );};if _eeg .Color ==Chocolate {_eeg .Color =Vanilla ;}else {_eeg .Color =Chocolate ;};};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_ebdb :=_fcge (h ,w ,"");_ebdb .setOrigin (cy ,cx );var _ccaa ,_acfaa int ;for _ccaa =0;_ccaa < h ;_ccaa ++{for _acfaa =0;_acfaa < w ;_acfaa ++{_ebdb .Data [_ccaa ][_acfaa ]=tp ;};};return _ebdb ;};func (_fbdf *Bitmaps )WidthSorter ()func (_ggfg ,_gdea int )bool {return func (_debdaa ,_ebee int )bool {return _fbdf .Values [_debdaa ].Width < _fbdf .Values [_ebee ].Width };};func _dd (_bcc *Bitmap ,_acc int )(*Bitmap ,error ){const _cfad ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _bcc ==nil {return nil ,_f .Error (_cfad ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _acc ==1{return _beb (nil ,_bcc );};if _acc !=2&&_acc !=4&&_acc !=8{return nil ,_f .Error (_cfad ,"\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");};_edec :=_acc *_bcc .Width ;_bbe :=_acc *_bcc .Height ;_ged :=New (_edec ,_bbe );var _aa error ;switch _acc {case 2:_aa =_cg (_ged ,_bcc );case 4:_aa =_dfb (_ged ,_bcc );case 8:_aa =_ae (_ged ,_bcc );};if _aa !=nil {return nil ,_f .Wrap (_aa ,_cfad ,"");};return _ged ,nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_adce :=make ([]Point ,len (bms ));_ebb :=_gdag ();_edc :=_gdecf ();var _aaaag error ;for _bea ,_baed :=range bms {_adce [_bea ],_aaaag =_baed .centroid (_ebb ,_edc );if _aaaag !=nil {return nil ,_aaaag ;};};_cefc :=Points (_adce );return &_cefc ,nil ;};func TstWriteSymbols (t *_a .T ,bms *Bitmaps ,src *Bitmap ){for _ceff :=0;_ceff < bms .Size ();_ceff ++{_cfgb :=bms .Values [_ceff ];_gbcc :=bms .Boxes [_ceff ];_eaagb :=src .RasterOperation (_gbcc .Min .X ,_gbcc .Min .Y ,_cfgb .Width ,_cfgb .Height ,PixSrc ,_cfgb ,0,0);_g .NoError (t ,_eaagb );};};func TstCSymbol (t *_a .T )*Bitmap {t .Helper ();_dffc :=New (6,6);_g .NoError (t ,_dffc .SetPixel (1,0,1));_g .NoError (t ,_dffc .SetPixel (2,0,1));_g .NoError (t ,_dffc .SetPixel (3,0,1));_g .NoError (t ,_dffc .SetPixel (4,0,1));_g .NoError (t ,_dffc .SetPixel (0,1,1));_g .NoError (t ,_dffc .SetPixel (5,1,1));_g .NoError (t ,_dffc .SetPixel (0,2,1));_g .NoError (t ,_dffc .SetPixel (0,3,1));_g .NoError (t ,_dffc .SetPixel (0,4,1));_g .NoError (t ,_dffc .SetPixel (5,4,1));_g .NoError (t ,_dffc .SetPixel (1,5,1));_g .NoError (t ,_dffc .SetPixel (2,5,1));_g .NoError (t ,_dffc .SetPixel (3,5,1));_g .NoError (t ,_dffc .SetPixel (4,5,1));return _dffc ;};func _cgfc (_deceb ...MorphProcess )(_fcab error ){const _cfb ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _ddbd ,_gfec int ;for _fbbg ,_egaa :=range _deceb {if _fcab =_egaa .verify (_fbbg ,&_ddbd ,&_gfec );_fcab !=nil {return _f .Wrap (_fcab ,_cfb ,"");};};if _gfec !=0&&_ddbd !=0{return _f .Error (_cfb ,"\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 (_cbc *Bitmap )SetDefaultPixel (){for _cdgg :=range _cbc .Data {_cbc .Data [_cdgg ]=byte (0xff);};};func TstTSymbol (t *_a .T ,scale ...int )*Bitmap {_fefec ,_ecgda :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_g .NoError (t ,_ecgda );return TstGetScaledSymbol (t ,_fefec ,scale ...);};var (_gcea *Bitmap ;_dfad *Bitmap ;);func (_eggafe *byWidth )Len ()int {return len (_eggafe .Values )};func _fgeea (_gcgfb *Bitmap ,_cefe ,_dfba ,_ceab ,_ggffa int ,_dgcc RasterOperator ){if _cefe < 0{_ceab +=_cefe ;_cefe =0;};_fdeg :=_cefe +_ceab -_gcgfb .Width ;if _fdeg > 0{_ceab -=_fdeg ;};if _dfba < 0{_ggffa +=_dfba ;_dfba =0;};_dbg :=_dfba +_ggffa -_gcgfb .Height ;if _dbg > 0{_ggffa -=_dbg ;};if _ceab <=0||_ggffa <=0{return ;};if (_cefe &7)==0{_geg (_gcgfb ,_cefe ,_dfba ,_ceab ,_ggffa ,_dgcc );}else {_cecb (_gcgfb ,_cefe ,_dfba ,_ceab ,_ggffa ,_dgcc );};};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _cbga (d ,s ,hSize ,vSize )};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_bcfd float64 ,_aadc error ){const _ead ="\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 _bcfd ,_f .Error (_ead ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _bcfd ,_f .Error (_ead ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if area1 ==0||area2 ==0{return _bcfd ,_f .Error (_ead ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_edbe ,_gfcf :=bm1 .Width ,bm1 .Height ;_gfaa ,_adegb :=bm2 .Width ,bm2 .Height ;if _efb (_edbe -_gfaa )> maxDiffW {return 0,nil ;};if _efb (_gfcf -_adegb )> maxDiffH {return 0,nil ;};var _cfgfd ,_cbfc int ;if delX >=0{_cfgfd =int (delX +0.5);}else {_cfgfd =int (delX -0.5);};if delY >=0{_cbfc =int (delY +0.5);}else {_cbfc =int (delY -0.5);};_ace :=bm1 .createTemplate ();if _aadc =_ace .RasterOperation (_cfgfd ,_cbfc ,_gfaa ,_adegb ,PixSrc ,bm2 ,0,0);_aadc !=nil {return _bcfd ,_f .Wrap (_aadc ,_ead ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _aadc =_ace .RasterOperation (0,0,_edbe ,_gfcf ,PixSrcAndDst ,bm1 ,0,0);_aadc !=nil {return _bcfd ,_f .Wrap (_aadc ,_ead ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_gdg :=_ace .countPixels ();_bcfd =float64 (_gdg )*float64 (_gdg )/(float64 (area1 )*float64 (area2 ));return _bcfd ,nil ;};func (_gefe *Bitmaps )SortByHeight (){_eggbd :=(*byHeight )(_gefe );_c .Sort (_eggbd )};func (_bgbfg *Bitmaps )Size ()int {return len (_bgbfg .Values )};func (_cdag *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_fcbg *Bitmaps ,_ecac *Boxes ,_baae error ){const _fagf ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _cdag ==nil {return nil ,nil ,_f .Error (_fagf ,"\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 ,_f .Error (_fagf ,"\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 _cdag .Zero (){_ecac =&Boxes {};_fcbg =&Bitmaps {};return _fcbg ,_ecac ,nil ;};switch components {case ComponentConn :_fcbg =&Bitmaps {};if _ecac ,_baae =_cdag .ConnComponents (_fcbg ,8);_baae !=nil {return nil ,nil ,_f .Wrap (_baae ,_fagf ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentCharacters :_dgaf ,_acgg :=MorphSequence (_cdag ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _acgg !=nil {return nil ,nil ,_f .Wrap (_acgg ,_fagf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _dfc .Log .IsLogLevel (_dfc .LogLevelTrace ){_dfc .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",_dgaf .String ());};_ecgd :=&Bitmaps {};_ecac ,_acgg =_dgaf .ConnComponents (_ecgd ,8);if _acgg !=nil {return nil ,nil ,_f .Wrap (_acgg ,_fagf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _dfc .Log .IsLogLevel (_dfc .LogLevelTrace ){_dfc .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",_ecgd .String ());};if _fcbg ,_acgg =_ecgd .ClipToBitmap (_cdag );_acgg !=nil {return nil ,nil ,_f .Wrap (_acgg ,_fagf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_cdbb :=1;var _bbcd *Bitmap ;switch {case _cdag .XResolution <=200:_bbcd =_cdag ;case _cdag .XResolution <=400:_cdbb =2;_bbcd ,_baae =_ef (_cdag ,1,0,0,0);if _baae !=nil {return nil ,nil ,_f .Wrap (_baae ,_fagf ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");};default:_cdbb =4;_bbcd ,_baae =_ef (_cdag ,1,1,0,0);if _baae !=nil {return nil ,nil ,_f .Wrap (_baae ,_fagf ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");};};_feab ,_ ,_ebdc :=_debd (_bbcd );if _ebdc !=nil {return nil ,nil ,_f .Wrap (_ebdc ,_fagf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_aead ,_ebdc :=_dbeg (_feab ,_cdbb );if _ebdc !=nil {return nil ,nil ,_f .Wrap (_ebdc ,_fagf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_gbcg :=&Bitmaps {};if _ecac ,_ebdc =_aead .ConnComponents (_gbcg ,4);_ebdc !=nil {return nil ,nil ,_f .Wrap (_ebdc ,_fagf ,"\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 _fcbg ,_ebdc =_gbcg .ClipToBitmap (_cdag );_ebdc !=nil {return nil ,nil ,_f .Wrap (_ebdc ,_fagf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_fcbg ,_baae =_fcbg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _baae !=nil {return nil ,nil ,_f .Wrap (_baae ,_fagf ,"");};_ecac ,_baae =_ecac .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _baae !=nil {return nil ,nil ,_f .Wrap (_baae ,_fagf ,"");};return _fcbg ,_ecac ,nil ;};func _caff (_edeae ,_abce ,_bfdg *Bitmap )(*Bitmap ,error ){const _gga ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _abce ==nil {return nil ,_f .Error (_gga ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bfdg ==nil {return nil ,_f .Error (_gga ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _gebd error ;switch {case _edeae ==_abce :if _gebd =_edeae .RasterOperation (0,0,_abce .Width ,_abce .Height ,PixNotSrcAndDst ,_bfdg ,0,0);_gebd !=nil {return nil ,_f .Wrap (_gebd ,_gga ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _edeae ==_bfdg :if _gebd =_edeae .RasterOperation (0,0,_abce .Width ,_abce .Height ,PixNotSrcAndDst ,_abce ,0,0);_gebd !=nil {return nil ,_f .Wrap (_gebd ,_gga ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_edeae ,_gebd =_beb (_edeae ,_abce );if _gebd !=nil {return nil ,_f .Wrap (_gebd ,_gga ,"");};if _gebd =_edeae .RasterOperation (0,0,_abce .Width ,_abce .Height ,PixNotSrcAndDst ,_bfdg ,0,0);_gebd !=nil {return nil ,_f .Wrap (_gebd ,_gga ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _edeae ,nil ;};func (_gacb *Bitmap )Copy ()*Bitmap {_cbbf :=make ([]byte ,len (_gacb .Data ));copy (_cbbf ,_gacb .Data );return &Bitmap {Width :_gacb .Width ,Height :_gacb .Height ,RowStride :_gacb .RowStride ,Data :_cbbf ,Color :_gacb .Color ,Text :_gacb .Text ,BitmapNumber :_gacb .BitmapNumber ,Special :_gacb .Special };};func (_fbae *Bitmaps )String ()string {_eaag :=_gd .Builder {};for _ ,_gddcf :=range _fbae .Values {_eaag .WriteString (_gddcf .String ());_eaag .WriteRune ('\n');};return _eaag .String ();};func (_bfce Points )GetGeometry (i int )(_ecdf ,_afgg float32 ,_ddaa error ){if i > len (_bfce )-1{return 0,0,_f .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 );};_dcgb :=_bfce [i ];return _dcgb .X ,_dcgb .Y ,nil ;};func _fffb (_dbgd ,_gfaf *Bitmap ,_fgada ,_bfgc int )(_cfgg error ){const _bebg ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_bffef ,_fbbe ,_aedg ,_afed int ;_ecgg ,_cacf ,_gagf ,_degb ,_bfbe ,_bgaag ,_dccef ,_gdfe byte ;);for _bffef =0;_bffef < _fgada ;_bffef ++{_aedg =_bffef *_dbgd .RowStride ;_afed =_bffef *_gfaf .RowStride ;for _fbbe =0;_fbbe < _bfgc ;_fbbe ++{if _ecgg ,_cfgg =_dbgd .GetByte (_aedg +_fbbe );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _cacf ,_cfgg =_gfaf .GetByte (_afed +_fbbe );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _bffef > 0{if _gagf ,_cfgg =_dbgd .GetByte (_aedg -_dbgd .RowStride +_fbbe );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_ecgg |=_gagf |(_gagf <<1)|(_gagf >>1);if _fbbe > 0{if _gdfe ,_cfgg =_dbgd .GetByte (_aedg -_dbgd .RowStride +_fbbe -1);_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_ecgg |=_gdfe <<7;};if _fbbe < _bfgc -1{if _gdfe ,_cfgg =_dbgd .GetByte (_aedg -_dbgd .RowStride +_fbbe +1);_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_ecgg |=_gdfe >>7;};};if _fbbe > 0{if _degb ,_cfgg =_dbgd .GetByte (_aedg +_fbbe -1);_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u006a\u0020\u003e \u0030");};_ecgg |=_degb <<7;};_ecgg &=_cacf ;if _ecgg ==0||^_ecgg ==0{if _cfgg =_dbgd .SetByte (_aedg +_fbbe ,_ecgg );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_dccef =_ecgg ;_ecgg =(_ecgg |(_ecgg >>1)|(_ecgg <<1))&_cacf ;if (_ecgg ^_dccef )==0{if _cfgg =_dbgd .SetByte (_aedg +_fbbe ,_ecgg );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _bffef =_fgada -1;_bffef >=0;_bffef --{_aedg =_bffef *_dbgd .RowStride ;_afed =_bffef *_gfaf .RowStride ;for _fbbe =_bfgc -1;_fbbe >=0;_fbbe --{if _ecgg ,_cfgg =_dbgd .GetByte (_aedg +_fbbe );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _cacf ,_cfgg =_gfaf .GetByte (_afed +_fbbe );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bffef < _fgada -1{if _bfbe ,_cfgg =_dbgd .GetByte (_aedg +_dbgd .RowStride +_fbbe );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_ecgg |=_bfbe |(_bfbe <<1)|_bfbe >>1;if _fbbe > 0{if _gdfe ,_cfgg =_dbgd .GetByte (_aedg +_dbgd .RowStride +_fbbe -1);_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\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");};_ecgg |=_gdfe <<7;};if _fbbe < _bfgc -1{if _gdfe ,_cfgg =_dbgd .GetByte (_aedg +_dbgd .RowStride +_fbbe +1);_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\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");};_ecgg |=_gdfe >>7;};};if _fbbe < _bfgc -1{if _bgaag ,_cfgg =_dbgd .GetByte (_aedg +_fbbe +1);_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\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");};_ecgg |=_bgaag >>7;};_ecgg &=_cacf ;if _ecgg ==0||(^_ecgg )==0{if _cfgg =_dbgd .SetByte (_aedg +_fbbe ,_ecgg );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_dccef =_ecgg ;_ecgg =(_ecgg |(_ecgg >>1)|(_ecgg <<1))&_cacf ;if (_ecgg ^_dccef )==0{if _cfgg =_dbgd .SetByte (_aedg +_fbbe ,_ecgg );_cfgg !=nil {return _f .Wrap (_cfgg ,_bebg ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");};break ;};};};};return nil ;};type SizeSelection int ;func (_gafg *Bitmap )setEightPartlyBytes (_bddg ,_cagf int ,_gda uint64 )(_ddgd error ){var (_aaaa byte ;_bccc int ;);const _daf ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _acdfd :=1;_acdfd <=_cagf ;_acdfd ++{_bccc =64-_acdfd *8;_aaaa =byte (_gda >>uint (_bccc )&0xff);_dfc .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",_aaaa ,_bddg ,_bddg +_acdfd -1,_cagf ,_bccc );if _ddgd =_gafg .SetByte (_bddg +_acdfd -1,_aaaa );_ddgd !=nil {return _f .Wrap (_ddgd ,_daf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_bggg :=_gafg .RowStride *8-_gafg .Width ;if _bggg ==0{return nil ;};_bccc -=8;_aaaa =byte (_gda >>uint (_bccc )&0xff)<<uint (_bggg );if _ddgd =_gafg .SetByte (_bddg +_cagf ,_aaaa );_ddgd !=nil {return _f .Wrap (_ddgd ,_daf ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_bcbf *Bitmap )clipRectangle (_bge ,_dfcb *_df .Rectangle )(_eeee *Bitmap ,_dca error ){const _adef ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _bge ==nil {return nil ,_f .Error (_adef ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_afd ,_ccad :=_bcbf .Width ,_bcbf .Height ;_gdf ,_dca :=ClipBoxToRectangle (_bge ,_afd ,_ccad );if _dca !=nil {_dfc .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",_dca );return nil ,nil ;};_bfef ,_fddb :=_gdf .Min .X ,_gdf .Min .Y ;_baf ,_fcc :=_gdf .Max .X -_gdf .Min .X ,_gdf .Max .Y -_gdf .Min .Y ;_eeee =New (_baf ,_fcc );_eeee .Text =_bcbf .Text ;if _dca =_eeee .RasterOperation (0,0,_baf ,_fcc ,PixSrc ,_bcbf ,_bfef ,_fddb );_dca !=nil {return nil ,_f .Wrap (_dca ,_adef ,"");};if _dfcb !=nil {*_dfcb =*_gdf ;};return _eeee ,nil ;};func TstVSymbol (t *_a .T ,scale ...int )*Bitmap {_fgffc ,_ccab :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_g .NoError (t ,_ccab );return TstGetScaledSymbol (t ,_fgffc ,scale ...);};func (_faaf *Bitmap )setFourBytes (_dge int ,_ddgb uint32 )error {if _dge +3> len (_faaf .Data )-1{return _f .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",_dge );};_faaf .Data [_dge ]=byte ((_ddgb &0xff000000)>>24);_faaf .Data [_dge +1]=byte ((_ddgb &0xff0000)>>16);_faaf .Data [_dge +2]=byte ((_ddgb &0xff00)>>8);_faaf .Data [_dge +3]=byte (_ddgb &0xff);return nil ;};func (_bgb *Bitmap )SetPadBits (value int ){_bgb .setPadBits (value )};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _bdbb (d ,s ,sel )};func (_dggcdb *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _efbf ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_dggcdb .Values )==0{return nil ,_f .Error (_efbf ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_decec :=&BitmapsArray {};_dggcdb .SortByHeight ();_aede :=-1;_dgbbb :=-1;for _aaec :=0;_aaec < len (_dggcdb .Values );_aaec ++{_bbgf :=_dggcdb .Values [_aaec ].Height ;if _bbgf > _aede {_aede =_bbgf ;_dgbbb ++;_decec .Values =append (_decec .Values ,&Bitmaps {});};_decec .Values [_dgbbb ].AddBitmap (_dggcdb .Values [_aaec ]);};return _decec ,nil ;};type Points []Point ;func (_bba *Bitmap )GetChocolateData ()[]byte {if _bba .Color ==Vanilla {_bba .inverseData ();};return _bba .Data ;};type CombinationOperator int ;type byHeight Bitmaps ;func TstPSymbol (t *_a .T )*Bitmap {t .Helper ();_abaeb :=New (5,8);_g .NoError (t ,_abaeb .SetPixel (0,0,1));_g .NoError (t ,_abaeb .SetPixel (1,0,1));_g .NoError (t ,_abaeb .SetPixel (2,0,1));_g .NoError (t ,_abaeb .SetPixel (3,0,1));_g .NoError (t ,_abaeb .SetPixel (4,1,1));_g .NoError (t ,_abaeb .SetPixel (0,1,1));_g .NoError (t ,_abaeb .SetPixel (4,2,1));_g .NoError (t ,_abaeb .SetPixel (0,2,1));_g .NoError (t ,_abaeb .SetPixel (4,3,1));_g .NoError (t ,_abaeb .SetPixel (0,3,1));_g .NoError (t ,_abaeb .SetPixel (0,4,1));_g .NoError (t ,_abaeb .SetPixel (1,4,1));_g .NoError (t ,_abaeb .SetPixel (2,4,1));_g .NoError (t ,_abaeb .SetPixel (3,4,1));_g .NoError (t ,_abaeb .SetPixel (0,5,1));_g .NoError (t ,_abaeb .SetPixel (0,6,1));_g .NoError (t ,_abaeb .SetPixel (0,7,1));return _abaeb ;};func _fefgf (_aedb *_e .Stack ,_dfdce ,_cegaf ,_efef ,_gedg ,_dgcg int ,_ddea *_df .Rectangle )(_bdggg error ){const _fdefe ="\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 _aedb ==nil {return _f .Error (_fdefe ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _ddea ==nil {return _f .Error (_fdefe ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");};_ddea .Min .X =_e .Min (_ddea .Min .X ,_dfdce );_ddea .Max .X =_e .Max (_ddea .Max .X ,_cegaf );_ddea .Min .Y =_e .Min (_ddea .Min .Y ,_efef );_ddea .Max .Y =_e .Max (_ddea .Max .Y ,_efef );if !(_efef +_gedg >=0&&_efef +_gedg <=_dgcg ){return nil ;};if _aedb .Aux ==nil {return _f .Error (_fdefe ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _abcfa *fillSegment ;_cafbe ,_bdbad :=_aedb .Aux .Pop ();if _bdbad {if _abcfa ,_bdbad =_cafbe .(*fillSegment );!_bdbad {return _f .Error (_fdefe ,"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 {_abcfa =&fillSegment {};};_abcfa ._dccc =_dfdce ;_abcfa ._eccc =_cegaf ;_abcfa ._gdba =_efef ;_abcfa ._faac =_gedg ;_aedb .Push (_abcfa );return nil ;};type SelectionValue int ;func (_gbbg *ClassedPoints )ySortFunction ()func (_fbba int ,_fecb int )bool {return func (_dbcca ,_bdeab int )bool {return _gbbg .YAtIndex (_dbcca )< _gbbg .YAtIndex (_bdeab )};};func (_afa *Bitmap )countPixels ()int {var (_agc int ;_bgg uint8 ;_fgfe byte ;_fdec int ;);_ggbf :=_afa .RowStride ;_aca :=uint (_afa .Width &0x07);if _aca !=0{_bgg =uint8 ((0xff<<(8-_aca ))&0xff);_ggbf --;};for _bec :=0;_bec < _afa .Height ;_bec ++{for _fdec =0;_fdec < _ggbf ;_fdec ++{_fgfe =_afa .Data [_bec *_afa .RowStride +_fdec ];_agc +=int (_cgd [_fgfe ]);};if _aca !=0{_agc +=int (_cgd [_afa .Data [_bec *_afa .RowStride +_fdec ]&_bgg ]);};};return _agc ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_cbce *Bitmap )SizesEqual (s *Bitmap )bool {if _cbce ==s {return true ;};if _cbce .Width !=s .Width ||_cbce .Height !=s .Height {return false ;};return true ;};func (_cbed *Selection )setOrigin (_fgfff ,_dbabe int ){_cbed .Cy ,_cbed .Cx =_fgfff ,_dbabe };func (_dcdf *Bitmap )ClipRectangle (box *_df .Rectangle )(_ecc *Bitmap ,_eca *_df .Rectangle ,_gdec error ){const _babe ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_f .Error (_babe ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_dfa ,_aba :=_dcdf .Width ,_dcdf .Height ;_fgcg :=_df .Rect (0,0,_dfa ,_aba );if !box .Overlaps (_fgcg ){return nil ,nil ,_f .Error (_babe ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_ecgb :=box .Intersect (_fgcg );_faea ,_edf :=_ecgb .Min .X ,_ecgb .Min .Y ;_eac ,_bdg :=_ecgb .Dx (),_ecgb .Dy ();_ecc =New (_eac ,_bdg );_ecc .Text =_dcdf .Text ;if _gdec =_ecc .RasterOperation (0,0,_eac ,_bdg ,PixSrc ,_dcdf ,_faea ,_edf );_gdec !=nil {return nil ,nil ,_f .Wrap (_gdec ,_babe ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");};_eca =&_ecgb ;return _ecc ,_eca ,nil ;};func (_aeac *Points )AddPoint (x ,y float32 ){*_aeac =append (*_aeac ,Point {x ,y })};func (_ggg *Bitmap )setEightBytes (_fdg int ,_facc uint64 )error {_acgb :=_ggg .RowStride -(_fdg %_ggg .RowStride );if _ggg .RowStride !=_ggg .Width >>3{_acgb --;};if _acgb >=8{return _ggg .setEightFullBytes (_fdg ,_facc );};return _ggg .setEightPartlyBytes (_fdg ,_acgb ,_facc );};func _fbd (_beea ,_agcd *Bitmap ,_bbff ,_dfbfe ,_dadd ,_ece ,_ccggb int ,_cfgae CombinationOperator )error {var _aaff int ;_afdd :=func (){_aaff ++;_dadd +=_agcd .RowStride ;_ece +=_beea .RowStride ;_ccggb +=_beea .RowStride };for _aaff =_bbff ;_aaff < _dfbfe ;_afdd (){_daeb :=_dadd ;for _aaaae :=_ece ;_aaaae <=_ccggb ;_aaaae ++{_bfad ,_ggee :=_agcd .GetByte (_daeb );if _ggee !=nil {return _ggee ;};_cagg ,_ggee :=_beea .GetByte (_aaaae );if _ggee !=nil {return _ggee ;};if _ggee =_agcd .SetByte (_daeb ,_cabdc (_bfad ,_cagg ,_cfgae ));_ggee !=nil {return _ggee ;};_daeb ++;};};return nil ;};func _dfb (_ede ,_bb *Bitmap )(_db error ){const _ag ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_fe :=_bb .RowStride ;_cfa :=_ede .RowStride ;_dcb :=_bb .RowStride *4-_ede .RowStride ;var (_gg ,_fdd byte ;_ce uint32 ;_ca ,_ded ,_gb ,_dg ,_ga ,_ecf ,_fea int ;);for _gb =0;_gb < _bb .Height ;_gb ++{_ca =_gb *_fe ;_ded =4*_gb *_cfa ;for _dg =0;_dg < _fe ;_dg ++{_gg =_bb .Data [_ca +_dg ];_ce =_abaf [_gg ];_ecf =_ded +_dg *4;if _dcb !=0&&(_dg +1)*4> _ede .RowStride {for _ga =_dcb ;_ga > 0;_ga --{_fdd =byte ((_ce >>uint (_ga *8))&0xff);_fea =_ecf +(_dcb -_ga );if _db =_ede .SetByte (_fea ,_fdd );_db !=nil {return _f .Wrapf (_db ,_ag ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ga );};};}else if _db =_ede .setFourBytes (_ecf ,_ce );_db !=nil {return _f .Wrap (_db ,_ag ,"");};if _db =_ede .setFourBytes (_ded +_dg *4,_abaf [_bb .Data [_ca +_dg ]]);_db !=nil {return _f .Wrap (_db ,_ag ,"");};};for _ga =1;_ga < 4;_ga ++{for _dg =0;_dg < _cfa ;_dg ++{if _db =_ede .SetByte (_ded +_ga *_cfa +_dg ,_ede .Data [_ded +_dg ]);_db !=nil {return _f .Wrapf (_db ,_ag ,"\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",_ga ,_dg );};};};};return nil ;};func _efb (_acbeb int )int {if _acbeb < 0{return -_acbeb ;};return _acbeb ;};func (_gfcff *BitmapsArray )AddBox (box *_df .Rectangle ){_gfcff .Boxes =append (_gfcff .Boxes ,box )};func _agfc (_fddd ,_dgbfa *Bitmap ,_agee ,_gdfc int )(*Bitmap ,error ){const _aceg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _dgbfa ==nil {return nil ,_f .Error (_aceg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _agee < 1||_gdfc < 1{return nil ,_f .Error (_aceg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _agee ==1&&_gdfc ==1{return _dgbfa .Copy (),nil ;};if _agee ==1||_gdfc ==1{_efe :=SelCreateBrick (_gdfc ,_agee ,_gdfc /2,_agee /2,SelHit );var _eddf error ;_fddd ,_eddf =_bbeg (_fddd ,_dgbfa ,_efe );if _eddf !=nil {return nil ,_f .Wrap (_eddf ,_aceg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fddd ,nil ;};_ecbc :=SelCreateBrick (1,_agee ,0,_agee /2,SelHit );_dffg :=SelCreateBrick (_gdfc ,1,_gdfc /2,0,SelHit );_fgfdf ,_baafb :=_bdbb (nil ,_dgbfa ,_ecbc );if _baafb !=nil {return nil ,_f .Wrap (_baafb ,_aceg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _fddd ,_baafb =_bdbb (_fddd ,_fgfdf ,_dffg );_baafb !=nil {return nil ,_f .Wrap (_baafb ,_aceg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_baafb =_gggce (_fgfdf ,_fddd ,_ecbc );_baafb !=nil {return nil ,_f .Wrap (_baafb ,_aceg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};if _ ,_baafb =_gggce (_fddd ,_fgfdf ,_dffg );_baafb !=nil {return nil ,_f .Wrap (_baafb ,_aceg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _fddd ,nil ;};func init (){const _gaeg ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_gcea =New (50,40);var _bcbfb error ;_gcea ,_bcbfb =_gcea .AddBorder (2,1);if _bcbfb !=nil {panic (_f .Wrap (_bcbfb ,_gaeg ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_dfad ,_bcbfb =NewWithData (50,22,_cdbd );if _bcbfb !=nil {panic (_f .Wrap (_bcbfb ,_gaeg ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func _beb (_dgbb ,_gddd *Bitmap )(*Bitmap ,error ){if _gddd ==nil {return nil ,_f .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 _gddd ==_dgbb {return _dgbb ,nil ;};if _dgbb ==nil {_dgbb =_gddd .createTemplate ();copy (_dgbb .Data ,_gddd .Data );return _dgbb ,nil ;};_cabd :=_dgbb .resizeImageData (_gddd );if _cabd !=nil {return nil ,_f .Wrap (_cabd ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");};_dgbb .Text =_gddd .Text ;copy (_dgbb .Data ,_gddd .Data );return _dgbb ,nil ;};func (_dda *Bitmap )addBorderGeneral (_dcgg ,_fab ,_bfc ,_badb int ,_ccb int )(*Bitmap ,error ){const _aae ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _dcgg < 0||_fab < 0||_bfc < 0||_badb < 0{return nil ,_f .Error (_aae ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_eaa ,_agda :=_dda .Width ,_dda .Height ;_acf :=_eaa +_dcgg +_fab ;_gbeg :=_agda +_bfc +_badb ;_fcaf :=New (_acf ,_gbeg );_fcaf .Color =_dda .Color ;_cad :=PixClr ;if _ccb > 0{_cad =PixSet ;};_afcb :=_fcaf .RasterOperation (0,0,_dcgg ,_gbeg ,_cad ,nil ,0,0);if _afcb !=nil {return nil ,_f .Wrap (_afcb ,_aae ,"\u006c\u0065\u0066\u0074");};_afcb =_fcaf .RasterOperation (_acf -_fab ,0,_fab ,_gbeg ,_cad ,nil ,0,0);if _afcb !=nil {return nil ,_f .Wrap (_afcb ,_aae ,"\u0072\u0069\u0067h\u0074");};_afcb =_fcaf .RasterOperation (0,0,_acf ,_bfc ,_cad ,nil ,0,0);if _afcb !=nil {return nil ,_f .Wrap (_afcb ,_aae ,"\u0074\u006f\u0070");};_afcb =_fcaf .RasterOperation (0,_gbeg -_badb ,_acf ,_badb ,_cad ,nil ,0,0);if _afcb !=nil {return nil ,_f .Wrap (_afcb ,_aae ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_afcb =_fcaf .RasterOperation (_dcgg ,_bfc ,_eaa ,_agda ,PixSrc ,_dda ,0,0);if _afcb !=nil {return nil ,_f .Wrap (_afcb ,_aae ,"\u0063\u006f\u0070\u0079");};return _fcaf ,nil ;};func TstESymbol (t *_a .T ,scale ...int )*Bitmap {_efea ,_defg :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_g .NoError (t ,_defg );return TstGetScaledSymbol (t ,_efea ,scale ...);};func (_fgb *Bitmap )CountPixels ()int {return _fgb .countPixels ()};func TstRSymbol (t *_a .T ,scale ...int )*Bitmap {_dfdcc ,_cbaa :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_g .NoError (t ,_cbaa );return TstGetScaledSymbol (t ,_dfdcc ,scale ...);};func _ccf (_feg *Bitmap ,_bbb int ,_aga []byte )(_cbba *Bitmap ,_bga error ){const _gac ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _feg ==nil {return nil ,_f .Error (_gac ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _bbb < 1||_bbb > 4{return nil ,_f .Error (_gac ,"\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 _feg .Height <=1{return nil ,_f .Errorf (_gac ,"\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",_feg .Height );};_cbba =New (_feg .Width /2,_feg .Height /2);if _aga ==nil {_aga =_cbbd ();};_ff :=_bfbcg (_feg .RowStride ,2*_cbba .RowStride );switch _bbb {case 1:_bga =_agd (_feg ,_cbba ,_bbb ,_aga ,_ff );case 2:_bga =_ccg (_feg ,_cbba ,_bbb ,_aga ,_ff );case 3:_bga =_fbf (_feg ,_cbba ,_bbb ,_aga ,_ff );case 4:_bga =_fcg (_feg ,_cbba ,_bbb ,_aga ,_ff );};if _bga !=nil {return nil ,_bga ;};return _cbba ,nil ;};func (_egae *Bitmap )connComponentsBitmapsBB (_bbag *Bitmaps ,_cbbed int )(_fgbd *Boxes ,_efag error ){const _fbfa ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _cbbed !=4&&_cbbed !=8{return nil ,_f .Error (_fbfa ,"\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 _bbag ==nil {return nil ,_f .Error (_fbfa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_bbag .Values )> 0{return nil ,_f .Error (_fbfa ,"\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 _egae .Zero (){return &Boxes {},nil ;};var (_cgfd ,_cefa ,_ecfc ,_dbe *Bitmap ;);_egae .setPadBits (0);if _cgfd ,_efag =_beb (nil ,_egae );_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"\u0062\u006d\u0031");};if _cefa ,_efag =_beb (nil ,_egae );_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"\u0062\u006d\u0032");};_gdecb :=&_e .Stack {};_gdecb .Aux =&_e .Stack {};_fgbd =&Boxes {};var (_bcccc ,_babg int ;_bbfd _df .Point ;_cgbee bool ;_ecaa *_df .Rectangle ;);for {if _bbfd ,_cgbee ,_efag =_cgfd .nextOnPixel (_bcccc ,_babg );_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"");};if !_cgbee {break ;};if _ecaa ,_efag =_bdfa (_cgfd ,_gdecb ,_bbfd .X ,_bbfd .Y ,_cbbed );_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"");};if _efag =_fgbd .Add (_ecaa );_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"");};if _ecfc ,_efag =_cgfd .clipRectangle (_ecaa ,nil );_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"\u0062\u006d\u0033");};if _dbe ,_efag =_cefa .clipRectangle (_ecaa ,nil );_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"\u0062\u006d\u0034");};if _ ,_efag =_aecc (_ecfc ,_ecfc ,_dbe );_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _efag =_cefa .RasterOperation (_ecaa .Min .X ,_ecaa .Min .Y ,_ecaa .Dx (),_ecaa .Dy (),PixSrcXorDst ,_ecfc ,0,0);_efag !=nil {return nil ,_f .Wrap (_efag ,_fbfa ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_bbag .AddBitmap (_ecfc );_bcccc =_bbfd .X ;_babg =_bbfd .Y ;};_bbag .Boxes =*_fgbd ;return _fgbd ,nil ;};func (_cfgd *Bitmap )connComponentsBB (_cgga int )(_bcgf *Boxes ,_abac error ){const _cfgff ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _cgga !=4&&_cgga !=8{return nil ,_f .Error (_cfgff ,"\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 _cfgd .Zero (){return &Boxes {},nil ;};_cfgd .setPadBits (0);_bdee ,_abac :=_beb (nil ,_cfgd );if _abac !=nil {return nil ,_f .Wrap (_abac ,_cfgff ,"\u0062\u006d\u0031");};_baaf :=&_e .Stack {};_baaf .Aux =&_e .Stack {};_bcgf =&Boxes {};var (_ffce ,_fgfec int ;_efdb _df .Point ;_ggbg bool ;_dbd *_df .Rectangle ;);for {if _efdb ,_ggbg ,_abac =_bdee .nextOnPixel (_fgfec ,_ffce );_abac !=nil {return nil ,_f .Wrap (_abac ,_cfgff ,"");};if !_ggbg {break ;};if _dbd ,_abac =_bdfa (_bdee ,_baaf ,_efdb .X ,_efdb .Y ,_cgga );_abac !=nil {return nil ,_f .Wrap (_abac ,_cfgff ,"");};if _abac =_bcgf .Add (_dbd );_abac !=nil {return nil ,_f .Wrap (_abac ,_cfgff ,"");};_fgfec =_efdb .X ;_ffce =_efdb .Y ;};return _bcgf ,nil ;};func _fgf ()(_fbg [256]uint32 ){for _ebg :=0;_ebg < 256;_ebg ++{if _ebg &0x01!=0{_fbg [_ebg ]|=0xf;};if _ebg &0x02!=0{_fbg [_ebg ]|=0xf0;};if _ebg &0x04!=0{_fbg [_ebg ]|=0xf00;};if _ebg &0x08!=0{_fbg [_ebg ]|=0xf000;};if _ebg &0x10!=0{_fbg [_ebg ]|=0xf0000;};if _ebg &0x20!=0{_fbg [_ebg ]|=0xf00000;};if _ebg &0x40!=0{_fbg [_ebg ]|=0xf000000;};if _ebg &0x80!=0{_fbg [_ebg ]|=0xf0000000;};};return _fbg ;};func _fffde (_cdebb ,_fbde *Bitmap ,_abg ,_gbcf int )(*Bitmap ,error ){const _fddg ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _fbde ==nil {return nil ,_f .Error (_fddg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _abg < 1&&_gbcf < 1{return nil ,_f .Error (_fddg ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _abg ==1&&_gbcf ==1{return _fbde .Copy (),nil ;};if _abg ==1||_gbcf ==1{var _bebd error ;_bef :=SelCreateBrick (_gbcf ,_abg ,_gbcf /2,_abg /2,SelHit );_cdebb ,_bebd =_afgec (_cdebb ,_fbde ,_bef );if _bebd !=nil {return nil ,_f .Wrap (_bebd ,_fddg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _cdebb ,nil ;};_bbac :=SelCreateBrick (1,_abg ,0,_abg /2,SelHit );_gaef :=SelCreateBrick (_gbcf ,1,_gbcf /2,0,SelHit );_dgef ,_cdbee :=_gggce (nil ,_fbde ,_bbac );if _cdbee !=nil {return nil ,_f .Wrap (_cdbee ,_fddg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_cdebb ,_cdbee =_gggce (_cdebb ,_dgef ,_gaef );if _cdbee !=nil {return nil ,_f .Wrap (_cdbee ,_fddg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_cdbee =_bdbb (_dgef ,_cdebb ,_bbac );if _cdbee !=nil {return nil ,_f .Wrap (_cdbee ,_fddg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_ ,_cdbee =_bdbb (_cdebb ,_dgef ,_gaef );if _cdbee !=nil {return nil ,_f .Wrap (_cdbee ,_fddg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _cdebb ,nil ;};const _egfbg =5000;func (_fbad *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _cbfec ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _aaffa :=_fbad .validateIntSlice ();_aaffa !=nil {return nil ,_f .Wrap (_aaffa ,_cbfec ,"");};if _fbad .IntSlice .Size ()==0{return nil ,_f .Error (_cbfec ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_fbad .SortByY ();var (_gdfg []*ClassedPoints ;_ebfc int ;);_abf :=-1;var _adgge *ClassedPoints ;for _ggde :=0;_ggde < len (_fbad .IntSlice );_ggde ++{_ebfc =int (_fbad .YAtIndex (_ggde ));if _ebfc !=_abf {_adgge =&ClassedPoints {Points :_fbad .Points };_abf =_ebfc ;_gdfg =append (_gdfg ,_adgge );};_adgge .IntSlice =append (_adgge .IntSlice ,_fbad .IntSlice [_ggde ]);};for _ ,_dcdfde :=range _gdfg {_dcdfde .SortByX ();};return _gdfg ,nil ;};func _eccb (_ffa ,_eabe *Bitmap ,_acfg CombinationOperator )*Bitmap {_begg :=New (_ffa .Width ,_ffa .Height );for _egfb :=0;_egfb < len (_begg .Data );_egfb ++{_begg .Data [_egfb ]=_cabdc (_ffa .Data [_egfb ],_eabe .Data [_egfb ],_acfg );};return _begg ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_fbddb *byHeight )Len ()int {return len (_fbddb .Values )};type Getter interface{GetBitmap ()*Bitmap ;};func (_gcdee *Bitmaps )GetBox (i int )(*_df .Rectangle ,error ){const _ccee ="\u0047\u0065\u0074\u0042\u006f\u0078";if _gcdee ==nil {return nil ,_f .Error (_ccee ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_gcdee .Boxes )-1{return nil ,_f .Errorf (_ccee ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gcdee .Boxes [i ],nil ;};func _fbf (_ade ,_gcb *Bitmap ,_age int ,_fegb []byte ,_bfeb int )(_afe error ){const _fdc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_bda ,_dgd ,_fdeb ,_caa ,_adf ,_fddc ,_dgf ,_acb int ;_aea ,_aff ,_gdb ,_gef uint32 ;_bcbd ,_afc byte ;_dba uint16 ;);_gaa :=make ([]byte ,4);_gecf :=make ([]byte ,4);for _fdeb =0;_fdeb < _ade .Height -1;_fdeb ,_caa =_fdeb +2,_caa +1{_bda =_fdeb *_ade .RowStride ;_dgd =_caa *_gcb .RowStride ;for _adf ,_fddc =0,0;_adf < _bfeb ;_adf ,_fddc =_adf +4,_fddc +1{for _dgf =0;_dgf < 4;_dgf ++{_acb =_bda +_adf +_dgf ;if _acb <=len (_ade .Data )-1&&_acb < _bda +_ade .RowStride {_gaa [_dgf ]=_ade .Data [_acb ];}else {_gaa [_dgf ]=0x00;};_acb =_bda +_ade .RowStride +_adf +_dgf ;if _acb <=len (_ade .Data )-1&&_acb < _bda +(2*_ade .RowStride ){_gecf [_dgf ]=_ade .Data [_acb ];}else {_gecf [_dgf ]=0x00;};};_aea =_fd .BigEndian .Uint32 (_gaa );_aff =_fd .BigEndian .Uint32 (_gecf );_gdb =_aea &_aff ;_gdb |=_gdb <<1;_gef =_aea |_aff ;_gef &=_gef <<1;_aff =_gdb &_gef ;_aff &=0xaaaaaaaa;_aea =_aff |(_aff <<7);_bcbd =byte (_aea >>24);_afc =byte ((_aea >>8)&0xff);_acb =_dgd +_fddc ;if _acb +1==len (_gcb .Data )-1||_acb +1>=_dgd +_gcb .RowStride {if _afe =_gcb .SetByte (_acb ,_fegb [_bcbd ]);_afe !=nil {return _f .Wrapf (_afe ,_fdc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_acb );};}else {_dba =(uint16 (_fegb [_bcbd ])<<8)|uint16 (_fegb [_afc ]);if _afe =_gcb .setTwoBytes (_acb ,_dba );_afe !=nil {return _f .Wrapf (_afe ,_fdc ,"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",_acb );};_fddc ++;};};};return nil ;};func (_ceca Points )XSorter ()func (_cgdc ,_fcdf int )bool {return func (_ffef ,_gdff int )bool {return _ceca [_ffef ].X < _ceca [_gdff ].X };};func TstNSymbol (t *_a .T ,scale ...int )*Bitmap {_bcbc ,_cfcd :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_g .NoError (t ,_cfcd );return TstGetScaledSymbol (t ,_bcbc ,scale ...);};func (_gdgea *byWidth )Swap (i ,j int ){_gdgea .Values [i ],_gdgea .Values [j ]=_gdgea .Values [j ],_gdgea .Values [i ];if _gdgea .Boxes !=nil {_gdgea .Boxes [i ],_gdgea .Boxes [j ]=_gdgea .Boxes [j ],_gdgea .Boxes [i ];};};