2023-09-07 17:40:17 +00:00

658 lines
196 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 (_bc "encoding/binary";_da "github.com/stretchr/testify/require";_g "github.com/unidoc/unipdf/v3/common";_db "github.com/unidoc/unipdf/v3/internal/bitwise";_be "github.com/unidoc/unipdf/v3/internal/imageutil";_ba "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
_c "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_dac "image";_f "math";_a "sort";_df "strings";_b "testing";);func _debg ()[]int {_aebb :=make ([]int ,256);for _gcaa :=0;_gcaa <=0xff;_gcaa ++{_adfd :=byte (_gcaa );_aebb [_adfd ]=int (_adfd &0x1)+(int (_adfd >>1)&0x1)+(int (_adfd >>2)&0x1)+(int (_adfd >>3)&0x1)+(int (_adfd >>4)&0x1)+(int (_adfd >>5)&0x1)+(int (_adfd >>6)&0x1)+(int (_adfd >>7)&0x1);
};return _aebb ;};func (_abffg *Points )AddPoint (x ,y float32 ){*_abffg =append (*_abffg ,Point {x ,y })};var _acaa =[5]int {1,2,3,0,4};func (_eeda *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _eeda .Copy (),nil ;
};_ade ,_cdgc :=_eeda .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _cdgc !=nil {return nil ,_c .Wrap (_cdgc ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _ade ,nil ;};func (_fcgf *Boxes )makeSizeIndicator (_dcea ,_cgbb int ,_afb LocationFilter ,_gead SizeComparison )*_ba .NumSlice {_ebc :=&_ba .NumSlice {};
var _eaf ,_aadb ,_bfcdb int ;for _ ,_ddede :=range *_fcgf {_eaf =0;_aadb ,_bfcdb =_ddede .Dx (),_ddede .Dy ();switch _afb {case LocSelectWidth :if (_gead ==SizeSelectIfLT &&_aadb < _dcea )||(_gead ==SizeSelectIfGT &&_aadb > _dcea )||(_gead ==SizeSelectIfLTE &&_aadb <=_dcea )||(_gead ==SizeSelectIfGTE &&_aadb >=_dcea ){_eaf =1;
};case LocSelectHeight :if (_gead ==SizeSelectIfLT &&_bfcdb < _cgbb )||(_gead ==SizeSelectIfGT &&_bfcdb > _cgbb )||(_gead ==SizeSelectIfLTE &&_bfcdb <=_cgbb )||(_gead ==SizeSelectIfGTE &&_bfcdb >=_cgbb ){_eaf =1;};case LocSelectIfEither :if (_gead ==SizeSelectIfLT &&(_bfcdb < _cgbb ||_aadb < _dcea ))||(_gead ==SizeSelectIfGT &&(_bfcdb > _cgbb ||_aadb > _dcea ))||(_gead ==SizeSelectIfLTE &&(_bfcdb <=_cgbb ||_aadb <=_dcea ))||(_gead ==SizeSelectIfGTE &&(_bfcdb >=_cgbb ||_aadb >=_dcea )){_eaf =1;
};case LocSelectIfBoth :if (_gead ==SizeSelectIfLT &&(_bfcdb < _cgbb &&_aadb < _dcea ))||(_gead ==SizeSelectIfGT &&(_bfcdb > _cgbb &&_aadb > _dcea ))||(_gead ==SizeSelectIfLTE &&(_bfcdb <=_cgbb &&_aadb <=_dcea ))||(_gead ==SizeSelectIfGTE &&(_bfcdb >=_cgbb &&_aadb >=_dcea )){_eaf =1;
};};_ebc .AddInt (_eaf );};return _ebc ;};func _deef (_abcb ,_cae *Bitmap ,_efcf ,_fgbc ,_caee ,_gddb ,_cdee int ,_ffe CombinationOperator )error {var _bcgd int ;_dcab :=func (){_bcgd ++;_caee +=_cae .RowStride ;_gddb +=_abcb .RowStride ;_cdee +=_abcb .RowStride };
for _bcgd =_efcf ;_bcgd < _fgbc ;_dcab (){_beb :=_caee ;for _ggcd :=_gddb ;_ggcd <=_cdee ;_ggcd ++{_beeg ,_dcaba :=_cae .GetByte (_beb );if _dcaba !=nil {return _dcaba ;};_acff ,_dcaba :=_abcb .GetByte (_ggcd );if _dcaba !=nil {return _dcaba ;};if _dcaba =_cae .SetByte (_beb ,_bgcb (_beeg ,_acff ,_ffe ));
_dcaba !=nil {return _dcaba ;};_beb ++;};};return nil ;};func (_ededg *BitmapsArray )GetBox (i int )(*_dac .Rectangle ,error ){const _begd ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _ededg ==nil {return nil ,_c .Error (_begd ,"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 (_ededg .Boxes )-1{return nil ,_c .Errorf (_begd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ededg .Boxes [i ],nil ;};func (_fcbc *Bitmap )addBorderGeneral (_aagg ,_cgca ,_ggd ,_bfcd int ,_ggbc int )(*Bitmap ,error ){const _fab ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _aagg < 0||_cgca < 0||_ggd < 0||_bfcd < 0{return nil ,_c .Error (_fab ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_fae ,_acfb :=_fcbc .Width ,_fcbc .Height ;_dfc :=_fae +_aagg +_cgca ;_feab :=_acfb +_ggd +_bfcd ;
_cgf :=New (_dfc ,_feab );_cgf .Color =_fcbc .Color ;_bcgg :=PixClr ;if _ggbc > 0{_bcgg =PixSet ;};_cce :=_cgf .RasterOperation (0,0,_aagg ,_feab ,_bcgg ,nil ,0,0);if _cce !=nil {return nil ,_c .Wrap (_cce ,_fab ,"\u006c\u0065\u0066\u0074");};_cce =_cgf .RasterOperation (_dfc -_cgca ,0,_cgca ,_feab ,_bcgg ,nil ,0,0);
if _cce !=nil {return nil ,_c .Wrap (_cce ,_fab ,"\u0072\u0069\u0067h\u0074");};_cce =_cgf .RasterOperation (0,0,_dfc ,_ggd ,_bcgg ,nil ,0,0);if _cce !=nil {return nil ,_c .Wrap (_cce ,_fab ,"\u0074\u006f\u0070");};_cce =_cgf .RasterOperation (0,_feab -_bfcd ,_dfc ,_bfcd ,_bcgg ,nil ,0,0);
if _cce !=nil {return nil ,_c .Wrap (_cce ,_fab ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_cce =_cgf .RasterOperation (_aagg ,_ggd ,_fae ,_acfb ,PixSrc ,_fcbc ,0,0);if _cce !=nil {return nil ,_c .Wrap (_cce ,_fab ,"\u0063\u006f\u0070\u0079");};return _cgf ,nil ;
};func (_fcea *Bitmaps )HeightSorter ()func (_baba ,_cdec int )bool {return func (_fafb ,_cbgg int )bool {_gegaa :=_fcea .Values [_fafb ].Height < _fcea .Values [_cbgg ].Height ;_g .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_fcea .Values [_fafb ].Height ,_fcea .Values [_cbgg ].Height ,_gegaa );
return _gegaa ;};};func TstPSymbol (t *_b .T )*Bitmap {t .Helper ();_dfeg :=New (5,8);_da .NoError (t ,_dfeg .SetPixel (0,0,1));_da .NoError (t ,_dfeg .SetPixel (1,0,1));_da .NoError (t ,_dfeg .SetPixel (2,0,1));_da .NoError (t ,_dfeg .SetPixel (3,0,1));
_da .NoError (t ,_dfeg .SetPixel (4,1,1));_da .NoError (t ,_dfeg .SetPixel (0,1,1));_da .NoError (t ,_dfeg .SetPixel (4,2,1));_da .NoError (t ,_dfeg .SetPixel (0,2,1));_da .NoError (t ,_dfeg .SetPixel (4,3,1));_da .NoError (t ,_dfeg .SetPixel (0,3,1));
_da .NoError (t ,_dfeg .SetPixel (0,4,1));_da .NoError (t ,_dfeg .SetPixel (1,4,1));_da .NoError (t ,_dfeg .SetPixel (2,4,1));_da .NoError (t ,_dfeg .SetPixel (3,4,1));_da .NoError (t ,_dfeg .SetPixel (0,5,1));_da .NoError (t ,_dfeg .SetPixel (0,6,1));
_da .NoError (t ,_dfeg .SetPixel (0,7,1));return _dfeg ;};func (_ccgd *Bitmap )thresholdPixelSum (_abfg int )bool {var (_bdde int ;_afc uint8 ;_efe byte ;_ebag int ;);_ccbg :=_ccgd .RowStride ;_ecd :=uint (_ccgd .Width &0x07);if _ecd !=0{_afc =uint8 ((0xff<<(8-_ecd ))&0xff);
_ccbg --;};for _bge :=0;_bge < _ccgd .Height ;_bge ++{for _ebag =0;_ebag < _ccbg ;_ebag ++{_efe =_ccgd .Data [_bge *_ccgd .RowStride +_ebag ];_bdde +=int (_aaef [_efe ]);};if _ecd !=0{_efe =_ccgd .Data [_bge *_ccgd .RowStride +_ebag ]&_afc ;_bdde +=int (_aaef [_efe ]);
};if _bdde > _abfg {return true ;};};return false ;};func _cfffe (_eaegc *Bitmap ,_ecea *_ba .Stack ,_dgeb ,_ebebg int )(_ccbcd *_dac .Rectangle ,_edgg error ){const _bgfaf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _eaegc ==nil {return nil ,_c .Error (_bgfaf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ecea ==nil {return nil ,_c .Error (_bgfaf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_ccfd ,_fgee :=_eaegc .Width ,_eaegc .Height ;_fbcd :=_ccfd -1;_cggca :=_fgee -1;if _dgeb < 0||_dgeb > _fbcd ||_ebebg < 0||_ebebg > _cggca ||!_eaegc .GetPixel (_dgeb ,_ebebg ){return nil ,nil ;};_dcbc :=_dac .Rect (100000,100000,0,0);if _edgg =_egead (_ecea ,_dgeb ,_dgeb ,_ebebg ,1,_cggca ,&_dcbc );
_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _edgg =_egead (_ecea ,_dgeb ,_dgeb ,_ebebg +1,-1,_cggca ,&_dcbc );_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};_dcbc .Min .X ,_dcbc .Max .X =_dgeb ,_dgeb ;_dcbc .Min .Y ,_dcbc .Max .Y =_ebebg ,_ebebg ;var (_fcgc *fillSegment ;_dadg int ;);for _ecea .Len ()> 0{if _fcgc ,_edgg =_ddba (_ecea );_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"");};_ebebg =_fcgc ._bfbag ;
for _dgeb =_fcgc ._fbadf -1;_dgeb >=0&&_eaegc .GetPixel (_dgeb ,_ebebg );_dgeb --{if _edgg =_eaegc .SetPixel (_dgeb ,_ebebg ,0);_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _dgeb >=_fcgc ._fbadf -1{for {for _dgeb ++;
_dgeb <=_fcgc ._gccd +1&&_dgeb <=_fbcd &&!_eaegc .GetPixel (_dgeb ,_ebebg );_dgeb ++{};_dadg =_dgeb ;if !(_dgeb <=_fcgc ._gccd +1&&_dgeb <=_fbcd ){break ;};for ;_dgeb <=_fbcd &&_eaegc .GetPixel (_dgeb ,_ebebg );_dgeb ++{if _edgg =_eaegc .SetPixel (_dgeb ,_ebebg ,0);
_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _edgg =_egead (_ecea ,_dadg ,_dgeb -1,_fcgc ._bfbag ,_fcgc ._fgefg ,_cggca ,&_dcbc );_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _dgeb > _fcgc ._gccd {if _edgg =_egead (_ecea ,_fcgc ._gccd +1,_dgeb -1,_fcgc ._bfbag ,-_fcgc ._fgefg ,_cggca ,&_dcbc );_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_dadg =_dgeb +1;if _dadg < _fcgc ._fbadf {if _edgg =_egead (_ecea ,_dadg ,_fcgc ._fbadf -1,_fcgc ._bfbag ,-_fcgc ._fgefg ,_cggca ,&_dcbc );_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_dgeb =_fcgc ._fbadf ;for {for ;_dgeb <=_fbcd &&_eaegc .GetPixel (_dgeb ,_ebebg );_dgeb ++{if _edgg =_eaegc .SetPixel (_dgeb ,_ebebg ,0);_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _edgg =_egead (_ecea ,_dadg ,_dgeb -1,_fcgc ._bfbag ,_fcgc ._fgefg ,_cggca ,&_dcbc );
_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dgeb > _fcgc ._gccd {if _edgg =_egead (_ecea ,_fcgc ._gccd +1,_dgeb -1,_fcgc ._bfbag ,-_fcgc ._fgefg ,_cggca ,&_dcbc );_edgg !=nil {return nil ,_c .Wrap (_edgg ,_bgfaf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _dgeb ++;_dgeb <=_fcgc ._gccd +1&&_dgeb <=_fbcd &&!_eaegc .GetPixel (_dgeb ,_ebebg );_dgeb ++{};_dadg =_dgeb ;if !(_dgeb <=_fcgc ._gccd +1&&_dgeb <=_fbcd ){break ;};};};_dcbc .Max .X ++;_dcbc .Max .Y ++;return &_dcbc ,nil ;};type fillSegment struct{_fbadf int ;
_gccd int ;_bfbag int ;_fgefg int ;};func (_ddc *Bitmap )SetDefaultPixel (){for _gede :=range _ddc .Data {_ddc .Data [_gede ]=byte (0xff);};};func _af (_fe *Bitmap ,_bcg int )(*Bitmap ,error ){const _bb ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";
if _fe ==nil {return nil ,_c .Error (_bb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bcg ==1{return _bcf (nil ,_fe );};if _bcg !=2&&_bcg !=4&&_bcg !=8{return nil ,_c .Error (_bb ,"\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");
};_cfe :=_bcg *_fe .Width ;_gfa :=_bcg *_fe .Height ;_bea :=New (_cfe ,_gfa );var _dbf error ;switch _bcg {case 2:_dbf =_cf (_bea ,_fe );case 4:_dbf =_daa (_bea ,_fe );case 8:_dbf =_bce (_bea ,_fe );};if _dbf !=nil {return nil ,_c .Wrap (_dbf ,_bb ,"");
};return _bea ,nil ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_fefd :=_ebb (h ,w ,"");_fefd .setOrigin (cy ,cx );var _cggfc ,_beee int ;for _cggfc =0;_cggfc < h ;_cggfc ++{for _beee =0;_beee < w ;_beee ++{_fefd .Data [_cggfc ][_beee ]=tp ;
};};return _fefd ;};func (_ddbdf *Bitmap )addPadBits ()(_dge error ){const _caba ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_cge :=_ddbdf .Width %8;if _cge ==0{return nil ;};_fbd :=_ddbdf .Width /8;
_edd :=_db .NewReader (_ddbdf .Data );_eef :=make ([]byte ,_ddbdf .Height *_ddbdf .RowStride );_adec :=_db .NewWriterMSB (_eef );_degd :=make ([]byte ,_fbd );var (_dff int ;_aab uint64 ;);for _dff =0;_dff < _ddbdf .Height ;_dff ++{if _ ,_dge =_edd .Read (_degd );
_dge !=nil {return _c .Wrap (_dge ,_caba ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_dge =_adec .Write (_degd );_dge !=nil {return _c .Wrap (_dge ,_caba ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _aab ,_dge =_edd .ReadBits (byte (_cge ));
_dge !=nil {return _c .Wrap (_dge ,_caba ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _dge =_adec .WriteByte (byte (_aab )<<uint (8-_cge ));_dge !=nil {return _c .Wrap (_dge ,_caba ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_ddbdf .Data =_adec .Data ();return nil ;};func init (){for _aad :=0;_aad < 256;_aad ++{_aaef [_aad ]=uint8 (_aad &0x1)+(uint8 (_aad >>1)&0x1)+(uint8 (_aad >>2)&0x1)+(uint8 (_aad >>3)&0x1)+(uint8 (_aad >>4)&0x1)+(uint8 (_aad >>5)&0x1)+(uint8 (_aad >>6)&0x1)+(uint8 (_aad >>7)&0x1);
};};func (_baag *Bitmap )resizeImageData (_ggda *Bitmap )error {if _ggda ==nil {return _c .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _baag .SizesEqual (_ggda ){return nil ;};_baag .Data =make ([]byte ,len (_ggda .Data ));_baag .Width =_ggda .Width ;_baag .Height =_ggda .Height ;_baag .RowStride =_ggda .RowStride ;return nil ;};func (_dfeb Points )GetIntX (i int )(int ,error ){if i >=len (_dfeb ){return 0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_dfeb [i ].X ),nil ;};func _fdce (_acdg ,_dab ,_bage *Bitmap )(*Bitmap ,error ){const _caff ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _dab ==nil {return nil ,_c .Error (_caff ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _bage ==nil {return nil ,_c .Error (_caff ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _gded error ;switch {case _acdg ==_dab :if _gded =_acdg .RasterOperation (0,0,_dab .Width ,_dab .Height ,PixNotSrcAndDst ,_bage ,0,0);
_gded !=nil {return nil ,_c .Wrap (_gded ,_caff ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _acdg ==_bage :if _gded =_acdg .RasterOperation (0,0,_dab .Width ,_dab .Height ,PixNotSrcAndDst ,_dab ,0,0);_gded !=nil {return nil ,_c .Wrap (_gded ,_caff ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
};default:_acdg ,_gded =_bcf (_acdg ,_dab );if _gded !=nil {return nil ,_c .Wrap (_gded ,_caff ,"");};if _gded =_acdg .RasterOperation (0,0,_dab .Width ,_dab .Height ,PixNotSrcAndDst ,_bage ,0,0);_gded !=nil {return nil ,_c .Wrap (_gded ,_caff ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
};};return _acdg ,nil ;};func _faef (_ccdfb ,_fcde *Bitmap ,_caffc ,_fccd int )(*Bitmap ,error ){const _gbfb ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _fcde ==nil {return nil ,_c .Error (_gbfb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _caffc < 1||_fccd < 1{return nil ,_c .Error (_gbfb ,"\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 _caffc ==1&&_fccd ==1{_accg ,_egdg :=_bcf (_ccdfb ,_fcde );if _egdg !=nil {return nil ,_c .Wrap (_egdg ,_gbfb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _accg ,nil ;};if _caffc ==1||_fccd ==1{_cdfg :=SelCreateBrick (_fccd ,_caffc ,_fccd /2,_caffc /2,SelHit );_dbgb ,_cfdc :=_feagc (_ccdfb ,_fcde ,_cdfg );if _cfdc !=nil {return nil ,_c .Wrap (_cfdc ,_gbfb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _dbgb ,nil ;};_ddbb :=SelCreateBrick (1,_caffc ,0,_caffc /2,SelHit );_beea :=SelCreateBrick (_fccd ,1,_fccd /2,0,SelHit );_ffdca ,_dfbge :=_feagc (nil ,_fcde ,_ddbb );if _dfbge !=nil {return nil ,_c .Wrap (_dfbge ,_gbfb ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_ccdfb ,_dfbge =_feagc (_ccdfb ,_ffdca ,_beea );if _dfbge !=nil {return nil ,_c .Wrap (_dfbge ,_gbfb ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ccdfb ,nil ;};func (_cde *Bitmap )String ()string {var _fda ="\u000a";for _dede :=0;_dede < _cde .Height ;
_dede ++{var _cegg string ;for _edb :=0;_edb < _cde .Width ;_edb ++{_fdd :=_cde .GetPixel (_edb ,_dede );if _fdd {_cegg +="\u0031";}else {_cegg +="\u0030";};};_fda +=_cegg +"\u000a";};return _fda ;};type Component int ;func _bcgf (_gce ,_cad int )int {if _gce < _cad {return _gce ;
};return _cad ;};func (_cda *Bitmap )removeBorderGeneral (_dfe ,_bgc ,_cgg ,_dbed int )(*Bitmap ,error ){const _fba ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _dfe < 0||_bgc < 0||_cgg < 0||_dbed < 0{return nil ,_c .Error (_fba ,"\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");
};_aecb ,_fabe :=_cda .Width ,_cda .Height ;_efa :=_aecb -_dfe -_bgc ;_cdcc :=_fabe -_cgg -_dbed ;if _efa <=0{return nil ,_c .Errorf (_fba ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_efa );};
if _cdcc <=0{return nil ,_c .Errorf (_fba ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_cdcc );};_adde :=New (_efa ,_cdcc );_adde .Color =_cda .Color ;_fegd :=_adde .RasterOperation (0,0,_efa ,_cdcc ,PixSrc ,_cda ,_dfe ,_cgg );
if _fegd !=nil {return nil ,_c .Wrap (_fegd ,_fba ,"");};return _adde ,nil ;};var (_fgceb =_ae ();_ecdd =_ege ();_dbeg =_eaeb (););func (_gdba *byHeight )Less (i ,j int )bool {return _gdba .Values [i ].Height < _gdba .Values [j ].Height };func (_cefg *Bitmap )connComponentsBB (_cegbf int )(_gbg *Boxes ,_cca error ){const _beae ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
if _cegbf !=4&&_cegbf !=8{return nil ,_c .Error (_beae ,"\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 _cefg .Zero (){return &Boxes {},nil ;
};_cefg .setPadBits (0);_ggee ,_cca :=_bcf (nil ,_cefg );if _cca !=nil {return nil ,_c .Wrap (_cca ,_beae ,"\u0062\u006d\u0031");};_cgd :=&_ba .Stack {};_cgd .Aux =&_ba .Stack {};_gbg =&Boxes {};var (_dgbd ,_fdfda int ;_abfd _dac .Point ;_fad bool ;_gage *_dac .Rectangle ;
);for {if _abfd ,_fad ,_cca =_ggee .nextOnPixel (_fdfda ,_dgbd );_cca !=nil {return nil ,_c .Wrap (_cca ,_beae ,"");};if !_fad {break ;};if _gage ,_cca =_gbgae (_ggee ,_cgd ,_abfd .X ,_abfd .Y ,_cegbf );_cca !=nil {return nil ,_c .Wrap (_cca ,_beae ,"");
};if _cca =_gbg .Add (_gage );_cca !=nil {return nil ,_c .Wrap (_cca ,_beae ,"");};_fdfda =_abfd .X ;_dgbd =_abfd .Y ;};return _gbg ,nil ;};func _cgbd (_adcc *Bitmap ,_addc ,_fedf ,_afaab ,_fbfe int ,_gdfg RasterOperator ,_gbfe *Bitmap ,_edgcf ,_ecdb int )error {var (_ffff byte ;
_befb int ;_bbea int ;_fegc ,_aac int ;_gebgb ,_gbaef int ;);_effd :=_afaab >>3;_caea :=_afaab &7;if _caea > 0{_ffff =_ffcef [_caea ];};_befb =_gbfe .RowStride *_ecdb +(_edgcf >>3);_bbea =_adcc .RowStride *_fedf +(_addc >>3);switch _gdfg {case PixSrc :for _gebgb =0;
_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]=_gbfe .Data [_fegc ];_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],_gbfe .Data [_fegc ],_ffff );
};};case PixNotSrc :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]=^(_gbfe .Data [_fegc ]);_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],^_gbfe .Data [_fegc ],_ffff );
};};case PixSrcOrDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]|=_gbfe .Data [_fegc ];_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],_gbfe .Data [_fegc ]|_adcc .Data [_aac ],_ffff );
};};case PixSrcAndDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]&=_gbfe .Data [_fegc ];_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],_gbfe .Data [_fegc ]&_adcc .Data [_aac ],_ffff );
};};case PixSrcXorDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]^=_gbfe .Data [_fegc ];_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],_gbfe .Data [_fegc ]^_adcc .Data [_aac ],_ffff );
};};case PixNotSrcOrDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]|=^(_gbfe .Data [_fegc ]);_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],^(_gbfe .Data [_fegc ])|_adcc .Data [_aac ],_ffff );
};};case PixNotSrcAndDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]&=^(_gbfe .Data [_fegc ]);_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],^(_gbfe .Data [_fegc ])&_adcc .Data [_aac ],_ffff );
};};case PixSrcOrNotDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]=_gbfe .Data [_fegc ]|^(_adcc .Data [_aac ]);_aac ++;
_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],_gbfe .Data [_fegc ]|^(_adcc .Data [_aac ]),_ffff );};};case PixSrcAndNotDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;
for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]=_gbfe .Data [_fegc ]&^(_adcc .Data [_aac ]);_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],_gbfe .Data [_fegc ]&^(_adcc .Data [_aac ]),_ffff );};};case PixNotPixSrcOrDst :for _gebgb =0;
_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]=^(_gbfe .Data [_fegc ]|_adcc .Data [_aac ]);_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],^(_gbfe .Data [_fegc ]|_adcc .Data [_aac ]),_ffff );
};};case PixNotPixSrcAndDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]=^(_gbfe .Data [_fegc ]&_adcc .Data [_aac ]);
_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],^(_gbfe .Data [_fegc ]&_adcc .Data [_aac ]),_ffff );};};case PixNotPixSrcXorDst :for _gebgb =0;_gebgb < _fbfe ;_gebgb ++{_fegc =_befb +_gebgb *_gbfe .RowStride ;_aac =_bbea +_gebgb *_adcc .RowStride ;
for _gbaef =0;_gbaef < _effd ;_gbaef ++{_adcc .Data [_aac ]=^(_gbfe .Data [_fegc ]^_adcc .Data [_aac ]);_aac ++;_fegc ++;};if _caea > 0{_adcc .Data [_aac ]=_gdcbd (_adcc .Data [_aac ],^(_gbfe .Data [_fegc ]^_adcc .Data [_aac ]),_ffff );};};default:_g .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",_gdfg );
return _c .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func (_gfcd *Bitmap )GetPixel (x ,y int )bool {_fdg :=_gfcd .GetByteIndex (x ,y );_daaf :=_gfcd .GetBitOffset (x );_afg :=uint (7-_daaf );if _fdg > len (_gfcd .Data )-1{_g .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 ,_gfcd );
return false ;};if (_gfcd .Data [_fdg ]>>_afg )&0x01>=1{return true ;};return false ;};func _fce (_fee ,_dag *Bitmap ,_dbbg int ,_gae []byte ,_fgf int )(_ddff error ){const _dgg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
var (_eca ,_eaad ,_fga ,_dbde ,_gcb ,_dggb ,_deda ,_dagb int ;_fcc ,_bca ,_acg ,_egf uint32 ;_dfbb ,_fgba byte ;_faad uint16 ;);_ffg :=make ([]byte ,4);_dgf :=make ([]byte ,4);for _fga =0;_fga < _fee .Height -1;_fga ,_dbde =_fga +2,_dbde +1{_eca =_fga *_fee .RowStride ;
_eaad =_dbde *_dag .RowStride ;for _gcb ,_dggb =0,0;_gcb < _fgf ;_gcb ,_dggb =_gcb +4,_dggb +1{for _deda =0;_deda < 4;_deda ++{_dagb =_eca +_gcb +_deda ;if _dagb <=len (_fee .Data )-1&&_dagb < _eca +_fee .RowStride {_ffg [_deda ]=_fee .Data [_dagb ];}else {_ffg [_deda ]=0x00;
};_dagb =_eca +_fee .RowStride +_gcb +_deda ;if _dagb <=len (_fee .Data )-1&&_dagb < _eca +(2*_fee .RowStride ){_dgf [_deda ]=_fee .Data [_dagb ];}else {_dgf [_deda ]=0x00;};};_fcc =_bc .BigEndian .Uint32 (_ffg );_bca =_bc .BigEndian .Uint32 (_dgf );_acg =_fcc &_bca ;
_acg |=_acg <<1;_egf =_fcc |_bca ;_egf &=_egf <<1;_bca =_acg &_egf ;_bca &=0xaaaaaaaa;_fcc =_bca |(_bca <<7);_dfbb =byte (_fcc >>24);_fgba =byte ((_fcc >>8)&0xff);_dagb =_eaad +_dggb ;if _dagb +1==len (_dag .Data )-1||_dagb +1>=_eaad +_dag .RowStride {if _ddff =_dag .SetByte (_dagb ,_gae [_dfbb ]);
_ddff !=nil {return _c .Wrapf (_ddff ,_dgg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_dagb );};}else {_faad =(uint16 (_gae [_dfbb ])<<8)|uint16 (_gae [_fgba ]);if _ddff =_dag .setTwoBytes (_dagb ,_faad );_ddff !=nil {return _c .Wrapf (_ddff ,_dgg ,"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",_dagb );
};_dggb ++;};};};return nil ;};func (_gaec *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _efef ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _fffd :=_gaec .validateIntSlice ();
_fffd !=nil {return nil ,_c .Wrap (_fffd ,_efef ,"");};if _gaec .IntSlice .Size ()==0{return nil ,_c .Error (_efef ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_gaec .SortByY ();var (_gabc []*ClassedPoints ;
_cfac int ;);_cbg :=-1;var _afe *ClassedPoints ;for _gbdc :=0;_gbdc < len (_gaec .IntSlice );_gbdc ++{_cfac =int (_gaec .YAtIndex (_gbdc ));if _cfac !=_cbg {_afe =&ClassedPoints {Points :_gaec .Points };_cbg =_cfac ;_gabc =append (_gabc ,_afe );};_afe .IntSlice =append (_afe .IntSlice ,_gaec .IntSlice [_gbdc ]);
};for _ ,_gefd :=range _gabc {_gefd .SortByX ();};return _gabc ,nil ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_fdef *Bitmap )SetPixel (x ,y int ,pixel byte )error {_dbbd :=_fdef .GetByteIndex (x ,y );
if _dbbd > len (_fdef .Data )-1{return _c .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_dbbd );};_cef :=_fdef .GetBitOffset (x );
_efbe :=uint (7-_cef );_gea :=_fdef .Data [_dbbd ];var _fcca byte ;if pixel ==1{_fcca =_gea |(pixel &0x01<<_efbe );}else {_fcca =_gea &^(1<<_efbe );};_fdef .Data [_dbbd ]=_fcca ;return nil ;};func (_abgc *Bitmap )SetByte (index int ,v byte )error {if index > len (_abgc .Data )-1||index < 0{return _c .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index );
};_abgc .Data [index ]=v ;return nil ;};func _eafg (_gecd *Bitmap ,_egaf ,_abcg ,_dacf ,_aaec int ,_cbbda RasterOperator ,_dccf *Bitmap ,_gcadc ,_dbafc int )error {var (_dfeba bool ;_bafb bool ;_dgcd int ;_gdge int ;_febb int ;_ggfda bool ;_cffa byte ;
_ecga int ;_effb int ;_bbf int ;_fegaa ,_bbcde int ;);_gedg :=8-(_egaf &7);_aggb :=_dbfgd [_gedg ];_edfd :=_gecd .RowStride *_abcg +(_egaf >>3);_dfccd :=_dccf .RowStride *_dbafc +(_gcadc >>3);if _dacf < _gedg {_dfeba =true ;_aggb &=_ffcef [8-_gedg +_dacf ];
};if !_dfeba {_dgcd =(_dacf -_gedg )>>3;if _dgcd > 0{_bafb =true ;_gdge =_edfd +1;_febb =_dfccd +1;};};_ecga =(_egaf +_dacf )&7;if !(_dfeba ||_ecga ==0){_ggfda =true ;_cffa =_ffcef [_ecga ];_effb =_edfd +1+_dgcd ;_bbf =_dfccd +1+_dgcd ;};switch _cbbda {case PixSrc :for _fegaa =0;
_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],_dccf .Data [_dfccd ],_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]=_dccf .Data [_febb +_bbcde ];
};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],_dccf .Data [_bbf ],_cffa );_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixNotSrc :for _fegaa =0;
_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],^_dccf .Data [_dfccd ],_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]=^_dccf .Data [_febb +_bbcde ];
};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],^_dccf .Data [_bbf ],_cffa );_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixSrcOrDst :for _fegaa =0;
_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],_dccf .Data [_dfccd ]|_gecd .Data [_edfd ],_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;
_bbcde ++{_gecd .Data [_gdge +_bbcde ]|=_dccf .Data [_febb +_bbcde ];};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],_dccf .Data [_bbf ]|_gecd .Data [_effb ],_cffa );
_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixSrcAndDst :for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],_dccf .Data [_dfccd ]&_gecd .Data [_edfd ],_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;
};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]&=_dccf .Data [_febb +_bbcde ];};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],_dccf .Data [_bbf ]&_gecd .Data [_effb ],_cffa );
_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixSrcXorDst :for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],_dccf .Data [_dfccd ]^_gecd .Data [_edfd ],_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;
};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]^=_dccf .Data [_febb +_bbcde ];};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],_dccf .Data [_bbf ]^_gecd .Data [_effb ],_cffa );
_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixNotSrcOrDst :for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],^(_dccf .Data [_dfccd ])|_gecd .Data [_edfd ],_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;
};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]|=^(_dccf .Data [_febb +_bbcde ]);};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;
_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],^(_dccf .Data [_bbf ])|_gecd .Data [_effb ],_cffa );_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixNotSrcAndDst :for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],^(_dccf .Data [_dfccd ])&_gecd .Data [_edfd ],_aggb );
_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]&=^_dccf .Data [_febb +_bbcde ];};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;
};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],^(_dccf .Data [_bbf ])&_gecd .Data [_effb ],_cffa );_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixSrcOrNotDst :for _fegaa =0;_fegaa < _aaec ;
_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],_dccf .Data [_dfccd ]|^(_gecd .Data [_edfd ]),_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]=_dccf .Data [_febb +_bbcde ]|^(_gecd .Data [_gdge +_bbcde ]);
};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],_dccf .Data [_bbf ]|^(_gecd .Data [_effb ]),_cffa );_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;
};};case PixSrcAndNotDst :for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],_dccf .Data [_dfccd ]&^(_gecd .Data [_edfd ]),_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;};if _bafb {for _fegaa =0;_fegaa < _aaec ;
_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]=_dccf .Data [_febb +_bbcde ]&^(_gecd .Data [_gdge +_bbcde ]);};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],_dccf .Data [_bbf ]&^(_gecd .Data [_effb ]),_cffa );
_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixNotPixSrcOrDst :for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],^(_dccf .Data [_dfccd ]|_gecd .Data [_edfd ]),_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;
};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]=^(_dccf .Data [_febb +_bbcde ]|_gecd .Data [_gdge +_bbcde ]);};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;
_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],^(_dccf .Data [_bbf ]|_gecd .Data [_effb ]),_cffa );_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixNotPixSrcAndDst :for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],^(_dccf .Data [_dfccd ]&_gecd .Data [_edfd ]),_aggb );
_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;_bbcde ++{_gecd .Data [_gdge +_bbcde ]=^(_dccf .Data [_febb +_bbcde ]&_gecd .Data [_gdge +_bbcde ]);};_gdge +=_gecd .RowStride ;
_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],^(_dccf .Data [_bbf ]&_gecd .Data [_effb ]),_cffa );_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};case PixNotPixSrcXorDst :for _fegaa =0;
_fegaa < _aaec ;_fegaa ++{_gecd .Data [_edfd ]=_gdcbd (_gecd .Data [_edfd ],^(_dccf .Data [_dfccd ]^_gecd .Data [_edfd ]),_aggb );_edfd +=_gecd .RowStride ;_dfccd +=_dccf .RowStride ;};if _bafb {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{for _bbcde =0;_bbcde < _dgcd ;
_bbcde ++{_gecd .Data [_gdge +_bbcde ]=^(_dccf .Data [_febb +_bbcde ]^_gecd .Data [_gdge +_bbcde ]);};_gdge +=_gecd .RowStride ;_febb +=_dccf .RowStride ;};};if _ggfda {for _fegaa =0;_fegaa < _aaec ;_fegaa ++{_gecd .Data [_effb ]=_gdcbd (_gecd .Data [_effb ],^(_dccf .Data [_bbf ]^_gecd .Data [_effb ]),_cffa );
_effb +=_gecd .RowStride ;_bbf +=_dccf .RowStride ;};};default:_g .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",_cbbda );return _c .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func TstNSymbol (t *_b .T ,scale ...int )*Bitmap {_adb ,_bcag :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_da .NoError (t ,_bcag );return TstGetScaledSymbol (t ,_adb ,scale ...);};func (_eadf *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _eadf .removeBorderGeneral (left ,right ,top ,bot );
};func (_fcb *Bitmap )CreateTemplate ()*Bitmap {return _fcb .createTemplate ()};func _fgfgd (_afba ,_gagb ,_dacee *Bitmap ,_fgbe int )(*Bitmap ,error ){const _dfafd ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _gagb ==nil {return nil ,_c .Error (_dfafd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _dacee ==nil {return nil ,_c .Error (_dfafd ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _fgbe !=4&&_fgbe !=8{return nil ,_c .Error (_dfafd ,"\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 _fgcdg error ;_afba ,_fgcdg =_bcf (_afba ,_gagb );if _fgcdg !=nil {return nil ,_c .Wrap (_fgcdg ,_dfafd ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_bga :=_gagb .createTemplate ();_dacee .setPadBits (0);
for _fecf :=0;_fecf < _gdcf ;_fecf ++{_bga ,_fgcdg =_bcf (_bga ,_afba );if _fgcdg !=nil {return nil ,_c .Wrapf (_fgcdg ,_dfafd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_fecf );};if _fgcdg =_ffcfc (_afba ,_dacee ,_fgbe );
_fgcdg !=nil {return nil ,_c .Wrapf (_fgcdg ,_dfafd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_fecf );};if _bga .Equals (_afba ){break ;};};return _afba ,nil ;};func _fede (_abefb *Bitmap ,_befaf *Bitmap ,_bfagg *Selection ,_dabde **Bitmap )(*Bitmap ,error ){const _gbdd ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
if _befaf ==nil {return nil ,_c .Error (_gbdd ,"\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 _bfagg ==nil {return nil ,_c .Error (_gbdd ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
};_egb ,_ecca :=_bfagg .Height ,_bfagg .Width ;if _egb ==0||_ecca ==0{return nil ,_c .Error (_gbdd ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _abefb ==nil {_abefb =_befaf .createTemplate ();
*_dabde =_befaf ;return _abefb ,nil ;};_abefb .Width =_befaf .Width ;_abefb .Height =_befaf .Height ;_abefb .RowStride =_befaf .RowStride ;_abefb .Color =_befaf .Color ;_abefb .Data =make ([]byte ,_befaf .RowStride *_befaf .Height );if _abefb ==_befaf {*_dabde =_befaf .Copy ();
}else {*_dabde =_befaf ;};return _abefb ,nil ;};func _gcad (_abce *Bitmap ,_ccab *Bitmap ,_debf *Selection )(*Bitmap ,error ){var (_acgf *Bitmap ;_eddcb error ;);_abce ,_eddcb =_fede (_abce ,_ccab ,_debf ,&_acgf );if _eddcb !=nil {return nil ,_eddcb ;};
if _eddcb =_abce .clearAll ();_eddcb !=nil {return nil ,_eddcb ;};var _gdg SelectionValue ;for _gcg :=0;_gcg < _debf .Height ;_gcg ++{for _cafba :=0;_cafba < _debf .Width ;_cafba ++{_gdg =_debf .Data [_gcg ][_cafba ];if _gdg ==SelHit {if _eddcb =_abce .RasterOperation (_cafba -_debf .Cx ,_gcg -_debf .Cy ,_ccab .Width ,_ccab .Height ,PixSrcOrDst ,_acgf ,0,0);
_eddcb !=nil {return nil ,_eddcb ;};};};};return _abce ,nil ;};func (_dcbg Points )Size ()int {return len (_dcbg )};func _bgcf (_eaea ,_gegc *Bitmap ,_bgee ,_bddf ,_gada ,_bcc ,_cggc ,_bbb ,_deea ,_cbd int ,_acfge CombinationOperator ,_gdeb int )error {var _eadd int ;
_bbdb :=func (){_eadd ++;_gada +=_gegc .RowStride ;_bcc +=_eaea .RowStride ;_cggc +=_eaea .RowStride };for _eadd =_bgee ;_eadd < _bddf ;_bbdb (){var _dbfga uint16 ;_ccea :=_gada ;for _gdc :=_bcc ;_gdc <=_cggc ;_gdc ++{_fge ,_adef :=_gegc .GetByte (_ccea );
if _adef !=nil {return _adef ;};_feeb ,_adef :=_eaea .GetByte (_gdc );if _adef !=nil {return _adef ;};_dbfga =(_dbfga |(uint16 (_feeb )&0xff))<<uint (_cbd );_feeb =byte (_dbfga >>8);if _adef =_gegc .SetByte (_ccea ,_bgcb (_fge ,_feeb ,_acfge ));_adef !=nil {return _adef ;
};_ccea ++;_dbfga <<=uint (_deea );if _gdc ==_cggc {_feeb =byte (_dbfga >>(8-uint8 (_cbd )));if _gdeb !=0{_feeb =_edga (uint (8+_bbb ),_feeb );};_fge ,_adef =_gegc .GetByte (_ccea );if _adef !=nil {return _adef ;};if _adef =_gegc .SetByte (_ccea ,_bgcb (_fge ,_feeb ,_acfge ));
_adef !=nil {return _adef ;};};};};return nil ;};func (_gceb *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_bgde *Boxes ,_gdbg error ){const _acgb ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _gceb ==nil {return nil ,_c .Error (_acgb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_gceb )==0{return _gceb ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_acgb ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_c .Errorf (_acgb ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_geeb :=_gceb .makeSizeIndicator (width ,height ,tp ,relation );_cbbc ,_gdbg :=_gceb .selectWithIndicator (_geeb );if _gdbg !=nil {return nil ,_c .Wrap (_gdbg ,_acgb ,"");};return _cbbc ,nil ;};func (_acdb *BitmapsArray )AddBitmaps (bm *Bitmaps ){_acdb .Values =append (_acdb .Values ,bm )};
type CombinationOperator int ;func TstTSymbol (t *_b .T ,scale ...int )*Bitmap {_bgcc ,_cgab :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_da .NoError (t ,_cgab );return TstGetScaledSymbol (t ,_bgcc ,scale ...);};func (_fgad *Bitmap )setEightPartlyBytes (_aedf ,_gdae int ,_dfad uint64 )(_fega error ){var (_dcg byte ;
_dded int ;);const _fgfg ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _bfa :=1;_bfa <=_gdae ;_bfa ++{_dded =64-_bfa *8;_dcg =byte (_dfad >>uint (_dded )&0xff);_g .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",_dcg ,_aedf ,_aedf +_bfa -1,_gdae ,_dded );
if _fega =_fgad .SetByte (_aedf +_bfa -1,_dcg );_fega !=nil {return _c .Wrap (_fega ,_fgfg ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_dceb :=_fgad .RowStride *8-_fgad .Width ;if _dceb ==0{return nil ;};_dded -=8;_dcg =byte (_dfad >>uint (_dded )&0xff)<<uint (_dceb );
if _fega =_fgad .SetByte (_aedf +_gdae ,_dcg );_fega !=nil {return _c .Wrap (_fega ,_fgfg ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func _eab (_cfc *Bitmap ,_aga ...int )(_ad *Bitmap ,_bac error ){const _edf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _cfc ==nil {return nil ,_c .Error (_edf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_aga )==0||len (_aga )> 4{return nil ,_c .Error (_edf ,"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 _aga [0]<=0{_g .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");_ad ,_bac =_bcf (nil ,_cfc );if _bac !=nil {return nil ,_c .Wrap (_bac ,_edf ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _ad ,nil ;};_aef :=_gabe ();_ad =_cfc ;for _abg ,_ef :=range _aga {if _ef <=0{break ;};_ad ,_bac =_cea (_ad ,_ef ,_aef );if _bac !=nil {return nil ,_c .Wrapf (_bac ,_edf ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_abg );
};};return _ad ,nil ;};func TstESymbol (t *_b .T ,scale ...int )*Bitmap {_beebe ,_badf :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_da .NoError (t ,_badf );return TstGetScaledSymbol (t ,_beebe ,scale ...);};func TstWordBitmapWithSpaces (t *_b .T ,scale ...int )*Bitmap {_cecd :=1;
if len (scale )> 0{_cecd =scale [0];};_ggcda :=3;_gcfe :=9+7+15+2*_ggcda +2*_ggcda ;_cceeg :=5+_ggcda +5+2*_ggcda ;_cffc :=New (_gcfe *_cecd ,_cceeg *_cecd );_aaegg :=&Bitmaps {};var _gaga *int ;_ggcda *=_cecd ;_cbde :=_ggcda ;_gaga =&_cbde ;_edcgc :=_ggcda ;
_dfba :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );_dfba =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,_ggcda );_dfba =TstISymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );
_dfba =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,_ggcda );_dfba =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );_dfba =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );
_dfba =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,0);*_gaga =_ggcda ;_edcgc =5*_cecd +_ggcda ;_dfba =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );_dfba =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,_ggcda );
_dfba =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );_dfba =TstESymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );_dfba =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );
_dfba =TstESymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,1*_cecd );_dfba =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_aaegg ,_dfba ,_gaga ,_edcgc ,0);TstWriteSymbols (t ,_aaegg ,_cffc );return _cffc ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_bacaf float64 ,_eff error ){const _ebee ="\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 _bacaf ,_c .Error (_ebee ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _bacaf ,_c .Error (_ebee ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _bacaf ,_c .Error (_ebee ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_geda ,_bgeg :=bm1 .Width ,bm1 .Height ;_edfc ,_ffec :=bm2 .Width ,bm2 .Height ;
if _bbg (_geda -_edfc )> maxDiffW {return 0,nil ;};if _bbg (_bgeg -_ffec )> maxDiffH {return 0,nil ;};var _cgbf ,_bfba int ;if delX >=0{_cgbf =int (delX +0.5);}else {_cgbf =int (delX -0.5);};if delY >=0{_bfba =int (delY +0.5);}else {_bfba =int (delY -0.5);
};_efce :=bm1 .createTemplate ();if _eff =_efce .RasterOperation (_cgbf ,_bfba ,_edfc ,_ffec ,PixSrc ,bm2 ,0,0);_eff !=nil {return _bacaf ,_c .Wrap (_eff ,_ebee ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _eff =_efce .RasterOperation (0,0,_geda ,_bgeg ,PixSrcAndDst ,bm1 ,0,0);
_eff !=nil {return _bacaf ,_c .Wrap (_eff ,_ebee ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_bgfa :=_efce .countPixels ();_bacaf =float64 (_bgfa )*float64 (_bgfa )/(float64 (area1 )*float64 (area2 ));return _bacaf ,nil ;};func (_feda *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_feda .Width ,Height :_feda .Height ,RowStride :_feda .RowStride ,Color :_feda .Color ,Text :_feda .Text ,BitmapNumber :_feda .BitmapNumber ,Special :_feda .Special ,Data :make ([]byte ,len (_feda .Data ))};
};func (_dggbd *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_gfbf *Bitmaps ,_fcec *Boxes ,_cgaa error ){const _bgcbf ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _dggbd ==nil {return nil ,nil ,_c .Error (_bgcbf ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");
};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_c .Error (_bgcbf ,"\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 _dggbd .Zero (){_fcec =&Boxes {};_gfbf =&Bitmaps {};return _gfbf ,_fcec ,nil ;};switch components {case ComponentConn :_gfbf =&Bitmaps {};if _fcec ,_cgaa =_dggbd .ConnComponents (_gfbf ,8);_cgaa !=nil {return nil ,nil ,_c .Wrap (_cgaa ,_bgcbf ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_cac ,_ebg :=MorphSequence (_dggbd ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _ebg !=nil {return nil ,nil ,_c .Wrap (_ebg ,_bgcbf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _g .Log .IsLogLevel (_g .LogLevelTrace ){_g .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",_cac .String ());
};_eabg :=&Bitmaps {};_fcec ,_ebg =_cac .ConnComponents (_eabg ,8);if _ebg !=nil {return nil ,nil ,_c .Wrap (_ebg ,_bgcbf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _g .Log .IsLogLevel (_g .LogLevelTrace ){_g .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",_eabg .String ());
};if _gfbf ,_ebg =_eabg .ClipToBitmap (_dggbd );_ebg !=nil {return nil ,nil ,_c .Wrap (_ebg ,_bgcbf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_cgeb :=1;
var _eedb *Bitmap ;switch {case _dggbd .XResolution <=200:_eedb =_dggbd ;case _dggbd .XResolution <=400:_cgeb =2;_eedb ,_cgaa =_eab (_dggbd ,1,0,0,0);if _cgaa !=nil {return nil ,nil ,_c .Wrap (_cgaa ,_bgcbf ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_cgeb =4;_eedb ,_cgaa =_eab (_dggbd ,1,1,0,0);if _cgaa !=nil {return nil ,nil ,_c .Wrap (_cgaa ,_bgcbf ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_age ,_ ,_gaae :=_dfacb (_eedb );if _gaae !=nil {return nil ,nil ,_c .Wrap (_gaae ,_bgcbf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_ggec ,_gaae :=_eaag (_age ,_cgeb );if _gaae !=nil {return nil ,nil ,_c .Wrap (_gaae ,_bgcbf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_geeg :=&Bitmaps {};if _fcec ,_gaae =_ggec .ConnComponents (_geeg ,4);_gaae !=nil {return nil ,nil ,_c .Wrap (_gaae ,_bgcbf ,"\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 _gfbf ,_gaae =_geeg .ClipToBitmap (_dggbd );_gaae !=nil {return nil ,nil ,_c .Wrap (_gaae ,_bgcbf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_gfbf ,_cgaa =_gfbf .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _cgaa !=nil {return nil ,nil ,_c .Wrap (_cgaa ,_bgcbf ,"");};_fcec ,_cgaa =_fcec .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _cgaa !=nil {return nil ,nil ,_c .Wrap (_cgaa ,_bgcbf ,"");};return _gfbf ,_fcec ,nil ;};func (_gcab *ClassedPoints )YAtIndex (i int )float32 {return (*_gcab .Points )[_gcab .IntSlice [i ]].Y };
func _bff (_gc *Bitmap ,_cccc *Bitmap ,_gad int )(_cgc error ){const _bfcg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _gad {case 2:_cgc =_cf (_gc ,_cccc );case 4:_cgc =_daa (_gc ,_cccc );
case 8:_cgc =_bce (_gc ,_cccc );default:return _c .Error (_bfcg ,"\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 _cgc !=nil {_cgc =_c .Wrap (_cgc ,_bfcg ,"");};return _cgc ;};func (_ggce *Selection )findMaxTranslations ()(_fbec ,_fece ,_fegg ,_aadbe int ){for _cdacd :=0;_cdacd < _ggce .Height ;_cdacd ++{for _gfaf :=0;_gfaf < _ggce .Width ;_gfaf ++{if _ggce .Data [_cdacd ][_gfaf ]==SelHit {_fbec =_cbag (_fbec ,_ggce .Cx -_gfaf );
_fece =_cbag (_fece ,_ggce .Cy -_cdacd );_fegg =_cbag (_fegg ,_gfaf -_ggce .Cx );_aadbe =_cbag (_aadbe ,_cdacd -_ggce .Cy );};};};return _fbec ,_fece ,_fegg ,_aadbe ;};func TstFrameBitmap ()*Bitmap {return _cbdc .Copy ()};func (_ebdg Points )YSorter ()func (_aega ,_cefb int )bool {return func (_ccddcg ,_bbe int )bool {return _ebdg [_ccddcg ].Y < _ebdg [_bbe ].Y };
};func (_aecg *Bitmap )setEightFullBytes (_debd int ,_fafa uint64 )error {if _debd +7> len (_aecg .Data )-1{return _c .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_aecg .Data [_debd ]=byte ((_fafa &0xff00000000000000)>>56);_aecg .Data [_debd +1]=byte ((_fafa &0xff000000000000)>>48);_aecg .Data [_debd +2]=byte ((_fafa &0xff0000000000)>>40);_aecg .Data [_debd +3]=byte ((_fafa &0xff00000000)>>32);_aecg .Data [_debd +4]=byte ((_fafa &0xff000000)>>24);
_aecg .Data [_debd +5]=byte ((_fafa &0xff0000)>>16);_aecg .Data [_debd +6]=byte ((_fafa &0xff00)>>8);_aecg .Data [_debd +7]=byte (_fafa &0xff);return nil ;};func (_cbeg *ClassedPoints )XAtIndex (i int )float32 {return (*_cbeg .Points )[_cbeg .IntSlice [i ]].X };
type byWidth Bitmaps ;func (_bbdc *ClassedPoints )Less (i ,j int )bool {return _bbdc ._gedbd (i ,j )};func (_ged *Bitmap )And (s *Bitmap )(_adc *Bitmap ,_ddbd error ){const _gdfb ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _ged ==nil {return nil ,_c .Error (_gdfb ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
};if s ==nil {return nil ,_c .Error (_gdfb ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_ged .SizesEqual (s ){_g .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",_gdfb );
};if _adc ,_ddbd =_bcf (_adc ,_ged );_ddbd !=nil {return nil ,_c .Wrap (_ddbd ,_gdfb ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ddbd =_adc .RasterOperation (0,0,_adc .Width ,_adc .Height ,PixSrcAndDst ,s ,0,0);
_ddbd !=nil {return nil ,_c .Wrap (_ddbd ,_gdfb ,"");};return _adc ,nil ;};func TstISymbol (t *_b .T ,scale ...int )*Bitmap {_edaba ,_acfe :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_da .NoError (t ,_acfe );return TstGetScaledSymbol (t ,_edaba ,scale ...);
};func _ege ()(_fd [256]uint32 ){for _baf :=0;_baf < 256;_baf ++{if _baf &0x01!=0{_fd [_baf ]|=0xf;};if _baf &0x02!=0{_fd [_baf ]|=0xf0;};if _baf &0x04!=0{_fd [_baf ]|=0xf00;};if _baf &0x08!=0{_fd [_baf ]|=0xf000;};if _baf &0x10!=0{_fd [_baf ]|=0xf0000;
};if _baf &0x20!=0{_fd [_baf ]|=0xf00000;};if _baf &0x40!=0{_fd [_baf ]|=0xf000000;};if _baf &0x80!=0{_fd [_baf ]|=0xf0000000;};};return _fd ;};func (_dbga *ClassedPoints )SortByY (){_dbga ._gedbd =_dbga .ySortFunction ();_a .Sort (_dbga )};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _eabb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_ebagd ,_aaed :=p1 .Width ,p1 .Height ;_defa ,_dfed :=p3 .Width ,p3 .Height ;if _ba .Abs (_ebagd -_defa )> maxDiffW {return false ,nil ;};if _ba .Abs (_aaed -_dfed )> maxDiffH {return false ,nil ;};_geag :=int (delX +_ba .Sign (delX )*0.5);_cceb :=int (delY +_ba .Sign (delY )*0.5);
var _fgd error ;_befa :=p1 .CreateTemplate ();if _fgd =_befa .RasterOperation (0,0,_ebagd ,_aaed ,PixSrc ,p1 ,0,0);_fgd !=nil {return false ,_c .Wrap (_fgd ,_eabb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _fgd =_befa .RasterOperation (_geag ,_cceb ,_ebagd ,_aaed ,PixNotSrcAndDst ,p4 ,0,0);
_fgd !=nil {return false ,_c .Wrap (_fgd ,_eabb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _befa .Zero (){return false ,nil ;};if _fgd =_befa .RasterOperation (_geag ,_cceb ,_defa ,_dfed ,PixSrc ,p3 ,0,0);_fgd !=nil {return false ,_c .Wrap (_fgd ,_eabb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
};if _fgd =_befa .RasterOperation (0,0,_defa ,_dfed ,PixNotSrcAndDst ,p2 ,0,0);_fgd !=nil {return false ,_c .Wrap (_fgd ,_eabb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _befa .Zero (),nil ;};func (_daee Points )Get (i int )(Point ,error ){if i > len (_daee )-1{return Point {},_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _daee [i ],nil ;};func (_eacc *byWidth )Len ()int {return len (_eacc .Values )};func _cdag (_afbc *Bitmap ,_cgdf ...MorphProcess )(_aeadc *Bitmap ,_bafcc error ){const _ecdf ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
if _afbc ==nil {return nil ,_c .Error (_ecdf ,"\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 (_cgdf )==0{return nil ,_c .Error (_ecdf ,"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 _bafcc =_gedb (_cgdf ...);
_bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"");};var _cbdbc ,_bgbc ,_eaddg int ;_aeadc =_afbc .Copy ();for _ ,_affc :=range _cgdf {switch _affc .Operation {case MopDilation :_cbdbc ,_bgbc =_affc .getWidthHeight ();_aeadc ,_bafcc =DilateBrick (nil ,_aeadc ,_cbdbc ,_bgbc );
if _bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"");};case MopErosion :_cbdbc ,_bgbc =_affc .getWidthHeight ();_aeadc ,_bafcc =_faef (nil ,_aeadc ,_cbdbc ,_bgbc );if _bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"");};case MopOpening :_cbdbc ,_bgbc =_affc .getWidthHeight ();
_aeadc ,_bafcc =_gfbb (nil ,_aeadc ,_cbdbc ,_bgbc );if _bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"");};case MopClosing :_cbdbc ,_bgbc =_affc .getWidthHeight ();_aeadc ,_bafcc =_geadg (nil ,_aeadc ,_cbdbc ,_bgbc );if _bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"");
};case MopRankBinaryReduction :_aeadc ,_bafcc =_eab (_aeadc ,_affc .Arguments ...);if _bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"");};case MopReplicativeBinaryExpansion :_aeadc ,_bafcc =_eaag (_aeadc ,_affc .Arguments [0]);if _bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"");
};case MopAddBorder :_eaddg =_affc .Arguments [0];_aeadc ,_bafcc =_aeadc .AddBorder (_eaddg ,0);if _bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"");};default:return nil ,_c .Error (_ecdf ,"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 _eaddg > 0{_aeadc ,_bafcc =_aeadc .RemoveBorder (_eaddg );if _bafcc !=nil {return nil ,_c .Wrap (_bafcc ,_ecdf ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _aeadc ,nil ;};type byHeight Bitmaps ;func (_bgdbd *Bitmaps )selectByIndexes (_ecag []int )(*Bitmaps ,error ){_ecbc :=&Bitmaps {};
for _ ,_aefca :=range _ecag {_ccdc ,_edab :=_bgdbd .GetBitmap (_aefca );if _edab !=nil {return nil ,_c .Wrap (_edab ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_ecbc .AddBitmap (_ccdc );};return _ecbc ,nil ;
};var _aaef [256]uint8 ;func _feagc (_affde ,_dbeda *Bitmap ,_gdbgf *Selection )(*Bitmap ,error ){const _cadc ="\u0065\u0072\u006fd\u0065";var (_cadf error ;_gbcf *Bitmap ;);_affde ,_cadf =_fede (_affde ,_dbeda ,_gdbgf ,&_gbcf );if _cadf !=nil {return nil ,_c .Wrap (_cadf ,_cadc ,"");
};if _cadf =_affde .setAll ();_cadf !=nil {return nil ,_c .Wrap (_cadf ,_cadc ,"");};var _bde SelectionValue ;for _fbba :=0;_fbba < _gdbgf .Height ;_fbba ++{for _bagc :=0;_bagc < _gdbgf .Width ;_bagc ++{_bde =_gdbgf .Data [_fbba ][_bagc ];if _bde ==SelHit {_cadf =_gbdb (_affde ,_gdbgf .Cx -_bagc ,_gdbgf .Cy -_fbba ,_dbeda .Width ,_dbeda .Height ,PixSrcAndDst ,_gbcf ,0,0);
if _cadf !=nil {return nil ,_c .Wrap (_cadf ,_cadc ,"");};};};};if MorphBC ==SymmetricMorphBC {return _affde ,nil ;};_dcgb ,_beeb ,_eedd ,_gfab :=_gdbgf .findMaxTranslations ();if _dcgb > 0{if _cadf =_affde .RasterOperation (0,0,_dcgb ,_dbeda .Height ,PixClr ,nil ,0,0);
_cadf !=nil {return nil ,_c .Wrap (_cadf ,_cadc ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _eedd > 0{if _cadf =_affde .RasterOperation (_dbeda .Width -_eedd ,0,_eedd ,_dbeda .Height ,PixClr ,nil ,0,0);_cadf !=nil {return nil ,_c .Wrap (_cadf ,_cadc ,"\u0078\u006e\u0020\u003e\u0020\u0030");
};};if _beeb > 0{if _cadf =_affde .RasterOperation (0,0,_dbeda .Width ,_beeb ,PixClr ,nil ,0,0);_cadf !=nil {return nil ,_c .Wrap (_cadf ,_cadc ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _gfab > 0{if _cadf =_affde .RasterOperation (0,_dbeda .Height -_gfab ,_dbeda .Width ,_gfab ,PixClr ,nil ,0,0);
_cadf !=nil {return nil ,_c .Wrap (_cadf ,_cadc ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _affde ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_gbae float64 ,_fgef error ){const _gfgb ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_c .Error (_gfgb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_c .Error (_gfgb ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if area1 <=0||area2 <=0{return 0,_c .Error (_gfgb ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_cgfa ,_bgbe :=bm1 .Width ,bm1 .Height ;_fgfa ,_gbce :=bm2 .Width ,bm2 .Height ;
_eeca :=_bbg (_cgfa -_fgfa );if _eeca > maxDiffW {return 0,nil ;};_bbaf :=_bbg (_bgbe -_gbce );if _bbaf > maxDiffH {return 0,nil ;};var _dbaf ,_gbf int ;if delX >=0{_dbaf =int (delX +0.5);}else {_dbaf =int (delX -0.5);};if delY >=0{_gbf =int (delY +0.5);
}else {_gbf =int (delY -0.5);};_bgdb :=_cbag (_gbf ,0);_ffeef :=_bcgf (_gbce +_gbf ,_bgbe );_abcfb :=bm1 .RowStride *_bgdb ;_fbda :=bm2 .RowStride *(_bgdb -_gbf );_bgbg :=_cbag (_dbaf ,0);_bece :=_bcgf (_fgfa +_dbaf ,_cgfa );_acfbg :=bm2 .RowStride ;var _agbb ,_cegc int ;
if _dbaf >=8{_agbb =_dbaf >>3;_abcfb +=_agbb ;_bgbg -=_agbb <<3;_bece -=_agbb <<3;_dbaf &=7;}else if _dbaf <=-8{_cegc =-((_dbaf +7)>>3);_fbda +=_cegc ;_acfbg -=_cegc ;_dbaf +=_cegc <<3;};if _bgbg >=_bece ||_bgdb >=_ffeef {return 0,nil ;};_becc :=(_bece +7)>>3;
var (_daec ,_agd ,_efg byte ;_bgbf ,_dcfb ,_ecdc int ;);switch {case _dbaf ==0:for _ecdc =_bgdb ;_ecdc < _ffeef ;_ecdc ,_abcfb ,_fbda =_ecdc +1,_abcfb +bm1 .RowStride ,_fbda +bm2 .RowStride {for _dcfb =0;_dcfb < _becc ;_dcfb ++{_efg =bm1 .Data [_abcfb +_dcfb ]&bm2 .Data [_fbda +_dcfb ];
_bgbf +=tab [_efg ];};};case _dbaf > 0:if _acfbg < _becc {for _ecdc =_bgdb ;_ecdc < _ffeef ;_ecdc ,_abcfb ,_fbda =_ecdc +1,_abcfb +bm1 .RowStride ,_fbda +bm2 .RowStride {_daec ,_agd =bm1 .Data [_abcfb ],bm2 .Data [_fbda ]>>uint (_dbaf );_efg =_daec &_agd ;
_bgbf +=tab [_efg ];for _dcfb =1;_dcfb < _acfbg ;_dcfb ++{_daec ,_agd =bm1 .Data [_abcfb +_dcfb ],(bm2 .Data [_fbda +_dcfb ]>>uint (_dbaf ))|(bm2 .Data [_fbda +_dcfb -1]<<uint (8-_dbaf ));_efg =_daec &_agd ;_bgbf +=tab [_efg ];};_daec =bm1 .Data [_abcfb +_dcfb ];
_agd =bm2 .Data [_fbda +_dcfb -1]<<uint (8-_dbaf );_efg =_daec &_agd ;_bgbf +=tab [_efg ];};}else {for _ecdc =_bgdb ;_ecdc < _ffeef ;_ecdc ,_abcfb ,_fbda =_ecdc +1,_abcfb +bm1 .RowStride ,_fbda +bm2 .RowStride {_daec ,_agd =bm1 .Data [_abcfb ],bm2 .Data [_fbda ]>>uint (_dbaf );
_efg =_daec &_agd ;_bgbf +=tab [_efg ];for _dcfb =1;_dcfb < _becc ;_dcfb ++{_daec =bm1 .Data [_abcfb +_dcfb ];_agd =(bm2 .Data [_fbda +_dcfb ]>>uint (_dbaf ))|(bm2 .Data [_fbda +_dcfb -1]<<uint (8-_dbaf ));_efg =_daec &_agd ;_bgbf +=tab [_efg ];};};};default:if _becc < _acfbg {for _ecdc =_bgdb ;
_ecdc < _ffeef ;_ecdc ,_abcfb ,_fbda =_ecdc +1,_abcfb +bm1 .RowStride ,_fbda +bm2 .RowStride {for _dcfb =0;_dcfb < _becc ;_dcfb ++{_daec =bm1 .Data [_abcfb +_dcfb ];_agd =bm2 .Data [_fbda +_dcfb ]<<uint (-_dbaf );_agd |=bm2 .Data [_fbda +_dcfb +1]>>uint (8+_dbaf );
_efg =_daec &_agd ;_bgbf +=tab [_efg ];};};}else {for _ecdc =_bgdb ;_ecdc < _ffeef ;_ecdc ,_abcfb ,_fbda =_ecdc +1,_abcfb +bm1 .RowStride ,_fbda +bm2 .RowStride {for _dcfb =0;_dcfb < _becc -1;_dcfb ++{_daec =bm1 .Data [_abcfb +_dcfb ];_agd =bm2 .Data [_fbda +_dcfb ]<<uint (-_dbaf );
_agd |=bm2 .Data [_fbda +_dcfb +1]>>uint (8+_dbaf );_efg =_daec &_agd ;_bgbf +=tab [_efg ];};_daec =bm1 .Data [_abcfb +_dcfb ];_agd =bm2 .Data [_fbda +_dcfb ]<<uint (-_dbaf );_efg =_daec &_agd ;_bgbf +=tab [_efg ];};};};_gbae =float64 (_bgbf )*float64 (_bgbf )/(float64 (area1 )*float64 (area2 ));
return _gbae ,nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _egaa (d ,s ,hSize ,vSize )};func MakePixelSumTab8 ()[]int {return _debg ()};func (_bfed *Bitmaps )String ()string {_dabf :=_df .Builder {};for _ ,_ebcg :=range _bfed .Values {_dabf .WriteString (_ebcg .String ());
_dabf .WriteRune ('\n');};return _dabf .String ();};func (_dbce Points )XSorter ()func (_ffbf ,_fgae int )bool {return func (_gfdd ,_gccg int )bool {return _dbce [_gfdd ].X < _dbce [_gccg ].X };};var MorphBC BoundaryCondition ;func (_cebgd *Bitmaps )AddBox (box *_dac .Rectangle ){_cebgd .Boxes =append (_cebgd .Boxes ,box )};
func (_dgc *Bitmap )ClipRectangle (box *_dac .Rectangle )(_bba *Bitmap ,_abef *_dac .Rectangle ,_ced error ){const _fac ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_c .Error (_fac ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};_gddd ,_agg :=_dgc .Width ,_dgc .Height ;_bafd :=_dac .Rect (0,0,_gddd ,_agg );if !box .Overlaps (_bafd ){return nil ,nil ,_c .Error (_fac ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_bead :=box .Intersect (_bafd );
_dee ,_bab :=_bead .Min .X ,_bead .Min .Y ;_faf ,_gcfg :=_bead .Dx (),_bead .Dy ();_bba =New (_faf ,_gcfg );_bba .Text =_dgc .Text ;if _ced =_bba .RasterOperation (0,0,_faf ,_gcfg ,PixSrc ,_dgc ,_dee ,_bab );_ced !=nil {return nil ,nil ,_c .Wrap (_ced ,_fac ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_abef =&_bead ;return _bba ,_abef ,nil ;};func _agga (_fbe ,_gbc *Bitmap ,_gdfbc ,_deac ,_bgb uint ,_gfbe ,_adg int ,_afgc bool ,_ffee ,_ggaf int )error {for _faeg :=_gfbe ;_faeg < _adg ;_faeg ++{if _ffee +1< len (_fbe .Data ){_aaea :=_faeg +1==_adg ;
_cbdb ,_ceaab :=_fbe .GetByte (_ffee );if _ceaab !=nil {return _ceaab ;};_ffee ++;_cbdb <<=_gdfbc ;_bfgb ,_ceaab :=_fbe .GetByte (_ffee );if _ceaab !=nil {return _ceaab ;};_bfgb >>=_deac ;_cbbd :=_cbdb |_bfgb ;if _aaea &&!_afgc {_cbbd =_edga (_bgb ,_cbbd );
};_ceaab =_gbc .SetByte (_ggaf ,_cbbd );if _ceaab !=nil {return _ceaab ;};_ggaf ++;if _aaea &&_afgc {_dfff ,_bfae :=_fbe .GetByte (_ffee );if _bfae !=nil {return _bfae ;};_dfff <<=_gdfbc ;_cbbd =_edga (_bgb ,_dfff );if _bfae =_gbc .SetByte (_ggaf ,_cbbd );
_bfae !=nil {return _bfae ;};};continue ;};_dbcg ,_gag :=_fbe .GetByte (_ffee );if _gag !=nil {_g .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",_ffee ,_gag );
return _gag ;};_dbcg <<=_gdfbc ;_ffee ++;_gag =_gbc .SetByte (_ggaf ,_dbcg );if _gag !=nil {return _gag ;};_ggaf ++;};return nil ;};func (_acabg *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _fddcc ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
if len (_acabg .Values )==0{return nil ,_c .Error (_fddcc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_baec :=&BitmapsArray {};_acabg .SortByHeight ();_egbe :=-1;_dcdd :=-1;for _dggdb :=0;_dggdb < len (_acabg .Values );
_dggdb ++{_eacb :=_acabg .Values [_dggdb ].Height ;if _eacb > _egbe {_egbe =_eacb ;_dcdd ++;_baec .Values =append (_baec .Values ,&Bitmaps {});};_baec .Values [_dcdd ].AddBitmap (_acabg .Values [_dggdb ]);};return _baec ,nil ;};func (_cee *Bitmap )setPadBits (_cba int ){_adea :=8-_cee .Width %8;
if _adea ==8{return ;};_fdf :=_cee .Width /8;_faba :=_dbfgd [_adea ];if _cba ==0{_faba ^=_faba ;};var _feag int ;for _cbfb :=0;_cbfb < _cee .Height ;_cbfb ++{_feag =_cbfb *_cee .RowStride +_fdf ;if _cba ==0{_cee .Data [_feag ]&=_faba ;}else {_cee .Data [_feag ]|=_faba ;
};};};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func _bgdg (_gbga *Bitmap ,_eaac ,_fabg int ,_bbec ,_fdcc int ,_dbaff RasterOperator ){var (_fbeb int ;
_gdddg byte ;_bcbg ,_cdd int ;_gfbg int ;);_fagd :=_bbec >>3;_dgce :=_bbec &7;if _dgce > 0{_gdddg =_ffcef [_dgce ];};_fbeb =_gbga .RowStride *_fabg +(_eaac >>3);switch _dbaff {case PixClr :for _bcbg =0;_bcbg < _fdcc ;_bcbg ++{_gfbg =_fbeb +_bcbg *_gbga .RowStride ;
for _cdd =0;_cdd < _fagd ;_cdd ++{_gbga .Data [_gfbg ]=0x0;_gfbg ++;};if _dgce > 0{_gbga .Data [_gfbg ]=_gdcbd (_gbga .Data [_gfbg ],0x0,_gdddg );};};case PixSet :for _bcbg =0;_bcbg < _fdcc ;_bcbg ++{_gfbg =_fbeb +_bcbg *_gbga .RowStride ;for _cdd =0;_cdd < _fagd ;
_cdd ++{_gbga .Data [_gfbg ]=0xff;_gfbg ++;};if _dgce > 0{_gbga .Data [_gfbg ]=_gdcbd (_gbga .Data [_gfbg ],0xff,_gdddg );};};case PixNotDst :for _bcbg =0;_bcbg < _fdcc ;_bcbg ++{_gfbg =_fbeb +_bcbg *_gbga .RowStride ;for _cdd =0;_cdd < _fagd ;_cdd ++{_gbga .Data [_gfbg ]=^_gbga .Data [_gfbg ];
_gfbg ++;};if _dgce > 0{_gbga .Data [_gfbg ]=_gdcbd (_gbga .Data [_gfbg ],^_gbga .Data [_gfbg ],_gdddg );};};};};func (_dgfb *Bitmap )SetPadBits (value int ){_dgfb .setPadBits (value )};func NewClassedPoints (points *Points ,classes _ba .IntSlice )(*ClassedPoints ,error ){const _cgde ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_c .Error (_cgde ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_c .Error (_cgde ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_dcgd :=&ClassedPoints {Points :points ,IntSlice :classes };if _adaa :=_dcgd .validateIntSlice ();_adaa !=nil {return nil ,_c .Wrap (_adaa ,_cgde ,"");};return _dcgd ,nil ;};func (_gbdf *Bitmap )setFourBytes (_ebe int ,_fffc uint32 )error {if _ebe +3> len (_gbdf .Data )-1{return _c .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_ebe );
};_gbdf .Data [_ebe ]=byte ((_fffc &0xff000000)>>24);_gbdf .Data [_ebe +1]=byte ((_fffc &0xff0000)>>16);_gbdf .Data [_ebe +2]=byte ((_fffc &0xff00)>>8);_gbdf .Data [_ebe +3]=byte (_fffc &0xff);return nil ;};const (_ LocationFilter =iota ;LocSelectWidth ;
LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_bcge *byWidth )Less (i ,j int )bool {return _bcge .Values [i ].Width < _bcge .Values [j ].Width };func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _bcf (d ,s )};
func (_cegb *Bitmap )setBit (_gafg int ){_cegb .Data [(_gafg >>3)]|=0x80>>uint (_gafg &7)};func TstImageBitmap ()*Bitmap {return _dega .Copy ()};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _dcdf ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064";
if bm1 ==nil {return false ,_c .Error (_dcdf ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c");
};if bm2 ==nil {return false ,_c .Error (_dcdf ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c");
};if area1 <=0||area2 <=0{return false ,_c .Error (_dcdf ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030");
};if downcount ==nil {return false ,_c .Error (_dcdf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_c .Error (_dcdf ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_gbfc ,_fgcd :=bm1 .Width ,bm1 .Height ;_ccec ,_cfad :=bm2 .Width ,bm2 .Height ;if _ba .Abs (_gbfc -_ccec )> maxDiffW {return false ,nil ;};if _ba .Abs (_fgcd -_cfad )> maxDiffH {return false ,nil ;};_cgbbg :=int (delX +_ba .Sign (delX )*0.5);_aggg :=int (delY +_ba .Sign (delY )*0.5);
_cebg :=int (_f .Ceil (_f .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_ccf :=bm2 .RowStride ;_dged :=_cbag (_aggg ,0);_eda :=_bcgf (_cfad +_aggg ,_fgcd );_egd :=bm1 .RowStride *_dged ;_cafb :=bm2 .RowStride *(_dged -_aggg );var _ddef int ;
if _eda <=_fgcd {_ddef =downcount [_eda -1];};_caed :=_cbag (_cgbbg ,0);_eddc :=_bcgf (_ccec +_cgbbg ,_gbfc );var _fef ,_daef int ;if _cgbbg >=8{_fef =_cgbbg >>3;_egd +=_fef ;_caed -=_fef <<3;_eddc -=_fef <<3;_cgbbg &=7;}else if _cgbbg <=-8{_daef =-((_cgbbg +7)>>3);
_cafb +=_daef ;_ccf -=_daef ;_cgbbg +=_daef <<3;};var (_abga ,_gddf ,_fbg int ;_dfaf ,_gcbe ,_fegb byte ;);if _caed >=_eddc ||_dged >=_eda {return false ,nil ;};_bfag :=(_eddc +7)>>3;switch {case _cgbbg ==0:for _gddf =_dged ;_gddf < _eda ;_gddf ,_egd ,_cafb =_gddf +1,_egd +bm1 .RowStride ,_cafb +bm2 .RowStride {for _fbg =0;
_fbg < _bfag ;_fbg ++{_dfaf =bm1 .Data [_egd +_fbg ]&bm2 .Data [_cafb +_fbg ];_abga +=tab [_dfaf ];};if _abga >=_cebg {return true ,nil ;};if _ddffe :=_abga +downcount [_gddf ]-_ddef ;_ddffe < _cebg {return false ,nil ;};};case _cgbbg > 0&&_ccf < _bfag :for _gddf =_dged ;
_gddf < _eda ;_gddf ,_egd ,_cafb =_gddf +1,_egd +bm1 .RowStride ,_cafb +bm2 .RowStride {_gcbe =bm1 .Data [_egd ];_fegb =bm2 .Data [_cafb ]>>uint (_cgbbg );_dfaf =_gcbe &_fegb ;_abga +=tab [_dfaf ];for _fbg =1;_fbg < _ccf ;_fbg ++{_gcbe =bm1 .Data [_egd +_fbg ];
_fegb =bm2 .Data [_cafb +_fbg ]>>uint (_cgbbg )|bm2 .Data [_cafb +_fbg -1]<<uint (8-_cgbbg );_dfaf =_gcbe &_fegb ;_abga +=tab [_dfaf ];};_gcbe =bm1 .Data [_egd +_fbg ];_fegb =bm2 .Data [_cafb +_fbg -1]<<uint (8-_cgbbg );_dfaf =_gcbe &_fegb ;_abga +=tab [_dfaf ];
if _abga >=_cebg {return true ,nil ;}else if _abga +downcount [_gddf ]-_ddef < _cebg {return false ,nil ;};};case _cgbbg > 0&&_ccf >=_bfag :for _gddf =_dged ;_gddf < _eda ;_gddf ,_egd ,_cafb =_gddf +1,_egd +bm1 .RowStride ,_cafb +bm2 .RowStride {_gcbe =bm1 .Data [_egd ];
_fegb =bm2 .Data [_cafb ]>>uint (_cgbbg );_dfaf =_gcbe &_fegb ;_abga +=tab [_dfaf ];for _fbg =1;_fbg < _bfag ;_fbg ++{_gcbe =bm1 .Data [_egd +_fbg ];_fegb =bm2 .Data [_cafb +_fbg ]>>uint (_cgbbg );_fegb |=bm2 .Data [_cafb +_fbg -1]<<uint (8-_cgbbg );_dfaf =_gcbe &_fegb ;
_abga +=tab [_dfaf ];};if _abga >=_cebg {return true ,nil ;}else if _abga +downcount [_gddf ]-_ddef < _cebg {return false ,nil ;};};case _bfag < _ccf :for _gddf =_dged ;_gddf < _eda ;_gddf ,_egd ,_cafb =_gddf +1,_egd +bm1 .RowStride ,_cafb +bm2 .RowStride {for _fbg =0;
_fbg < _bfag ;_fbg ++{_gcbe =bm1 .Data [_egd +_fbg ];_fegb =bm2 .Data [_cafb +_fbg ]<<uint (-_cgbbg );_fegb |=bm2 .Data [_cafb +_fbg +1]>>uint (8+_cgbbg );_dfaf =_gcbe &_fegb ;_abga +=tab [_dfaf ];};if _abga >=_cebg {return true ,nil ;}else if _dagc :=_abga +downcount [_gddf ]-_ddef ;
_dagc < _cebg {return false ,nil ;};};case _ccf >=_bfag :for _gddf =_dged ;_gddf < _eda ;_gddf ,_egd ,_cafb =_gddf +1,_egd +bm1 .RowStride ,_cafb +bm2 .RowStride {for _fbg =0;_fbg < _bfag ;_fbg ++{_gcbe =bm1 .Data [_egd +_fbg ];_fegb =bm2 .Data [_cafb +_fbg ]<<uint (-_cgbbg );
_fegb |=bm2 .Data [_cafb +_fbg +1]>>uint (8+_cgbbg );_dfaf =_gcbe &_fegb ;_abga +=tab [_dfaf ];};_gcbe =bm1 .Data [_egd +_fbg ];_fegb =bm2 .Data [_cafb +_fbg ]<<uint (-_cgbbg );_dfaf =_gcbe &_fegb ;_abga +=tab [_dfaf ];if _abga >=_cebg {return true ,nil ;
}else if _abga +downcount [_gddf ]-_ddef < _cebg {return false ,nil ;};};};_bcbb :=float32 (_abga )*float32 (_abga )/(float32 (area1 )*float32 (area2 ));if _bcbb >=scoreThreshold {_g .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",_abga ,_cebg ,_bcbb ,scoreThreshold );
};return false ,nil ;};func (_acab *Bitmap )setAll ()error {_eac :=_gbdb (_acab ,0,0,_acab .Width ,_acab .Height ,PixSet ,nil ,0,0);if _eac !=nil {return _c .Wrap (_eac ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};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 _ebb (_cabe ,_fbbc int ,_eefe string )*Selection {_fbgf :=&Selection {Height :_cabe ,Width :_fbbc ,Name :_eefe };_fbgf .Data =make ([][]SelectionValue ,_cabe );for _accba :=0;_accba < _cabe ;_accba ++{_fbgf .Data [_accba ]=make ([]SelectionValue ,_fbbc );
};return _fbgf ;};func _edeg (_dbdb *Bitmap ,_cbbcf ,_gaca ,_gdbc ,_fbca int ,_cbgc RasterOperator ){if _cbbcf < 0{_gdbc +=_cbbcf ;_cbbcf =0;};_caab :=_cbbcf +_gdbc -_dbdb .Width ;if _caab > 0{_gdbc -=_caab ;};if _gaca < 0{_fbca +=_gaca ;_gaca =0;};_defad :=_gaca +_fbca -_dbdb .Height ;
if _defad > 0{_fbca -=_defad ;};if _gdbc <=0||_fbca <=0{return ;};if (_cbbcf &7)==0{_bgdg (_dbdb ,_cbbcf ,_gaca ,_gdbc ,_fbca ,_cbgc );}else {_ggdg (_dbdb ,_cbbcf ,_gaca ,_gdbc ,_fbca ,_cbgc );};};func (_egec *Bitmap )Equivalent (s *Bitmap )bool {return _egec .equivalent (s )};
func (_abcd *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _edag ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _abcd ==nil {return nil ,_c .Error (_edag ,"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 (_abcd .Values )-1{return nil ,_c .Errorf (_edag ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _abcd .Values [i ],nil ;};func (_ceea *ClassedPoints )validateIntSlice ()error {const _eegb ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
for _ ,_adca :=range _ceea .IntSlice {if _adca >=(_ceea .Points .Size ()){return _c .Errorf (_eegb ,"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",_adca ,_ceea .Points .Size ());
};};return nil ;};func (_fgc *Bitmap )GetByte (index int )(byte ,error ){if index > len (_fgc .Data )-1||index < 0{return 0,_c .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index );
};return _fgc .Data [index ],nil ;};func (_dbge *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _edcg ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_dbge .Values )==0{return nil ,_c .Error (_edcg ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};_fcdeb :=&BitmapsArray {};_dbge .SortByWidth ();_fabb :=-1;_gcfae :=-1;for _ddcf :=0;_ddcf < len (_dbge .Values );_ddcf ++{_dbbgd :=_dbge .Values [_ddcf ].Width ;if _dbbgd > _fabb {_fabb =_dbbgd ;_gcfae ++;_fcdeb .Values =append (_fcdeb .Values ,&Bitmaps {});
};_fcdeb .Values [_gcfae ].AddBitmap (_dbge .Values [_ddcf ]);};return _fcdeb ,nil ;};type SizeSelection int ;func (_facf *Bitmap )centroid (_gega ,_ddce []int )(Point ,error ){_cdad :=Point {};_facf .setPadBits (0);if len (_gega )==0{_gega =_bbbb ();};
if len (_ddce )==0{_ddce =_debg ();};var _ega ,_fegdc ,_gffbc ,_facg ,_defd ,_egge int ;var _geegd byte ;for _defd =0;_defd < _facf .Height ;_defd ++{_feb :=_facf .RowStride *_defd ;_facg =0;for _egge =0;_egge < _facf .RowStride ;_egge ++{_geegd =_facf .Data [_feb +_egge ];
if _geegd !=0{_facg +=_ddce [_geegd ];_ega +=_gega [_geegd ]+_egge *8*_ddce [_geegd ];};};_gffbc +=_facg ;_fegdc +=_facg *_defd ;};if _gffbc !=0{_cdad .X =float32 (_ega )/float32 (_gffbc );_cdad .Y =float32 (_fegdc )/float32 (_gffbc );};return _cdad ,nil ;
};var (_cbdc *Bitmap ;_dega *Bitmap ;);const _gdcf =5000;func (_fedfb *Bitmaps )selectByIndicator (_ceed *_ba .NumSlice )(_caag *Bitmaps ,_ffge error ){const _afge ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _fedfb ==nil {return nil ,_c .Error (_afge ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _ceed ==nil {return nil ,_c .Error (_afge ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_fedfb .Values )==0{return _fedfb ,nil ;};if len (*_ceed )!=len (_fedfb .Values ){return nil ,_c .Errorf (_afge ,"\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 (*_ceed ),len (_fedfb .Values ));
};var _bgfe ,_dbdfa ,_gdfc int ;for _dbdfa =0;_dbdfa < len (*_ceed );_dbdfa ++{if _bgfe ,_ffge =_ceed .GetInt (_dbdfa );_ffge !=nil {return nil ,_c .Wrap (_ffge ,_afge ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _bgfe ==1{_gdfc ++;
};};if _gdfc ==len (_fedfb .Values ){return _fedfb ,nil ;};_caag =&Bitmaps {};_ggbb :=len (_fedfb .Values )==len (_fedfb .Boxes );for _dbdfa =0;_dbdfa < len (*_ceed );_dbdfa ++{if _bgfe =int ((*_ceed )[_dbdfa ]);_bgfe ==0{continue ;};_caag .Values =append (_caag .Values ,_fedfb .Values [_dbdfa ]);
if _ggbb {_caag .Boxes =append (_caag .Boxes ,_fedfb .Boxes [_dbdfa ]);};};return _caag ,nil ;};func (_cggd *Bitmaps )WidthSorter ()func (_aabd ,_dabag int )bool {return func (_gece ,_dda int )bool {return _cggd .Values [_gece ].Width < _cggd .Values [_dda ].Width };
};func _bce (_aa ,_ccc *Bitmap )(_acd error ){const _dba ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_edg :=_ccc .RowStride ;_dea :=_aa .RowStride ;var _bef ,_fbc ,_dbd ,_agb ,_cgb int ;for _dbd =0;
_dbd < _ccc .Height ;_dbd ++{_bef =_dbd *_edg ;_fbc =8*_dbd *_dea ;for _agb =0;_agb < _edg ;_agb ++{if _acd =_aa .setEightBytes (_fbc +_agb *8,_dbeg [_ccc .Data [_bef +_agb ]]);_acd !=nil {return _c .Wrap (_acd ,_dba ,"");};};for _cgb =1;_cgb < 8;_cgb ++{for _agb =0;
_agb < _dea ;_agb ++{if _acd =_aa .SetByte (_fbc +_cgb *_dea +_agb ,_aa .Data [_fbc +_agb ]);_acd !=nil {return _c .Wrap (_acd ,_dba ,"");};};};};return nil ;};func _edda (_bbcc ,_ffbae *Bitmap ,_abca ,_ggbf int )(_fbce error ){const _eecfd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
var (_agea ,_abbc ,_fbaf ,_ggca int ;_gagcc ,_facb ,_cfff ,_fabf ,_acca ,_ggfdf ,_afdbc byte ;);for _agea =0;_agea < _abca ;_agea ++{_fbaf =_agea *_bbcc .RowStride ;_ggca =_agea *_ffbae .RowStride ;for _abbc =0;_abbc < _ggbf ;_abbc ++{_gagcc ,_fbce =_bbcc .GetByte (_fbaf +_abbc );
if _fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_facb ,_fbce =_ffbae .GetByte (_ggca +_abbc );if _fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
};if _agea > 0{_cfff ,_fbce =_bbcc .GetByte (_fbaf -_bbcc .RowStride +_abbc );if _fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u0069\u0020\u003e \u0030");};_gagcc |=_cfff ;};if _abbc > 0{_fabf ,_fbce =_bbcc .GetByte (_fbaf +_abbc -1);if _fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u006a\u0020\u003e \u0030");
};_gagcc |=_fabf <<7;};_gagcc &=_facb ;if _gagcc ==0||(^_gagcc )==0{if _fbce =_bbcc .SetByte (_fbaf +_abbc ,_gagcc );_fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
};continue ;};for {_afdbc =_gagcc ;_gagcc =(_gagcc |(_gagcc >>1)|(_gagcc <<1))&_facb ;if (_gagcc ^_afdbc )==0{if _fbce =_bbcc .SetByte (_fbaf +_abbc ,_gagcc );_fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _agea =_abca -1;_agea >=0;_agea --{_fbaf =_agea *_bbcc .RowStride ;_ggca =_agea *_ffbae .RowStride ;for _abbc =_ggbf -1;_abbc >=0;_abbc --{if _gagcc ,_fbce =_bbcc .GetByte (_fbaf +_abbc );_fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
};if _facb ,_fbce =_ffbae .GetByte (_ggca +_abbc );_fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _agea < _abca -1{if _acca ,_fbce =_bbcc .GetByte (_fbaf +_bbcc .RowStride +_abbc );
_fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_gagcc |=_acca ;};if _abbc < _ggbf -1{if _ggfdf ,_fbce =_bbcc .GetByte (_fbaf +_abbc +1);_fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
};_gagcc |=_ggfdf >>7;};_gagcc &=_facb ;if _gagcc ==0||(^_gagcc )==0{if _fbce =_bbcc .SetByte (_fbaf +_abbc ,_gagcc );_fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\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 {_afdbc =_gagcc ;_gagcc =(_gagcc |(_gagcc >>1)|(_gagcc <<1))&_facb ;if (_gagcc ^_afdbc )==0{if _fbce =_bbcc .SetByte (_fbaf +_abbc ,_gagcc );_fbce !=nil {return _c .Wrap (_fbce ,_eecfd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_dac .Rectangle ;};var (_ffcef =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_dbfgd =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func _gdcbd (_bdceb ,_gcff ,_ecdfe byte )byte {return (_bdceb &^(_ecdfe ))|(_gcff &_ecdfe )};
func _cea (_bcb *Bitmap ,_eged int ,_aae []byte )(_dcb *Bitmap ,_dcc error ){const _dbb ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _bcb ==nil {return nil ,_c .Error (_dbb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _eged < 1||_eged > 4{return nil ,_c .Error (_dbb ,"\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 _bcb .Height <=1{return nil ,_c .Errorf (_dbb ,"\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",_bcb .Height );
};_dcb =New (_bcb .Width /2,_bcb .Height /2);if _aae ==nil {_aae =_gabe ();};_dca :=_bcgf (_bcb .RowStride ,2*_dcb .RowStride );switch _eged {case 1:_dcc =_gfaa (_bcb ,_dcb ,_eged ,_aae ,_dca );case 2:_dcc =_dcd (_bcb ,_dcb ,_eged ,_aae ,_dca );case 3:_dcc =_fce (_bcb ,_dcb ,_eged ,_aae ,_dca );
case 4:_dcc =_eed (_bcb ,_dcb ,_eged ,_aae ,_dca );};if _dcc !=nil {return nil ,_dcc ;};return _dcb ,nil ;};func (_bda *Bitmap )clipRectangle (_fcg ,_ccb *_dac .Rectangle )(_eeg *Bitmap ,_dgd error ){const _geb ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if _fcg ==nil {return nil ,_c .Error (_geb ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_aff ,_bcd :=_bda .Width ,_bda .Height ;_fdab ,_dgd :=ClipBoxToRectangle (_fcg ,_aff ,_bcd );if _dgd !=nil {_g .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",_dgd );
return nil ,nil ;};_ccdd ,_dbe :=_fdab .Min .X ,_fdab .Min .Y ;_badb ,_ggcb :=_fdab .Max .X -_fdab .Min .X ,_fdab .Max .Y -_fdab .Min .Y ;_eeg =New (_badb ,_ggcb );_eeg .Text =_bda .Text ;if _dgd =_eeg .RasterOperation (0,0,_badb ,_ggcb ,PixSrc ,_bda ,_ccdd ,_dbe );
_dgd !=nil {return nil ,_c .Wrap (_dgd ,_geb ,"");};if _ccb !=nil {*_ccb =*_fdab ;};return _eeg ,nil ;};func TstImageBitmapData ()[]byte {return _dega .Data };func (_dffc *byHeight )Swap (i ,j int ){_dffc .Values [i ],_dffc .Values [j ]=_dffc .Values [j ],_dffc .Values [i ];
if _dffc .Boxes !=nil {_dffc .Boxes [i ],_dffc .Boxes [j ]=_dffc .Boxes [j ],_dffc .Boxes [i ];};};func TstGetScaledSymbol (t *_b .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_cfabe ,_bgea :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });
_da .NoError (t ,_bgea );return _cfabe ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_eaef bool ,_fdde error ){const _bbag ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_agafa ,_abff :=p1 .Width ,p1 .Height ;_aee ,_eecab :=p3 .Width ,p3 .Height ;if _ba .Abs (_agafa -_aee )> maxDiffW {return false ,nil ;};if _ba .Abs (_abff -_eecab )> maxDiffH {return false ,nil ;};_egda :=int (float32 (area1 )*(1.0-rank )+0.5);_cfeb :=int (float32 (area3 )*(1.0-rank )+0.5);
var _bgded ,_aada int ;if delX >=0{_bgded =int (delX +0.5);}else {_bgded =int (delX -0.5);};if delY >=0{_aada =int (delY +0.5);}else {_aada =int (delY -0.5);};_gffb :=p1 .CreateTemplate ();if _fdde =_gffb .RasterOperation (0,0,_agafa ,_abff ,PixSrc ,p1 ,0,0);
_fdde !=nil {return false ,_c .Wrap (_fdde ,_bbag ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _fdde =_gffb .RasterOperation (_bgded ,_aada ,_agafa ,_abff ,PixNotSrcAndDst ,p4 ,0,0);_fdde !=nil {return false ,_c .Wrap (_fdde ,_bbag ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_eaef ,_fdde =_gffb .ThresholdPixelSum (_egda ,tab8 );if _fdde !=nil {return false ,_c .Wrap (_fdde ,_bbag ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _eaef {return false ,nil ;};if _fdde =_gffb .RasterOperation (_bgded ,_aada ,_aee ,_eecab ,PixSrc ,p3 ,0,0);
_fdde !=nil {return false ,_c .Wrap (_fdde ,_bbag ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _fdde =_gffb .RasterOperation (0,0,_aee ,_eecab ,PixNotSrcAndDst ,p2 ,0,0);_fdde !=nil {return false ,_c .Wrap (_fdde ,_bbag ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_eaef ,_fdde =_gffb .ThresholdPixelSum (_cfeb ,tab8 );if _fdde !=nil {return false ,_c .Wrap (_fdde ,_bbag ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_eaef ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;
SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func _ecba (_cegbb *Bitmap ,_gaaf ,_gecc ,_eeed ,_cfb int ,_gdde RasterOperator ,_cefd *Bitmap ,_bafbf ,_ggfgb int )error {var (_acfaa bool ;_dggd bool ;_cdgg byte ;_edae int ;_bbfe int ;_afae int ;_ddea int ;
_bcfdf bool ;_efgf int ;_eeac int ;_gfeg int ;_defde bool ;_cffd byte ;_gffg int ;_bfdg int ;_fced int ;_cged byte ;_cggb int ;_caeg int ;_gfad uint ;_fdcb uint ;_eebg byte ;_fada shift ;_agece bool ;_baaa bool ;_gaad ,_aagb int ;);if _bafbf &7!=0{_caeg =8-(_bafbf &7);
};if _gaaf &7!=0{_bbfe =8-(_gaaf &7);};if _caeg ==0&&_bbfe ==0{_eebg =_dbfgd [0];}else {if _bbfe > _caeg {_gfad =uint (_bbfe -_caeg );}else {_gfad =uint (8-(_caeg -_bbfe ));};_fdcb =8-_gfad ;_eebg =_dbfgd [_gfad ];};if (_gaaf &7)!=0{_acfaa =true ;_edae =8-(_gaaf &7);
_cdgg =_dbfgd [_edae ];_afae =_cegbb .RowStride *_gecc +(_gaaf >>3);_ddea =_cefd .RowStride *_ggfgb +(_bafbf >>3);_cggb =8-(_bafbf &7);if _edae > _cggb {_fada =_bdae ;if _eeed >=_caeg {_agece =true ;};}else {_fada =_bged ;};};if _eeed < _edae {_dggd =true ;
_cdgg &=_ffcef [8-_edae +_eeed ];};if !_dggd {_efgf =(_eeed -_edae )>>3;if _efgf !=0{_bcfdf =true ;_eeac =_cegbb .RowStride *_gecc +((_gaaf +_bbfe )>>3);_gfeg =_cefd .RowStride *_ggfgb +((_bafbf +_bbfe )>>3);};};_gffg =(_gaaf +_eeed )&7;if !(_dggd ||_gffg ==0){_defde =true ;
_cffd =_ffcef [_gffg ];_bfdg =_cegbb .RowStride *_gecc +((_gaaf +_bbfe )>>3)+_efgf ;_fced =_cefd .RowStride *_ggfgb +((_bafbf +_bbfe )>>3)+_efgf ;if _gffg > int (_fdcb ){_baaa =true ;};};switch _gdde {case PixSrc :if _acfaa {for _gaad =0;_gaad < _cfb ;
_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],_cged ,_cdgg );_afae +=_cegbb .RowStride ;
_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]=_cged ;};_eeac +=_cegbb .RowStride ;
_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],_cged ,_cffd );
_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;};};case PixNotSrc :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;
};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],^_cged ,_cdgg );_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );
_cegbb .Data [_eeac +_aagb ]=^_cged ;};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};
_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],^_cged ,_cffd );_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;};};case PixSrcOrDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );
};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],_cged |_cegbb .Data [_afae ],_cdgg );_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;
_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]|=_cged ;};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;
_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],_cged |_cegbb .Data [_bfdg ],_cffd );_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;
};};case PixSrcAndDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],_cged &_cegbb .Data [_afae ],_cdgg );
_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]&=_cged ;
};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],_cged &_cegbb .Data [_bfdg ],_cffd );
_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;};};case PixSrcXorDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;
};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],_cged ^_cegbb .Data [_afae ],_cdgg );_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );
_cegbb .Data [_eeac +_aagb ]^=_cged ;};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};
_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],_cged ^_cegbb .Data [_bfdg ],_cffd );_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;};};case PixNotSrcOrDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;
if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],^_cged |_cegbb .Data [_afae ],_cdgg );_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;
};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]|=^_cged ;};_eeac +=_cegbb .RowStride ;
_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],^_cged |_cegbb .Data [_bfdg ],_cffd );
_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;};};case PixNotSrcAndDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );
};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],^_cged &_cegbb .Data [_afae ],_cdgg );_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;
_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]&=^_cged ;};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;
_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],^_cged &_cegbb .Data [_bfdg ],_cffd );_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;
};};case PixSrcOrNotDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],_cged |^_cegbb .Data [_afae ],_cdgg );
_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]=_cged |^_cegbb .Data [_eeac +_aagb ];
};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],_cged |^_cegbb .Data [_bfdg ],_cffd );
_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;};};case PixSrcAndNotDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );
};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],_cged &^_cegbb .Data [_afae ],_cdgg );_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;
_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]=_cged &^_cegbb .Data [_eeac +_aagb ];};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;
_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],_cged &^_cegbb .Data [_bfdg ],_cffd );_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;
};};case PixNotPixSrcOrDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],^(_cged |_cegbb .Data [_afae ]),_cdgg );
_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]=^(_cged |_cegbb .Data [_eeac +_aagb ]);
};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],^(_cged |_cegbb .Data [_bfdg ]),_cffd );
_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;};};case PixNotPixSrcAndDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );
};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],^(_cged &_cegbb .Data [_afae ]),_cdgg );_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;
_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]=^(_cged &_cegbb .Data [_eeac +_aagb ]);};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;
_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],^(_cged &_cegbb .Data [_bfdg ]),_cffd );_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;
};};case PixNotPixSrcXorDst :if _acfaa {for _gaad =0;_gaad < _cfb ;_gaad ++{if _fada ==_bdae {_cged =_cefd .Data [_ddea ]<<_gfad ;if _agece {_cged =_gdcbd (_cged ,_cefd .Data [_ddea +1]>>_fdcb ,_eebg );};}else {_cged =_cefd .Data [_ddea ]>>_fdcb ;};_cegbb .Data [_afae ]=_gdcbd (_cegbb .Data [_afae ],^(_cged ^_cegbb .Data [_afae ]),_cdgg );
_afae +=_cegbb .RowStride ;_ddea +=_cefd .RowStride ;};};if _bcfdf {for _gaad =0;_gaad < _cfb ;_gaad ++{for _aagb =0;_aagb < _efgf ;_aagb ++{_cged =_gdcbd (_cefd .Data [_gfeg +_aagb ]<<_gfad ,_cefd .Data [_gfeg +_aagb +1]>>_fdcb ,_eebg );_cegbb .Data [_eeac +_aagb ]=^(_cged ^_cegbb .Data [_eeac +_aagb ]);
};_eeac +=_cegbb .RowStride ;_gfeg +=_cefd .RowStride ;};};if _defde {for _gaad =0;_gaad < _cfb ;_gaad ++{_cged =_cefd .Data [_fced ]<<_gfad ;if _baaa {_cged =_gdcbd (_cged ,_cefd .Data [_fced +1]>>_fdcb ,_eebg );};_cegbb .Data [_bfdg ]=_gdcbd (_cegbb .Data [_bfdg ],^(_cged ^_cegbb .Data [_bfdg ]),_cffd );
_bfdg +=_cegbb .RowStride ;_fced +=_cefd .RowStride ;};};default:_g .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",_gdde );return _c .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064");
};return nil ;};func (_bfaea *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _fdcef ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _bfaea ==nil {return nil ,_c .Error (_fdcef ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if s ==nil {return nil ,_c .Error (_fdcef ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_efea :=len (_bfaea .Values );_cfcg :=&Bitmaps {Values :make ([]*Bitmap ,_efea ),Boxes :make ([]*_dac .Rectangle ,_efea )};
var (_cecb ,_ebad *Bitmap ;_fdgb *_dac .Rectangle ;_efgce error ;);for _bfcff :=0;_bfcff < _efea ;_bfcff ++{if _cecb ,_efgce =_bfaea .GetBitmap (_bfcff );_efgce !=nil {return nil ,_c .Wrap (_efgce ,_fdcef ,"");};if _fdgb ,_efgce =_bfaea .GetBox (_bfcff );
_efgce !=nil {return nil ,_c .Wrap (_efgce ,_fdcef ,"");};if _ebad ,_efgce =s .clipRectangle (_fdgb ,nil );_efgce !=nil {return nil ,_c .Wrap (_efgce ,_fdcef ,"");};if _ebad ,_efgce =_ebad .And (_cecb );_efgce !=nil {return nil ,_c .Wrap (_efgce ,_fdcef ,"");
};_cfcg .Values [_bfcff ]=_ebad ;_cfcg .Boxes [_bfcff ]=_fdgb ;};return _cfcg ,nil ;};func TstAddSymbol (t *_b .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_aebg :=_dac .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_aebg );
*x +=sym .Width +space ;};type RasterOperator int ;type Getter interface{GetBitmap ()*Bitmap ;};func (_bddc *Boxes )Get (i int )(*_dac .Rectangle ,error ){const _gebg ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _bddc ==nil {return nil ,_c .Error (_gebg ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if i > len (*_bddc )-1{return nil ,_c .Errorf (_gebg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_bddc )[i ],nil ;};func (_cabc *Bitmap )setTwoBytes (_bgd int ,_caf uint16 )error {if _bgd +1> len (_cabc .Data )-1{return _c .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_bgd );
};_cabc .Data [_bgd ]=byte ((_caf &0xff00)>>8);_cabc .Data [_bgd +1]=byte (_caf &0xff);return nil ;};var _ _a .Interface =&ClassedPoints {};func (_egcda *Bitmap )countPixels ()int {var (_abd int ;_ecf uint8 ;_ebd byte ;_cgcd int ;);_fagb :=_egcda .RowStride ;
_dgb :=uint (_egcda .Width &0x07);if _dgb !=0{_ecf =uint8 ((0xff<<(8-_dgb ))&0xff);_fagb --;};for _gbee :=0;_gbee < _egcda .Height ;_gbee ++{for _cgcd =0;_cgcd < _fagb ;_cgcd ++{_ebd =_egcda .Data [_gbee *_egcda .RowStride +_cgcd ];_abd +=int (_aaef [_ebd ]);
};if _dgb !=0{_abd +=int (_aaef [_egcda .Data [_gbee *_egcda .RowStride +_cgcd ]&_ecf ]);};};return _abd ;};type Point struct{X ,Y float32 ;};func (_gdedb *byWidth )Swap (i ,j int ){_gdedb .Values [i ],_gdedb .Values [j ]=_gdedb .Values [j ],_gdedb .Values [i ];
if _gdedb .Boxes !=nil {_gdedb .Boxes [i ],_gdedb .Boxes [j ]=_gdedb .Boxes [j ],_gdedb .Boxes [i ];};};func _ffcfc (_eaeae *Bitmap ,_cdae *Bitmap ,_gfdc int )(_faee error ){const _agdg ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
_fddb :=_bcgf (_eaeae .Height ,_cdae .Height );_dfab :=_bcgf (_eaeae .RowStride ,_cdae .RowStride );switch _gfdc {case 4:_faee =_edda (_eaeae ,_cdae ,_fddb ,_dfab );case 8:_faee =_edecg (_eaeae ,_cdae ,_fddb ,_dfab );default:return _c .Errorf (_agdg ,"\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",_gfdc );
};if _faee !=nil {return _c .Wrap (_faee ,_agdg ,"");};return nil ;};func (_efac CombinationOperator )String ()string {var _dcbe string ;switch _efac {case CmbOpOr :_dcbe ="\u004f\u0052";case CmbOpAnd :_dcbe ="\u0041\u004e\u0044";case CmbOpXor :_dcbe ="\u0058\u004f\u0052";
case CmbOpXNor :_dcbe ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_dcbe ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_dcbe ="\u004e\u004f\u0054";};return _dcbe ;};func _cdab (_afdb ,_gagg *Bitmap ,_gfdg *Selection )(*Bitmap ,error ){const _eaafg ="\u006f\u0070\u0065\u006e";
var _ddd error ;_afdb ,_ddd =_aaff (_afdb ,_gagg ,_gfdg );if _ddd !=nil {return nil ,_c .Wrap (_ddd ,_eaafg ,"");};_debfd ,_ddd :=_feagc (nil ,_gagg ,_gfdg );if _ddd !=nil {return nil ,_c .Wrap (_ddd ,_eaafg ,"");};_ ,_ddd =_gcad (_afdb ,_debfd ,_gfdg );
if _ddd !=nil {return nil ,_c .Wrap (_ddd ,_eaafg ,"");};return _afdb ,nil ;};type BoundaryCondition int ;func (_ebf *Bitmap )inverseData (){if _gfde :=_ebf .RasterOperation (0,0,_ebf .Width ,_ebf .Height ,PixNotDst ,nil ,0,0);_gfde !=nil {_g .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_gfde );
};if _ebf .Color ==Chocolate {_ebf .Color =Vanilla ;}else {_ebf .Color =Chocolate ;};};func (_gfbfc Points )GetGeometry (i int )(_fcbb ,_aecfe float32 ,_gagc error ){if i > len (_gfbfc )-1{return 0,0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};_fdgd :=_gfbfc [i ];return _fdgd .X ,_fdgd .Y ,nil ;};func _aegd (_egee ,_edec *Bitmap ,_caaef *Selection )(*Bitmap ,error ){const _ebcc ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _begc error ;if _egee ,_begc =_aaff (_egee ,_edec ,_caaef );
_begc !=nil {return nil ,_begc ;};_dgge ,_begc :=_gcad (nil ,_edec ,_caaef );if _begc !=nil {return nil ,_c .Wrap (_begc ,_ebcc ,"");};if _ ,_begc =_feagc (_egee ,_dgge ,_caaef );_begc !=nil {return nil ,_c .Wrap (_begc ,_ebcc ,"");};return _egee ,nil ;
};type SizeComparison int ;func _edecg (_gacf ,_gade *Bitmap ,_aeaf ,_eaeg int )(_ccee error ){const _bacag ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_cdef ,_ggeb ,_gbbg ,_agdb int ;_ceefd ,_aggba ,_cacc ,_ggfgg ,_acb ,_cfae ,_ccbc ,_gbeb byte ;
);for _cdef =0;_cdef < _aeaf ;_cdef ++{_gbbg =_cdef *_gacf .RowStride ;_agdb =_cdef *_gade .RowStride ;for _ggeb =0;_ggeb < _eaeg ;_ggeb ++{if _ceefd ,_ccee =_gacf .GetByte (_gbbg +_ggeb );_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _aggba ,_ccee =_gade .GetByte (_agdb +_ggeb );_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _cdef > 0{if _cacc ,_ccee =_gacf .GetByte (_gbbg -_gacf .RowStride +_ggeb );
_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_ceefd |=_cacc |(_cacc <<1)|(_cacc >>1);if _ggeb > 0{if _gbeb ,_ccee =_gacf .GetByte (_gbbg -_gacf .RowStride +_ggeb -1);_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
};_ceefd |=_gbeb <<7;};if _ggeb < _eaeg -1{if _gbeb ,_ccee =_gacf .GetByte (_gbbg -_gacf .RowStride +_ggeb +1);_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_ceefd |=_gbeb >>7;
};};if _ggeb > 0{if _ggfgg ,_ccee =_gacf .GetByte (_gbbg +_ggeb -1);_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u006a\u0020\u003e \u0030");};_ceefd |=_ggfgg <<7;};_ceefd &=_aggba ;if _ceefd ==0||^_ceefd ==0{if _ccee =_gacf .SetByte (_gbbg +_ggeb ,_ceefd );
_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_ccbc =_ceefd ;_ceefd =(_ceefd |(_ceefd >>1)|(_ceefd <<1))&_aggba ;if (_ceefd ^_ccbc )==0{if _ccee =_gacf .SetByte (_gbbg +_ggeb ,_ceefd );
_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _cdef =_aeaf -1;_cdef >=0;_cdef --{_gbbg =_cdef *_gacf .RowStride ;_agdb =_cdef *_gade .RowStride ;
for _ggeb =_eaeg -1;_ggeb >=0;_ggeb --{if _ceefd ,_ccee =_gacf .GetByte (_gbbg +_ggeb );_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _aggba ,_ccee =_gade .GetByte (_agdb +_ggeb );_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cdef < _aeaf -1{if _acb ,_ccee =_gacf .GetByte (_gbbg +_gacf .RowStride +_ggeb );
_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_ceefd |=_acb |(_acb <<1)|_acb >>1;if _ggeb > 0{if _gbeb ,_ccee =_gacf .GetByte (_gbbg +_gacf .RowStride +_ggeb -1);
_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\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");};_ceefd |=_gbeb <<7;};if _ggeb < _eaeg -1{if _gbeb ,_ccee =_gacf .GetByte (_gbbg +_gacf .RowStride +_ggeb +1);
_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\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");
};_ceefd |=_gbeb >>7;};};if _ggeb < _eaeg -1{if _cfae ,_ccee =_gacf .GetByte (_gbbg +_ggeb +1);_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\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");
};_ceefd |=_cfae >>7;};_ceefd &=_aggba ;if _ceefd ==0||(^_ceefd )==0{if _ccee =_gacf .SetByte (_gbbg +_ggeb ,_ceefd );_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_ccbc =_ceefd ;
_ceefd =(_ceefd |(_ceefd >>1)|(_ceefd <<1))&_aggba ;if (_ceefd ^_ccbc )==0{if _ccee =_gacf .SetByte (_gbbg +_ggeb ,_ceefd );_ccee !=nil {return _c .Wrap (_ccee ,_bacag ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func (_cbbef *ClassedPoints )SortByX (){_cbbef ._gedbd =_cbbef .xSortFunction ();_a .Sort (_cbbef )};type MorphOperation int ;func (_fegf *Bitmap )GetChocolateData ()[]byte {if _fegf .Color ==Vanilla {_fegf .inverseData ();
};return _fegf .Data ;};func _bbg (_cdac int )int {if _cdac < 0{return -_cdac ;};return _cdac ;};func _gedb (_gaef ...MorphProcess )(_fca error ){const _abfb ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";
var _agaa ,_bbdg int ;for _gfefd ,_cdced :=range _gaef {if _fca =_cdced .verify (_gfefd ,&_agaa ,&_bbdg );_fca !=nil {return _c .Wrap (_fca ,_abfb ,"");};};if _bbdg !=0&&_agaa !=0{return _c .Error (_abfb ,"\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 MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _cdag (src ,sequence ...);};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _gcad (d ,s ,sel )};func (_gcfa *Bitmap )equivalent (_cdbf *Bitmap )bool {if _gcfa ==_cdbf {return true ;
};if !_gcfa .SizesEqual (_cdbf ){return false ;};_fgbg :=_bbcb (_gcfa ,_cdbf ,CmbOpXor );_cbf :=_gcfa .countPixels ();_dfd :=int (0.25*float32 (_cbf ));if _fgbg .thresholdPixelSum (_dfd ){return false ;};var (_ffce [9][9]int ;_abcf [18][9]int ;_eaaf [9][18]int ;
_eaee int ;_aed int ;);_ceda :=9;_ffdc :=_gcfa .Height /_ceda ;_efbc :=_gcfa .Width /_ceda ;_afad ,_ggge :=_ffdc /2,_efbc /2;if _ffdc < _efbc {_afad =_efbc /2;_ggge =_ffdc /2;};_afga :=float64 (_afad )*float64 (_ggge )*_f .Pi ;_dgcc :=int (float64 (_ffdc *_efbc /2)*0.9);
_adae :=int (float64 (_efbc *_ffdc /2)*0.9);for _abb :=0;_abb < _ceda ;_abb ++{_abda :=_efbc *_abb +_eaee ;var _deab int ;if _abb ==_ceda -1{_eaee =0;_deab =_gcfa .Width ;}else {_deab =_abda +_efbc ;if ((_gcfa .Width -_eaee )%_ceda )> 0{_eaee ++;_deab ++;
};};for _bfcf :=0;_bfcf < _ceda ;_bfcf ++{_bdd :=_ffdc *_bfcf +_aed ;var _gaea int ;if _bfcf ==_ceda -1{_aed =0;_gaea =_gcfa .Height ;}else {_gaea =_bdd +_ffdc ;if (_gcfa .Height -_aed )%_ceda > 0{_aed ++;_gaea ++;};};var _gff ,_gddc ,_dcdb ,_eba int ;
_cbbg :=(_abda +_deab )/2;_gga :=(_bdd +_gaea )/2;for _efd :=_abda ;_efd < _deab ;_efd ++{for _faac :=_bdd ;_faac < _gaea ;_faac ++{if _fgbg .GetPixel (_efd ,_faac ){if _efd < _cbbg {_gff ++;}else {_gddc ++;};if _faac < _gga {_eba ++;}else {_dcdb ++;};
};};};_ffce [_abb ][_bfcf ]=_gff +_gddc ;_abcf [_abb *2][_bfcf ]=_gff ;_abcf [_abb *2+1][_bfcf ]=_gddc ;_eaaf [_abb ][_bfcf *2]=_eba ;_eaaf [_abb ][_bfcf *2+1]=_dcdb ;};};for _deba :=0;_deba < _ceda *2-1;_deba ++{for _fdc :=0;_fdc < (_ceda -1);_fdc ++{var _aea int ;
for _gcfgb :=0;_gcfgb < 2;_gcfgb ++{for _gee :=0;_gee < 2;_gee ++{_aea +=_abcf [_deba +_gcfgb ][_fdc +_gee ];};};if _aea > _adae {return false ;};};};for _ggfg :=0;_ggfg < (_ceda -1);_ggfg ++{for _daaac :=0;_daaac < ((_ceda *2)-1);_daaac ++{var _cfeg int ;
for _aabe :=0;_aabe < 2;_aabe ++{for _feed :=0;_feed < 2;_feed ++{_cfeg +=_eaaf [_ggfg +_aabe ][_daaac +_feed ];};};if _cfeg > _dgcc {return false ;};};};for _bcgb :=0;_bcgb < (_ceda -2);_bcgb ++{for _debe :=0;_debe < (_ceda -2);_debe ++{var _cag ,_afd int ;
for _dce :=0;_dce < 3;_dce ++{for _ecg :=0;_ecg < 3;_ecg ++{if _dce ==_ecg {_cag +=_ffce [_bcgb +_dce ][_debe +_ecg ];};if (2-_dce )==_ecg {_afd +=_ffce [_bcgb +_dce ][_debe +_ecg ];};};};if _cag > _adae ||_afd > _adae {return false ;};};};for _bfg :=0;
_bfg < (_ceda -1);_bfg ++{for _cfg :=0;_cfg < (_ceda -1);_cfg ++{var _gbb int ;for _dafc :=0;_dafc < 2;_dafc ++{for _eec :=0;_eec < 2;_eec ++{_gbb +=_ffce [_bfg +_dafc ][_cfg +_eec ];};};if float64 (_gbb )> _afga {return false ;};};};return true ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _bgcb (oldByte ,newByte ,op );
};func _ccbce (_cgfga *Bitmap ,_beceg *_ba .Stack ,_cafa ,_aebd int )(_aabb *_dac .Rectangle ,_bggg error ){const _ggag ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _cgfga ==nil {return nil ,_c .Error (_ggag ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _beceg ==nil {return nil ,_c .Error (_ggag ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_bbef ,_ddcg :=_cgfga .Width ,_cgfga .Height ;_dedgd :=_bbef -1;_fegcg :=_ddcg -1;if _cafa < 0||_cafa > _dedgd ||_aebd < 0||_aebd > _fegcg ||!_cgfga .GetPixel (_cafa ,_aebd ){return nil ,nil ;
};var _aeadb *_dac .Rectangle ;_aeadb ,_bggg =Rect (100000,100000,0,0);if _bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"");};if _bggg =_egead (_beceg ,_cafa ,_cafa ,_aebd ,1,_fegcg ,_aeadb );_bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _bggg =_egead (_beceg ,_cafa ,_cafa ,_aebd +1,-1,_fegcg ,_aeadb );_bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_aeadb .Min .X ,_aeadb .Max .X =_cafa ,_cafa ;
_aeadb .Min .Y ,_aeadb .Max .Y =_aebd ,_aebd ;var (_bcaf *fillSegment ;_fdbe int ;);for _beceg .Len ()> 0{if _bcaf ,_bggg =_ddba (_beceg );_bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"");};_aebd =_bcaf ._bfbag ;for _cafa =_bcaf ._fbadf ;_cafa >=0&&_cgfga .GetPixel (_cafa ,_aebd );
_cafa --{if _bggg =_cgfga .SetPixel (_cafa ,_aebd ,0);_bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"");};};if _cafa >=_bcaf ._fbadf {for _cafa ++;_cafa <=_bcaf ._gccd &&_cafa <=_dedgd &&!_cgfga .GetPixel (_cafa ,_aebd );_cafa ++{};_fdbe =_cafa ;if !(_cafa <=_bcaf ._gccd &&_cafa <=_dedgd ){continue ;
};}else {_fdbe =_cafa +1;if _fdbe < _bcaf ._fbadf -1{if _bggg =_egead (_beceg ,_fdbe ,_bcaf ._fbadf -1,_bcaf ._bfbag ,-_bcaf ._fgefg ,_fegcg ,_aeadb );_bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_cafa =_bcaf ._fbadf +1;};for {for ;_cafa <=_dedgd &&_cgfga .GetPixel (_cafa ,_aebd );_cafa ++{if _bggg =_cgfga .SetPixel (_cafa ,_aebd ,0);_bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bggg =_egead (_beceg ,_fdbe ,_cafa -1,_bcaf ._bfbag ,_bcaf ._fgefg ,_fegcg ,_aeadb );
_bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cafa > _bcaf ._gccd +1{if _bggg =_egead (_beceg ,_bcaf ._gccd +1,_cafa -1,_bcaf ._bfbag ,-_bcaf ._fgefg ,_fegcg ,_aeadb );_bggg !=nil {return nil ,_c .Wrap (_bggg ,_ggag ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _cafa ++;_cafa <=_bcaf ._gccd &&_cafa <=_dedgd &&!_cgfga .GetPixel (_cafa ,_aebd );_cafa ++{};_fdbe =_cafa ;if !(_cafa <=_bcaf ._gccd &&_cafa <=_dedgd ){break ;};};};_aeadb .Max .X ++;_aeadb .Max .Y ++;return _aeadb ,nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gbdb (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func (_fbfg *Bitmaps )CountPixels ()*_ba .NumSlice {_daae :=&_ba .NumSlice {};for _ ,_aadbg :=range _fbfg .Values {_daae .AddInt (_aadbg .CountPixels ());};return _daae ;};type Points []Point ;func (_cffb *Points )Add (pt *Points )error {const _bbafe ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";
if _cffb ==nil {return _c .Error (_bbafe ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _c .Error (_bbafe ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};*_cffb =append (*_cffb ,*pt ...);return nil ;};func _gbgae (_ffgge *Bitmap ,_ffgc *_ba .Stack ,_cec ,_ggea ,_dbgg int )(_eega *_dac .Rectangle ,_abcaf error ){const _baeb ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _ffgge ==nil {return nil ,_c .Error (_baeb ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ffgc ==nil {return nil ,_c .Error (_baeb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};switch _dbgg {case 4:if _eega ,_abcaf =_ccbce (_ffgge ,_ffgc ,_cec ,_ggea );_abcaf !=nil {return nil ,_c .Wrap (_abcaf ,_baeb ,"");};return _eega ,nil ;case 8:if _eega ,_abcaf =_cfffe (_ffgge ,_ffgc ,_cec ,_ggea );_abcaf !=nil {return nil ,_c .Wrap (_abcaf ,_baeb ,"");
};return _eega ,nil ;default:return nil ,_c .Errorf (_baeb ,"\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",_dbgg );
};};func _ae ()(_cgcc [256]uint16 ){for _fff :=0;_fff < 256;_fff ++{if _fff &0x01!=0{_cgcc [_fff ]|=0x3;};if _fff &0x02!=0{_cgcc [_fff ]|=0xc;};if _fff &0x04!=0{_cgcc [_fff ]|=0x30;};if _fff &0x08!=0{_cgcc [_fff ]|=0xc0;};if _fff &0x10!=0{_cgcc [_fff ]|=0x300;
};if _fff &0x20!=0{_cgcc [_fff ]|=0xc00;};if _fff &0x40!=0{_cgcc [_fff ]|=0x3000;};if _fff &0x80!=0{_cgcc [_fff ]|=0xc000;};};return _cgcc ;};func (_gggd *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _cbfa ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";
if _gggd ==nil {return nil ,_c .Error (_cbfa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_gggd .Values )-1{return nil ,_c .Errorf (_cbfa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _gggd .Values [i ],nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_dac .Rectangle ;};func TstWordBitmap (t *_b .T ,scale ...int )*Bitmap {_faed :=1;if len (scale )> 0{_faed =scale [0];};_bcba :=3;_gfge :=9+7+15+2*_bcba ;_aeab :=5+_bcba +5;
_cdcgf :=New (_gfge *_faed ,_aeab *_faed );_ccde :=&Bitmaps {};var _feaf *int ;_bcba *=_faed ;_cgae :=0;_feaf =&_cgae ;_bacd :=0;_dabae :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );_dabae =TstOSymbol (t ,scale ...);
TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,_bcba );_dabae =TstISymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );_dabae =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,_bcba );_dabae =TstNSymbol (t ,scale ...);
TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );_dabae =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );_dabae =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,0);*_feaf =0;_bacd =5*_faed +_bcba ;
_dabae =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );_dabae =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,_bcba );_dabae =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );
_dabae =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );_dabae =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );_dabae =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,1*_faed );
_dabae =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ccde ,_dabae ,_feaf ,_bacd ,0);TstWriteSymbols (t ,_ccde ,_cdcgf );return _cdcgf ;};func (_bbgc *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _efgc ="\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 >=_bbgc .IntSlice .Size (){return 0,_c .Errorf (_efgc ,"\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 (_bbgc .YAtIndex (i )),nil ;};const (Vanilla Color =iota ;Chocolate ;);func TstWriteSymbols (t *_b .T ,bms *Bitmaps ,src *Bitmap ){for _dgbf :=0;_dgbf < bms .Size ();_dgbf ++{_edcb :=bms .Values [_dgbf ];_gdebe :=bms .Boxes [_dgbf ];_eccf :=src .RasterOperation (_gdebe .Min .X ,_gdebe .Min .Y ,_edcb .Width ,_edcb .Height ,PixSrc ,_edcb ,0,0);
_da .NoError (t ,_eccf );};};func (_ddec *ClassedPoints )ySortFunction ()func (_eaaa int ,_cfcb int )bool {return func (_gbfce ,_gbge int )bool {return _ddec .YAtIndex (_gbfce )< _ddec .YAtIndex (_gbge )};};func _egead (_ggab *_ba .Stack ,_egde ,_afde ,_cdgf ,_dbec ,_dabgc int ,_bdgd *_dac .Rectangle )(_bgedb error ){const _dfdca ="\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 _ggab ==nil {return _c .Error (_dfdca ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _bdgd ==nil {return _c .Error (_dfdca ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_bdgd .Min .X =_ba .Min (_bdgd .Min .X ,_egde );_bdgd .Max .X =_ba .Max (_bdgd .Max .X ,_afde );_bdgd .Min .Y =_ba .Min (_bdgd .Min .Y ,_cdgf );_bdgd .Max .Y =_ba .Max (_bdgd .Max .Y ,_cdgf );if !(_cdgf +_dbec >=0&&_cdgf +_dbec <=_dabgc ){return nil ;
};if _ggab .Aux ==nil {return _c .Error (_dfdca ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _dagg *fillSegment ;_fffb ,_bgdge :=_ggab .Aux .Pop ();if _bgdge {if _dagg ,_bgdge =_fffb .(*fillSegment );
!_bgdge {return _c .Error (_dfdca ,"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 {_dagg =&fillSegment {};
};_dagg ._fbadf =_egde ;_dagg ._gccd =_afde ;_dagg ._bfbag =_cdgf ;_dagg ._fgefg =_dbec ;_ggab .Push (_dagg );return nil ;};func _bbbb ()[]int {_cgcdf :=make ([]int ,256);_cgcdf [0]=0;_cgcdf [1]=7;var _ecae int ;for _ecae =2;_ecae < 4;_ecae ++{_cgcdf [_ecae ]=_cgcdf [_ecae -2]+6;
};for _ecae =4;_ecae < 8;_ecae ++{_cgcdf [_ecae ]=_cgcdf [_ecae -4]+5;};for _ecae =8;_ecae < 16;_ecae ++{_cgcdf [_ecae ]=_cgcdf [_ecae -8]+4;};for _ecae =16;_ecae < 32;_ecae ++{_cgcdf [_ecae ]=_cgcdf [_ecae -16]+3;};for _ecae =32;_ecae < 64;_ecae ++{_cgcdf [_ecae ]=_cgcdf [_ecae -32]+2;
};for _ecae =64;_ecae < 128;_ecae ++{_cgcdf [_ecae ]=_cgcdf [_ecae -64]+1;};for _ecae =128;_ecae < 256;_ecae ++{_cgcdf [_ecae ]=_cgcdf [_ecae -128];};return _cgcdf ;};func _add (_edcd ,_deca int )*Bitmap {return &Bitmap {Width :_edcd ,Height :_deca ,RowStride :(_edcd +7)>>3};
};func _eed (_bffd ,_daf *Bitmap ,_deb int ,_gfe []byte ,_bbc int )(_gfc error ){const _dbae ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_abe ,_gfac ,_bbd ,_fde ,_cfa ,_abf ,_cdc ,_ddb int ;
_abeg ,_edcf uint32 ;_ggg ,_gcba byte ;_fbb uint16 ;);_bd :=make ([]byte ,4);_eb :=make ([]byte ,4);for _bbd =0;_bbd < _bffd .Height -1;_bbd ,_fde =_bbd +2,_fde +1{_abe =_bbd *_bffd .RowStride ;_gfac =_fde *_daf .RowStride ;for _cfa ,_abf =0,0;_cfa < _bbc ;
_cfa ,_abf =_cfa +4,_abf +1{for _cdc =0;_cdc < 4;_cdc ++{_ddb =_abe +_cfa +_cdc ;if _ddb <=len (_bffd .Data )-1&&_ddb < _abe +_bffd .RowStride {_bd [_cdc ]=_bffd .Data [_ddb ];}else {_bd [_cdc ]=0x00;};_ddb =_abe +_bffd .RowStride +_cfa +_cdc ;if _ddb <=len (_bffd .Data )-1&&_ddb < _abe +(2*_bffd .RowStride ){_eb [_cdc ]=_bffd .Data [_ddb ];
}else {_eb [_cdc ]=0x00;};};_abeg =_bc .BigEndian .Uint32 (_bd );_edcf =_bc .BigEndian .Uint32 (_eb );_edcf &=_abeg ;_edcf &=_edcf <<1;_edcf &=0xaaaaaaaa;_abeg =_edcf |(_edcf <<7);_ggg =byte (_abeg >>24);_gcba =byte ((_abeg >>8)&0xff);_ddb =_gfac +_abf ;
if _ddb +1==len (_daf .Data )-1||_ddb +1>=_gfac +_daf .RowStride {_daf .Data [_ddb ]=_gfe [_ggg ];if _gfc =_daf .SetByte (_ddb ,_gfe [_ggg ]);_gfc !=nil {return _c .Wrapf (_gfc ,_dbae ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_ddb );};}else {_fbb =(uint16 (_gfe [_ggg ])<<8)|uint16 (_gfe [_gcba ]);
if _gfc =_daf .setTwoBytes (_ddb ,_fbb );_gfc !=nil {return _c .Wrapf (_gfc ,_dbae ,"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",_ddb );
};_abf ++;};};};return nil ;};func (_cbc *Bitmap )ToImage ()_dac .Image {_fcdd ,_begg :=_be .NewImage (_cbc .Width ,_cbc .Height ,1,1,_cbc .Data ,nil ,nil );if _begg !=nil {_g .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",_begg );
};return _fcdd ;};func (_ddgf *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gbdb (_ddgf ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _geadg (_fbdg ,_gffbe *Bitmap ,_efad ,_ccgc int )(*Bitmap ,error ){const _fdfa ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
if _gffbe ==nil {return nil ,_c .Error (_fdfa ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _efad < 1||_ccgc < 1{return nil ,_c .Error (_fdfa ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _efad ==1&&_ccgc ==1{return _bcf (_fbdg ,_gffbe );};if MorphBC ==SymmetricMorphBC {_eadff ,_cgfd :=_eede (_fbdg ,_gffbe ,_efad ,_ccgc );if _cgfd !=nil {return nil ,_c .Wrap (_cgfd ,_fdfa ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
};return _eadff ,nil ;};_bdbe :=_cbag (_efad /2,_ccgc /2);_fgabg :=8*((_bdbe +7)/8);_bfef ,_gbfg :=_gffbe .AddBorder (_fgabg ,0);if _gbfg !=nil {return nil ,_c .Wrapf (_gbfg ,_fdfa ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_fgabg );
};var _bbcd ,_deff *Bitmap ;if _efad ==1||_ccgc ==1{_fbbf :=SelCreateBrick (_ccgc ,_efad ,_ccgc /2,_efad /2,SelHit );_bbcd ,_gbfg =_aegd (nil ,_bfef ,_fbbf );if _gbfg !=nil {return nil ,_c .Wrap (_gbfg ,_fdfa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};}else {_adce :=SelCreateBrick (1,_efad ,0,_efad /2,SelHit );_abbg ,_fdgc :=_gcad (nil ,_bfef ,_adce );if _fdgc !=nil {return nil ,_c .Wrap (_fdgc ,_fdfa ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
};_ecaa :=SelCreateBrick (_ccgc ,1,_ccgc /2,0,SelHit );_bbcd ,_fdgc =_gcad (nil ,_abbg ,_ecaa );if _fdgc !=nil {return nil ,_c .Wrap (_fdgc ,_fdfa ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ ,_fdgc =_feagc (_abbg ,_bbcd ,_adce );_fdgc !=nil {return nil ,_c .Wrap (_fdgc ,_fdfa ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_fdgc =_feagc (_bbcd ,_abbg ,_ecaa );_fdgc !=nil {return nil ,_c .Wrap (_fdgc ,_fdfa ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _deff ,_gbfg =_bbcd .RemoveBorder (_fgabg );_gbfg !=nil {return nil ,_c .Wrap (_gbfg ,_fdfa ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _fbdg ==nil {return _deff ,nil ;};if _ ,_gbfg =_bcf (_fbdg ,_deff );_gbfg !=nil {return nil ,_gbfg ;};return _fbdg ,nil ;
};func (_fbed *Bitmap )connComponentsBitmapsBB (_dfge *Bitmaps ,_dabg int )(_gacb *Boxes ,_ebdb error ){const _bbad ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _dabg !=4&&_dabg !=8{return nil ,_c .Error (_bbad ,"\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 _dfge ==nil {return nil ,_c .Error (_bbad ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_dfge .Values )> 0{return nil ,_c .Error (_bbad ,"\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 _fbed .Zero (){return &Boxes {},nil ;};var (_dbbdc ,_gdac ,_bdc ,_gbbf *Bitmap ;);_fbed .setPadBits (0);if _dbbdc ,_ebdb =_bcf (nil ,_fbed );_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"\u0062\u006d\u0031");};if _gdac ,_ebdb =_bcf (nil ,_fbed );
_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"\u0062\u006d\u0032");};_gba :=&_ba .Stack {};_gba .Aux =&_ba .Stack {};_gacb =&Boxes {};var (_gaee ,_efec int ;_dcdbg _dac .Point ;_ffga bool ;_cbba *_dac .Rectangle ;);for {if _dcdbg ,_ffga ,_ebdb =_dbbdc .nextOnPixel (_gaee ,_efec );
_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"");};if !_ffga {break ;};if _cbba ,_ebdb =_gbgae (_dbbdc ,_gba ,_dcdbg .X ,_dcdbg .Y ,_dabg );_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"");};if _ebdb =_gacb .Add (_cbba );_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"");
};if _bdc ,_ebdb =_dbbdc .clipRectangle (_cbba ,nil );_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"\u0062\u006d\u0033");};if _gbbf ,_ebdb =_gdac .clipRectangle (_cbba ,nil );_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"\u0062\u006d\u0034");};
if _ ,_ebdb =_cbcd (_bdc ,_bdc ,_gbbf );_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _ebdb =_gdac .RasterOperation (_cbba .Min .X ,_cbba .Min .Y ,_cbba .Dx (),_cbba .Dy (),PixSrcXorDst ,_bdc ,0,0);
_ebdb !=nil {return nil ,_c .Wrap (_ebdb ,_bbad ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_dfge .AddBitmap (_bdc );_gaee =_dcdbg .X ;_efec =_dcdbg .Y ;};_dfge .Boxes =*_gacb ;return _gacb ,nil ;};func _cbcd (_dgfbf ,_cead ,_bfebg *Bitmap )(*Bitmap ,error ){const _eea ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";
if _cead ==nil {return nil ,_c .Error (_eea ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bfebg ==nil {return nil ,_c .Error (_eea ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dgfbf ==_bfebg {return nil ,_c .Error (_eea ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");
};if !_cead .SizesEqual (_bfebg ){_g .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",_eea );
};var _gac error ;if _dgfbf ,_gac =_bcf (_dgfbf ,_cead );_gac !=nil {return nil ,_c .Wrap (_gac ,_eea ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _gac =_dgfbf .RasterOperation (0,0,_dgfbf .Width ,_dgfbf .Height ,PixSrcXorDst ,_bfebg ,0,0);
_gac !=nil {return nil ,_c .Wrap (_gac ,_eea ,"");};return _dgfbf ,nil ;};type LocationFilter int ;const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func TstVSymbol (t *_b .T ,scale ...int )*Bitmap {_cegcfe ,_accgb :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});
_da .NoError (t ,_accgb );return TstGetScaledSymbol (t ,_cegcfe ,scale ...);};func New (width ,height int )*Bitmap {_gafe :=_add (width ,height );_gafe .Data =make ([]byte ,height *_gafe .RowStride );return _gafe ;};const (ComponentConn Component =iota ;
ComponentCharacters ;ComponentWords ;);func (_gfbd *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_fedc bool ,_fgaf error ){const _agaf ="\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 =_debg ();};_fcf :=_gfbd .Width >>3;_addf :=_gfbd .Width &7;_cdcg :=byte (0xff<<uint (8-_addf ));var (_daff ,_acfa ,_cege ,_ada int ;_caa byte ;);for _daff =0;_daff < _gfbd .Height ;_daff ++{_cege =_gfbd .RowStride *_daff ;for _acfa =0;
_acfa < _fcf ;_acfa ++{_caa ,_fgaf =_gfbd .GetByte (_cege +_acfa );if _fgaf !=nil {return false ,_c .Wrap (_fgaf ,_agaf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_ada +=tab8 [_caa ];};if _addf !=0{_caa ,_fgaf =_gfbd .GetByte (_cege +_acfa );
if _fgaf !=nil {return false ,_c .Wrap (_fgaf ,_agaf ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_caa &=_cdcg ;_ada +=tab8 [_caa ];};if _ada > thresh {return true ,nil ;};};return _fedc ,nil ;};func (_gdddgd *Bitmaps )AddBitmap (bm *Bitmap ){_gdddgd .Values =append (_gdddgd .Values ,bm )};
func TstCSymbol (t *_b .T )*Bitmap {t .Helper ();_dbfe :=New (6,6);_da .NoError (t ,_dbfe .SetPixel (1,0,1));_da .NoError (t ,_dbfe .SetPixel (2,0,1));_da .NoError (t ,_dbfe .SetPixel (3,0,1));_da .NoError (t ,_dbfe .SetPixel (4,0,1));_da .NoError (t ,_dbfe .SetPixel (0,1,1));
_da .NoError (t ,_dbfe .SetPixel (5,1,1));_da .NoError (t ,_dbfe .SetPixel (0,2,1));_da .NoError (t ,_dbfe .SetPixel (0,3,1));_da .NoError (t ,_dbfe .SetPixel (0,4,1));_da .NoError (t ,_dbfe .SetPixel (5,4,1));_da .NoError (t ,_dbfe .SetPixel (1,5,1));
_da .NoError (t ,_dbfe .SetPixel (2,5,1));_da .NoError (t ,_dbfe .SetPixel (3,5,1));_da .NoError (t ,_dbfe .SetPixel (4,5,1));return _dbfe ;};func (_fcdb *BitmapsArray )AddBox (box *_dac .Rectangle ){_fcdb .Boxes =append (_fcdb .Boxes ,box )};type shift int ;
func _bgcb (_gdfd ,_aadfd byte ,_cgfc CombinationOperator )byte {switch _cgfc {case CmbOpOr :return _aadfd |_gdfd ;case CmbOpAnd :return _aadfd &_gdfd ;case CmbOpXor :return _aadfd ^_gdfd ;case CmbOpXNor :return ^(_aadfd ^_gdfd );case CmbOpNot :return ^(_aadfd );
default:return _aadfd ;};};func _aaff (_gec ,_agfc *Bitmap ,_caaa *Selection )(*Bitmap ,error ){const _cabcag ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _dgbc ,_bgfg int ;if _agfc ==nil {return nil ,_c .Error (_cabcag ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _caaa ==nil {return nil ,_c .Error (_cabcag ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_dgbc =_caaa .Width ;_bgfg =_caaa .Height ;if _dgbc ==0||_bgfg ==0{return nil ,_c .Error (_cabcag ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _gec ==nil {return _agfc .createTemplate (),nil ;};if _gbed :=_gec .resizeImageData (_agfc );_gbed !=nil {return nil ,_gbed ;};return _gec ,nil ;};func (_aaa *Bitmap )InverseData (){_aaa .inverseData ()};func (_ceggd *Bitmaps )SortByWidth (){_abgcd :=(*byWidth )(_ceggd );
_a .Sort (_abgcd )};func (_cafg *ClassedPoints )xSortFunction ()func (_baagb int ,_ebagb int )bool {return func (_aegb ,_dgdc int )bool {return _cafg .XAtIndex (_aegb )< _cafg .XAtIndex (_dgdc )};};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;
Data [][]SelectionValue ;};func (_aaad MorphProcess )getWidthHeight ()(_dgfg ,_cgfg int ){return _aaad .Arguments [0],_aaad .Arguments [1];};func Extract (roi _dac .Rectangle ,src *Bitmap )(*Bitmap ,error ){_bfbf :=New (roi .Dx (),roi .Dy ());_edcfd :=roi .Min .X &0x07;
_eaed :=8-_edcfd ;_gacg :=uint (8-_bfbf .Width &0x07);_dfg :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_gfef :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_cbbe :=_bfbf .RowStride ==_gfef +1-_dfg ;var _ebcd int ;for _ceaa :=roi .Min .Y ;_ceaa < roi .Max .Y ;
_ceaa ++{_aggd :=_dfg ;_aeg :=_ebcd ;switch {case _dfg ==_gfef :_fdea ,_fffa :=src .GetByte (_aggd );if _fffa !=nil {return nil ,_fffa ;};_fdea <<=uint (_edcfd );_fffa =_bfbf .SetByte (_aeg ,_edga (_gacg ,_fdea ));if _fffa !=nil {return nil ,_fffa ;};case _edcfd ==0:for _dfbe :=_dfg ;
_dfbe <=_gfef ;_dfbe ++{_gdfbe ,_feaa :=src .GetByte (_aggd );if _feaa !=nil {return nil ,_feaa ;};_aggd ++;if _dfbe ==_gfef &&_cbbe {_gdfbe =_edga (_gacg ,_gdfbe );};_feaa =_bfbf .SetByte (_aeg ,_gdfbe );if _feaa !=nil {return nil ,_feaa ;};_aeg ++;};
default:_ccef :=_agga (src ,_bfbf ,uint (_edcfd ),uint (_eaed ),_gacg ,_dfg ,_gfef ,_cbbe ,_aggd ,_aeg );if _ccef !=nil {return nil ,_ccef ;};};_dfg +=src .RowStride ;_gfef +=src .RowStride ;_ebcd +=_bfbf .RowStride ;};return _bfbf ,nil ;};func (_cfeee *Bitmaps )SortByHeight (){_abaf :=(*byHeight )(_cfeee );
_a .Sort (_abaf )};type SelectionValue int ;const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func _ggdg (_cgdaa *Bitmap ,_dbee ,_ddbe int ,_ecaf ,_efed int ,_dcbgb RasterOperator ){var (_bdf bool ;_abbf bool ;_egcc int ;_eaeba int ;_ffbe int ;
_edfe int ;_fgadd bool ;_feea byte ;);_ffed :=8-(_dbee &7);_dedg :=_dbfgd [_ffed ];_baad :=_cgdaa .RowStride *_ddbe +(_dbee >>3);if _ecaf < _ffed {_bdf =true ;_dedg &=_ffcef [8-_ffed +_ecaf ];};if !_bdf {_egcc =(_ecaf -_ffed )>>3;if _egcc !=0{_abbf =true ;
_eaeba =_baad +1;};};_ffbe =(_dbee +_ecaf )&7;if !(_bdf ||_ffbe ==0){_fgadd =true ;_feea =_ffcef [_ffbe ];_edfe =_baad +1+_egcc ;};var _cffba ,_bedf int ;switch _dcbgb {case PixClr :for _cffba =0;_cffba < _efed ;_cffba ++{_cgdaa .Data [_baad ]=_gdcbd (_cgdaa .Data [_baad ],0x0,_dedg );
_baad +=_cgdaa .RowStride ;};if _abbf {for _cffba =0;_cffba < _efed ;_cffba ++{for _bedf =0;_bedf < _egcc ;_bedf ++{_cgdaa .Data [_eaeba +_bedf ]=0x0;};_eaeba +=_cgdaa .RowStride ;};};if _fgadd {for _cffba =0;_cffba < _efed ;_cffba ++{_cgdaa .Data [_edfe ]=_gdcbd (_cgdaa .Data [_edfe ],0x0,_feea );
_edfe +=_cgdaa .RowStride ;};};case PixSet :for _cffba =0;_cffba < _efed ;_cffba ++{_cgdaa .Data [_baad ]=_gdcbd (_cgdaa .Data [_baad ],0xff,_dedg );_baad +=_cgdaa .RowStride ;};if _abbf {for _cffba =0;_cffba < _efed ;_cffba ++{for _bedf =0;_bedf < _egcc ;
_bedf ++{_cgdaa .Data [_eaeba +_bedf ]=0xff;};_eaeba +=_cgdaa .RowStride ;};};if _fgadd {for _cffba =0;_cffba < _efed ;_cffba ++{_cgdaa .Data [_edfe ]=_gdcbd (_cgdaa .Data [_edfe ],0xff,_feea );_edfe +=_cgdaa .RowStride ;};};case PixNotDst :for _cffba =0;
_cffba < _efed ;_cffba ++{_cgdaa .Data [_baad ]=_gdcbd (_cgdaa .Data [_baad ],^_cgdaa .Data [_baad ],_dedg );_baad +=_cgdaa .RowStride ;};if _abbf {for _cffba =0;_cffba < _efed ;_cffba ++{for _bedf =0;_bedf < _egcc ;_bedf ++{_cgdaa .Data [_eaeba +_bedf ]=^(_cgdaa .Data [_eaeba +_bedf ]);
};_eaeba +=_cgdaa .RowStride ;};};if _fgadd {for _cffba =0;_cffba < _efed ;_cffba ++{_cgdaa .Data [_edfe ]=_gdcbd (_cgdaa .Data [_edfe ],^_cgdaa .Data [_edfe ],_feea );_edfe +=_cgdaa .RowStride ;};};};};func (_eeaa *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _geba ="\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 >=_eeaa .IntSlice .Size (){return 0,_c .Errorf (_geba ,"\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 (_eeaa .XAtIndex (i )),nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _gbd ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_bee :=_add (width ,height );
_bee .Data =data ;if _baa :=((width *height )+7)>>3;len (data )< _baa {return nil ,_c .Errorf (_gbd ,"\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 ),_baa );
};if _dae :=_bee .addPadBits ();_dae !=nil {return nil ,_c .Wrap (_dae ,_gbd ,"");};return _bee ,nil ;};func _gaf (_cb *Bitmap ,_fc ,_bfd int )(*Bitmap ,error ){const _acf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
if _cb ==nil {return nil ,_c .Error (_acf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fc <=0||_bfd <=0{return nil ,_c .Error (_acf ,"\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 _fc ==_bfd {if _fc ==1{_ea ,_ge :=_bcf (nil ,_cb );if _ge !=nil {return nil ,_c .Wrap (_ge ,_acf ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _ea ,nil ;};if _fc ==2||_fc ==4||_fc ==8{_cdg ,_gg :=_af (_cb ,_fc );
if _gg !=nil {return nil ,_c .Wrap (_gg ,_acf ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _cdg ,nil ;};};_dc :=_fc *_cb .Width ;_faa :=_bfd *_cb .Height ;_eg :=New (_dc ,_faa );_bgg :=_eg .RowStride ;
var (_cdgb ,_acdc ,_ccd ,_gdf ,_ceb int ;_feg byte ;_ffd error ;);for _acdc =0;_acdc < _cb .Height ;_acdc ++{_cdgb =_bfd *_acdc *_bgg ;for _ccd =0;_ccd < _cb .Width ;_ccd ++{if _eae :=_cb .GetPixel (_ccd ,_acdc );_eae {_ceb =_fc *_ccd ;for _gdf =0;_gdf < _fc ;
_gdf ++{_eg .setBit (_cdgb *8+_ceb +_gdf );};};};for _gdf =1;_gdf < _bfd ;_gdf ++{_cdb :=_cdgb +_gdf *_bgg ;for _ggf :=0;_ggf < _bgg ;_ggf ++{if _feg ,_ffd =_eg .GetByte (_cdgb +_ggf );_ffd !=nil {return nil ,_c .Wrapf (_ffd ,_acf ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_gdf );
};if _ffd =_eg .SetByte (_cdb +_ggf ,_feg );_ffd !=nil {return nil ,_c .Wrap (_ffd ,_acf ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _eg ,nil ;};func _eaag (_aecf *Bitmap ,_dfee int )(*Bitmap ,error ){const _fdfdb ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
if _aecf ==nil {return nil ,_c .Error (_fdfdb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dfee <=0{return nil ,_c .Error (_fdfdb ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
};if _dfee ==1{_fbdgc ,_dcec :=_bcf (nil ,_aecf );if _dcec !=nil {return nil ,_c .Wrap (_dcec ,_fdfdb ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _fbdgc ,nil ;};_ccddc ,_ffea :=_gaf (_aecf ,_dfee ,_dfee );if _ffea !=nil {return nil ,_c .Wrap (_ffea ,_fdfdb ,"");
};return _ccddc ,nil ;};func (_bec *Bitmap )Copy ()*Bitmap {_dgfd :=make ([]byte ,len (_bec .Data ));copy (_dgfd ,_bec .Data );return &Bitmap {Width :_bec .Width ,Height :_bec .Height ,RowStride :_bec .RowStride ,Data :_dgfd ,Color :_bec .Color ,Text :_bec .Text ,BitmapNumber :_bec .BitmapNumber ,Special :_bec .Special };
};type Color int ;type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func (_ebeb *Bitmap )setEightBytes (_ccg int ,_fgbb uint64 )error {_decc :=_ebeb .RowStride -(_ccg %_ebeb .RowStride );if _ebeb .RowStride !=_ebeb .Width >>3{_decc --;
};if _decc >=8{return _ebeb .setEightFullBytes (_ccg ,_fgbb );};return _ebeb .setEightPartlyBytes (_ccg ,_decc ,_fgbb );};func (_afa *Bitmap )GetByteIndex (x ,y int )int {return y *_afa .RowStride +(x >>3)};func _eaeb ()(_ec [256]uint64 ){for _ggc :=0;
_ggc < 256;_ggc ++{if _ggc &0x01!=0{_ec [_ggc ]|=0xff;};if _ggc &0x02!=0{_ec [_ggc ]|=0xff00;};if _ggc &0x04!=0{_ec [_ggc ]|=0xff0000;};if _ggc &0x08!=0{_ec [_ggc ]|=0xff000000;};if _ggc &0x10!=0{_ec [_ggc ]|=0xff00000000;};if _ggc &0x20!=0{_ec [_ggc ]|=0xff0000000000;
};if _ggc &0x40!=0{_ec [_ggc ]|=0xff000000000000;};if _ggc &0x80!=0{_ec [_ggc ]|=0xff00000000000000;};};return _ec ;};func _eede (_aadg ,_bcaa *Bitmap ,_adda ,_efgd int )(*Bitmap ,error ){const _fggd ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";
if _bcaa ==nil {return nil ,_c .Error (_fggd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _adda < 1||_efgd < 1{return nil ,_c .Error (_fggd ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _adda ==1&&_efgd ==1{return _bcaa .Copy (),nil ;};if _adda ==1||_efgd ==1{_aebf :=SelCreateBrick (_efgd ,_adda ,_efgd /2,_adda /2,SelHit );var _abcbg error ;_aadg ,_abcbg =_aegd (_aadg ,_bcaa ,_aebf );if _abcbg !=nil {return nil ,_c .Wrap (_abcbg ,_fggd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _aadg ,nil ;};_cggfa :=SelCreateBrick (1,_adda ,0,_adda /2,SelHit );_ecgd :=SelCreateBrick (_efgd ,1,_efgd /2,0,SelHit );_bdb ,_cfd :=_gcad (nil ,_bcaa ,_cggfa );if _cfd !=nil {return nil ,_c .Wrap (_cfd ,_fggd ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _aadg ,_cfd =_gcad (_aadg ,_bdb ,_ecgd );_cfd !=nil {return nil ,_c .Wrap (_cfd ,_fggd ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_cfd =_feagc (_bdb ,_aadg ,_cggfa );_cfd !=nil {return nil ,_c .Wrap (_cfd ,_fggd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_cfd =_feagc (_aadg ,_bdb ,_ecgd );_cfd !=nil {return nil ,_c .Wrap (_cfd ,_fggd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _aadg ,nil ;};func _gfbb (_dfcc ,_gaaea *Bitmap ,_accb ,_facgg int )(*Bitmap ,error ){const _decb ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";
if _gaaea ==nil {return nil ,_c .Error (_decb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _accb < 1&&_facgg < 1{return nil ,_c .Error (_decb ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");
};if _accb ==1&&_facgg ==1{return _gaaea .Copy (),nil ;};if _accb ==1||_facgg ==1{var _bacf error ;_gdedg :=SelCreateBrick (_facgg ,_accb ,_facgg /2,_accb /2,SelHit );_dfcc ,_bacf =_cdab (_dfcc ,_gaaea ,_gdedg );if _bacf !=nil {return nil ,_c .Wrap (_bacf ,_decb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _dfcc ,nil ;};_cabca :=SelCreateBrick (1,_accb ,0,_accb /2,SelHit );_egea :=SelCreateBrick (_facgg ,1,_facgg /2,0,SelHit );_dabd ,_cdce :=_feagc (nil ,_gaaea ,_cabca );if _cdce !=nil {return nil ,_c .Wrap (_cdce ,_decb ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_dfcc ,_cdce =_feagc (_dfcc ,_dabd ,_egea );if _cdce !=nil {return nil ,_c .Wrap (_cdce ,_decb ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_cdce =_gcad (_dabd ,_dfcc ,_cabca );if _cdce !=nil {return nil ,_c .Wrap (_cdce ,_decb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_cdce =_gcad (_dfcc ,_dabd ,_egea );if _cdce !=nil {return nil ,_c .Wrap (_cdce ,_decb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _dfcc ,nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _gdea ,_bae int ;
_gca :=src .RowStride -1;if x < 0{_bae =-x ;x =0;}else if x +src .Width > dst .Width {_gca -=src .Width +x -dst .Width ;};if y < 0{_gdea =-y ;y =0;_bae +=src .RowStride ;_gca +=src .RowStride ;}else if y +src .Height > dst .Height {_gdea =src .Height +y -dst .Height ;
};var (_deabf int ;_ecgf error ;);_cdgcd :=x &0x07;_bfb :=8-_cdgcd ;_egg :=src .Width &0x07;_aecgc :=_bfb -_egg ;_bfce :=_bfb &0x07!=0;_dccc :=src .Width <=((_gca -_bae )<<3)+_bfb ;_gdag :=dst .GetByteIndex (x ,y );_fbdf :=_gdea +dst .Height ;if src .Height > _fbdf {_deabf =_fbdf ;
}else {_deabf =src .Height ;};switch {case !_bfce :_ecgf =_deef (src ,dst ,_gdea ,_deabf ,_gdag ,_bae ,_gca ,op );case _dccc :_ecgf =_gdec (src ,dst ,_gdea ,_deabf ,_gdag ,_bae ,_gca ,_aecgc ,_cdgcd ,_bfb ,op );default:_ecgf =_bgcf (src ,dst ,_gdea ,_deabf ,_gdag ,_bae ,_gca ,_aecgc ,_cdgcd ,_bfb ,op ,_egg );
};return _ecgf ;};func TstRSymbol (t *_b .T ,scale ...int )*Bitmap {_gddfd ,_cedc :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_da .NoError (t ,_cedc );return TstGetScaledSymbol (t ,_gddfd ,scale ...);};func (_gfcg *ClassedPoints )Len ()int {return _gfcg .IntSlice .Size ()};
func (_gef *Bitmap )Equals (s *Bitmap )bool {if len (_gef .Data )!=len (s .Data )||_gef .Width !=s .Width ||_gef .Height !=s .Height {return false ;};for _gfda :=0;_gfda < _gef .Height ;_gfda ++{_ead :=_gfda *_gef .RowStride ;for _dfbg :=0;_dfbg < _gef .RowStride ;
_dfbg ++{if _gef .Data [_ead +_dfbg ]!=s .Data [_ead +_dfbg ]{return false ;};};};return true ;};func _gabe ()(_egc []byte ){_egc =make ([]byte ,256);for _daaa :=0;_daaa < 256;_daaa ++{_bcef :=byte (_daaa );_egc [_bcef ]=(_bcef &0x01)|((_bcef &0x04)>>1)|((_bcef &0x10)>>2)|((_bcef &0x40)>>3)|((_bcef &0x02)<<3)|((_bcef &0x08)<<2)|((_bcef &0x20)<<1)|(_bcef &0x80);
};return _egc ;};func TstASymbol (t *_b .T )*Bitmap {t .Helper ();_cfbg :=New (6,6);_da .NoError (t ,_cfbg .SetPixel (1,0,1));_da .NoError (t ,_cfbg .SetPixel (2,0,1));_da .NoError (t ,_cfbg .SetPixel (3,0,1));_da .NoError (t ,_cfbg .SetPixel (4,0,1));
_da .NoError (t ,_cfbg .SetPixel (5,1,1));_da .NoError (t ,_cfbg .SetPixel (1,2,1));_da .NoError (t ,_cfbg .SetPixel (2,2,1));_da .NoError (t ,_cfbg .SetPixel (3,2,1));_da .NoError (t ,_cfbg .SetPixel (4,2,1));_da .NoError (t ,_cfbg .SetPixel (5,2,1));
_da .NoError (t ,_cfbg .SetPixel (0,3,1));_da .NoError (t ,_cfbg .SetPixel (5,3,1));_da .NoError (t ,_cfbg .SetPixel (0,4,1));_da .NoError (t ,_cfbg .SetPixel (5,4,1));_da .NoError (t ,_cfbg .SetPixel (1,5,1));_da .NoError (t ,_cfbg .SetPixel (2,5,1));
_da .NoError (t ,_cfbg .SetPixel (3,5,1));_da .NoError (t ,_cfbg .SetPixel (4,5,1));_da .NoError (t ,_cfbg .SetPixel (5,5,1));return _cfbg ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _adf ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";
_ffcf :=_add (width ,height );_ffcf .Data =data ;if len (data )< height *_ffcf .RowStride {return nil ,_c .Errorf (_adf ,"\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 *_ffcf .RowStride );
};return _ffcf ,nil ;};func (_fag *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _fag .addBorderGeneral (left ,right ,top ,bot ,val );};func (_egcd *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _egcd .Copy (),nil ;
};_afag ,_eee :=_egcd .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _eee !=nil {return nil ,_c .Wrap (_eee ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _afag ,nil ;};func _edga (_gcc uint ,_caffa byte )byte {return _caffa >>_gcc <<_gcc };
func (_cfec *Bitmap )GetVanillaData ()[]byte {if _cfec .Color ==Chocolate {_cfec .inverseData ();};return _cfec .Data ;};func (_bafbc *Selection )setOrigin (_beac ,_eedc int ){_bafbc .Cy ,_bafbc .Cx =_beac ,_eedc };var _gcfde =[]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 _bcf (_gcd ,_eebf *Bitmap )(*Bitmap ,error ){if _eebf ==nil {return nil ,_c .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _eebf ==_gcd {return _gcd ,nil ;
};if _gcd ==nil {_gcd =_eebf .createTemplate ();copy (_gcd .Data ,_eebf .Data );return _gcd ,nil ;};_bfcge :=_gcd .resizeImageData (_eebf );if _bfcge !=nil {return nil ,_c .Wrap (_bfcge ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_gcd .Text =_eebf .Text ;copy (_gcd .Data ,_eebf .Data );return _gcd ,nil ;};func _ffba (_fdfdg *Bitmap ,_gbeee ,_cfab int ,_ggaff ,_ebdge int ,_gcfgc RasterOperator ,_febe *Bitmap ,_abde ,_aaeg int )error {var _fdec ,_cdbfc ,_bfaf ,_aefb int ;if _gbeee < 0{_abde -=_gbeee ;
_ggaff +=_gbeee ;_gbeee =0;};if _abde < 0{_gbeee -=_abde ;_ggaff +=_abde ;_abde =0;};_fdec =_gbeee +_ggaff -_fdfdg .Width ;if _fdec > 0{_ggaff -=_fdec ;};_cdbfc =_abde +_ggaff -_febe .Width ;if _cdbfc > 0{_ggaff -=_cdbfc ;};if _cfab < 0{_aaeg -=_cfab ;
_ebdge +=_cfab ;_cfab =0;};if _aaeg < 0{_cfab -=_aaeg ;_ebdge +=_aaeg ;_aaeg =0;};_bfaf =_cfab +_ebdge -_fdfdg .Height ;if _bfaf > 0{_ebdge -=_bfaf ;};_aefb =_aaeg +_ebdge -_febe .Height ;if _aefb > 0{_ebdge -=_aefb ;};if _ggaff <=0||_ebdge <=0{return nil ;
};var _caaf error ;switch {case _gbeee &7==0&&_abde &7==0:_caaf =_cgbd (_fdfdg ,_gbeee ,_cfab ,_ggaff ,_ebdge ,_gcfgc ,_febe ,_abde ,_aaeg );case _gbeee &7==_abde &7:_caaf =_eafg (_fdfdg ,_gbeee ,_cfab ,_ggaff ,_ebdge ,_gcfgc ,_febe ,_abde ,_aaeg );default:_caaf =_ecba (_fdfdg ,_gbeee ,_cfab ,_ggaff ,_ebdge ,_gcfgc ,_febe ,_abde ,_aaeg );
};if _caaf !=nil {return _c .Wrap (_caaf ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func _cbag (_baca ,_gcdf int )int {if _baca > _gcdf {return _baca ;};return _gcdf ;};func (_bfcfd *Bitmaps )makeSizeIndicator (_efde ,_ceag int ,_abbfg LocationFilter ,_bebg SizeComparison )(_agbdg *_ba .NumSlice ,_ggcef error ){const _ffffc ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _bfcfd ==nil {return nil ,_c .Error (_ffffc ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _abbfg {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_ffffc ,"\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",_abbfg );
};switch _bebg {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_ffffc ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_bebg );
};_agbdg =&_ba .NumSlice {};var (_beada ,_dggg ,_eeacg int ;_gdga *Bitmap ;);for _ ,_gdga =range _bfcfd .Values {_beada =0;_dggg ,_eeacg =_gdga .Width ,_gdga .Height ;switch _abbfg {case LocSelectWidth :if (_bebg ==SizeSelectIfLT &&_dggg < _efde )||(_bebg ==SizeSelectIfGT &&_dggg > _efde )||(_bebg ==SizeSelectIfLTE &&_dggg <=_efde )||(_bebg ==SizeSelectIfGTE &&_dggg >=_efde )||(_bebg ==SizeSelectIfEQ &&_dggg ==_efde ){_beada =1;
};case LocSelectHeight :if (_bebg ==SizeSelectIfLT &&_eeacg < _ceag )||(_bebg ==SizeSelectIfGT &&_eeacg > _ceag )||(_bebg ==SizeSelectIfLTE &&_eeacg <=_ceag )||(_bebg ==SizeSelectIfGTE &&_eeacg >=_ceag )||(_bebg ==SizeSelectIfEQ &&_eeacg ==_ceag ){_beada =1;
};case LocSelectIfEither :if (_bebg ==SizeSelectIfLT &&(_dggg < _efde ||_eeacg < _ceag ))||(_bebg ==SizeSelectIfGT &&(_dggg > _efde ||_eeacg > _ceag ))||(_bebg ==SizeSelectIfLTE &&(_dggg <=_efde ||_eeacg <=_ceag ))||(_bebg ==SizeSelectIfGTE &&(_dggg >=_efde ||_eeacg >=_ceag ))||(_bebg ==SizeSelectIfEQ &&(_dggg ==_efde ||_eeacg ==_ceag )){_beada =1;
};case LocSelectIfBoth :if (_bebg ==SizeSelectIfLT &&(_dggg < _efde &&_eeacg < _ceag ))||(_bebg ==SizeSelectIfGT &&(_dggg > _efde &&_eeacg > _ceag ))||(_bebg ==SizeSelectIfLTE &&(_dggg <=_efde &&_eeacg <=_ceag ))||(_bebg ==SizeSelectIfGTE &&(_dggg >=_efde &&_eeacg >=_ceag ))||(_bebg ==SizeSelectIfEQ &&(_dggg ==_efde &&_eeacg ==_ceag )){_beada =1;
};};_agbdg .AddInt (_beada );};return _agbdg ,nil ;};func TstOSymbol (t *_b .T ,scale ...int )*Bitmap {_fdaa ,_ecfe :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_da .NoError (t ,_ecfe );return TstGetScaledSymbol (t ,_fdaa ,scale ...);};func (_ggfe *ClassedPoints )Swap (i ,j int ){_ggfe .IntSlice [i ],_ggfe .IntSlice [j ]=_ggfe .IntSlice [j ],_ggfe .IntSlice [i ];
};func (_dbdf *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _afgcf ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_faae ,_abfe :=_dbdf .selectByIndexes (idx );
if _abfe !=nil {return nil ,_c .Wrap (_abfe ,_afgcf ,"");};return _faae ,nil ;};func _ddba (_cgcfd *_ba .Stack )(_fcgcc *fillSegment ,_bfad error ){const _cegcf ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _cgcfd ==nil {return nil ,_c .Error (_cegcf ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};if _cgcfd .Aux ==nil {return nil ,_c .Error (_cegcf ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_bceg ,_dgbe :=_cgcfd .Pop ();if !_dgbe {return nil ,nil ;};_fgfe ,_dgbe :=_bceg .(*fillSegment );
if !_dgbe {return nil ,_c .Error (_cegcf ,"\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");};_fcgcc =&fillSegment {_fgfe ._fbadf ,_fgfe ._gccd ,_fgfe ._bfbag +_fgfe ._fgefg ,_fgfe ._fgefg };
_cgcfd .Aux .Push (_fgfe );return _fcgcc ,nil ;};func (_cff *Bitmap )nextOnPixel (_cbe ,_dfac int )(_cebf _dac .Point ,_ccdf bool ,_bag error ){const _eecf ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_cebf ,_ccdf ,_bag =_cff .nextOnPixelLow (_cff .Width ,_cff .Height ,_cff .RowStride ,_cbe ,_dfac );
if _bag !=nil {return _cebf ,false ,_c .Wrap (_bag ,_eecf ,"");};return _cebf ,_ccdf ,nil ;};func _egaa (_cgda ,_bcbe *Bitmap ,_daba ,_bed int )(*Bitmap ,error ){const _ffeb ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _bcbe ==nil {_g .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
return nil ,_c .Error (_ffeb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _daba < 1||_bed < 1{return nil ,_c .Error (_ffeb ,"\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 _daba ==1&&_bed ==1{_ffdd ,_gdgg :=_bcf (_cgda ,_bcbe );if _gdgg !=nil {return nil ,_c .Wrap (_gdgg ,_ffeb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};
return _ffdd ,nil ;};if _daba ==1||_bed ==1{_acfgf :=SelCreateBrick (_bed ,_daba ,_bed /2,_daba /2,SelHit );_gbeec ,_fddc :=_gcad (_cgda ,_bcbe ,_acfgf );if _fddc !=nil {return nil ,_c .Wrap (_fddc ,_ffeb ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gbeec ,nil ;};_eacg :=SelCreateBrick (1,_daba ,0,_daba /2,SelHit );_dbcf :=SelCreateBrick (_bed ,1,_bed /2,0,SelHit );_adeg ,_ccfgd :=_gcad (nil ,_bcbe ,_eacg );if _ccfgd !=nil {return nil ,_c .Wrap (_ccfgd ,_ffeb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_cgda ,_ccfgd =_gcad (_cgda ,_adeg ,_dbcf );if _ccfgd !=nil {return nil ,_c .Wrap (_ccfgd ,_ffeb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _cgda ,nil ;};func _cf (_ag ,_bf *Bitmap )(_bg error ){const _de ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
_cg :=_bf .RowStride ;_cd :=_ag .RowStride ;var (_ff byte ;_dg uint16 ;_e ,_bad ,_fb ,_ca ,_gf int ;);for _fb =0;_fb < _bf .Height ;_fb ++{_e =_fb *_cg ;_bad =2*_fb *_cd ;for _ca =0;_ca < _cg ;_ca ++{_ff =_bf .Data [_e +_ca ];_dg =_fgceb [_ff ];_gf =_bad +_ca *2;
if _ag .RowStride !=_bf .RowStride *2&&(_ca +1)*2> _ag .RowStride {_bg =_ag .SetByte (_gf ,byte (_dg >>8));}else {_bg =_ag .setTwoBytes (_gf ,_dg );};if _bg !=nil {return _c .Wrap (_bg ,_de ,"");};};for _ca =0;_ca < _cd ;_ca ++{_gf =_bad +_cd +_ca ;_ff =_ag .Data [_bad +_ca ];
if _bg =_ag .SetByte (_gf ,_ff );_bg !=nil {return _c .Wrapf (_bg ,_de ,"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",_bad +_ca ,_bad +_cd +_ca );
};};};return nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func ClipBoxToRectangle (box *_dac .Rectangle ,wi ,hi int )(_cgea *_dac .Rectangle ,_fbdc error ){const _ggef ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,_c .Error (_ggef ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_c .Error (_ggef ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
};_eag :=*box ;_cgea =&_eag ;if _cgea .Min .X < 0{_cgea .Max .X +=_cgea .Min .X ;_cgea .Min .X =0;};if _cgea .Min .Y < 0{_cgea .Max .Y +=_cgea .Min .Y ;_cgea .Min .Y =0;};if _cgea .Max .X > wi {_cgea .Max .X =wi ;};if _cgea .Max .Y > hi {_cgea .Max .Y =hi ;
};return _cgea ,nil ;};type ClassedPoints struct{*Points ;_ba .IntSlice ;_gedbd func (_fdba ,_bdce int )bool ;};func _gbdb (_dafb *Bitmap ,_ecbg ,_eddg ,_eafd ,_ccccg int ,_ddge RasterOperator ,_bedg *Bitmap ,_edgc ,_gecb int )error {const _bbbe ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
if _dafb ==nil {return _c .Error (_bbbe ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _ddge ==PixDst {return nil ;};switch _ddge {case PixClr ,PixSet ,PixNotDst :_edeg (_dafb ,_ecbg ,_eddg ,_eafd ,_ccccg ,_ddge );
return nil ;};if _bedg ==nil {_g .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");
return _c .Error (_bbbe ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _gdbf :=_ffba (_dafb ,_ecbg ,_eddg ,_eafd ,_ccccg ,_ddge ,_bedg ,_edgc ,_gecb );_gdbf !=nil {return _c .Wrap (_gdbf ,_bbbe ,"");};return nil ;
};func _gfaa (_dbfg ,_gdd *Bitmap ,_ee int ,_bfcb []byte ,_cfee int )(_gab error ){const _fed ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_eaa ,_fea ,_abc ,_bcgc ,_edc ,_fgb ,_bcgcc ,_ffa int ;
_eeb ,_gcf uint32 ;_gb ,_gfb byte ;_ffc uint16 ;);_dd :=make ([]byte ,4);_dde :=make ([]byte ,4);for _abc =0;_abc < _dbfg .Height -1;_abc ,_bcgc =_abc +2,_bcgc +1{_eaa =_abc *_dbfg .RowStride ;_fea =_bcgc *_gdd .RowStride ;for _edc ,_fgb =0,0;_edc < _cfee ;
_edc ,_fgb =_edc +4,_fgb +1{for _bcgcc =0;_bcgcc < 4;_bcgcc ++{_ffa =_eaa +_edc +_bcgcc ;if _ffa <=len (_dbfg .Data )-1&&_ffa < _eaa +_dbfg .RowStride {_dd [_bcgcc ]=_dbfg .Data [_ffa ];}else {_dd [_bcgcc ]=0x00;};_ffa =_eaa +_dbfg .RowStride +_edc +_bcgcc ;
if _ffa <=len (_dbfg .Data )-1&&_ffa < _eaa +(2*_dbfg .RowStride ){_dde [_bcgcc ]=_dbfg .Data [_ffa ];}else {_dde [_bcgcc ]=0x00;};};_eeb =_bc .BigEndian .Uint32 (_dd );_gcf =_bc .BigEndian .Uint32 (_dde );_gcf |=_eeb ;_gcf |=_gcf <<1;_gcf &=0xaaaaaaaa;
_eeb =_gcf |(_gcf <<7);_gb =byte (_eeb >>24);_gfb =byte ((_eeb >>8)&0xff);_ffa =_fea +_fgb ;if _ffa +1==len (_gdd .Data )-1||_ffa +1>=_fea +_gdd .RowStride {_gdd .Data [_ffa ]=_bfcb [_gb ];}else {_ffc =(uint16 (_bfcb [_gb ])<<8)|uint16 (_bfcb [_gfb ]);
if _gab =_gdd .setTwoBytes (_ffa ,_ffc );_gab !=nil {return _c .Wrapf (_gab ,_fed ,"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",_ffa );
};_fgb ++;};};};return nil ;};func Rect (x ,y ,w ,h int )(*_dac .Rectangle ,error ){const _dcac ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_c .Errorf (_dcac ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );
};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_c .Error (_dcac ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_ebaac :=_dac .Rect (x ,y ,x +w ,y +h );return &_ebaac ,nil ;
};func (_ffb *Bitmap )Zero ()bool {_ffde :=_ffb .Width /8;_cegga :=_ffb .Width &7;var _bdg byte ;if _cegga !=0{_bdg =byte (0xff<<uint (8-_cegga ));};var _aca ,_fgab ,_ggb int ;for _fgab =0;_fgab < _ffb .Height ;_fgab ++{_aca =_ffb .RowStride *_fgab ;for _ggb =0;
_ggb < _ffde ;_ggb ,_aca =_ggb +1,_aca +1{if _ffb .Data [_aca ]!=0{return false ;};};if _cegga > 0{if _ffb .Data [_aca ]&_bdg !=0{return false ;};};};return true ;};func (_efb *Bitmap )GetUnpaddedData ()([]byte ,error ){_fgfc :=uint (_efb .Width &0x07);
if _fgfc ==0{return _efb .Data ,nil ;};_aeb :=_efb .Width *_efb .Height ;if _aeb %8!=0{_aeb >>=3;_aeb ++;}else {_aeb >>=3;};_agab :=make ([]byte ,_aeb );_ecab :=_db .NewWriterMSB (_agab );const _fgg ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
for _cga :=0;_cga < _efb .Height ;_cga ++{for _gdb :=0;_gdb < _efb .RowStride ;_gdb ++{_aba :=_efb .Data [_cga *_efb .RowStride +_gdb ];if _gdb !=_efb .RowStride -1{_bcbd :=_ecab .WriteByte (_aba );if _bcbd !=nil {return nil ,_c .Wrap (_bcbd ,_fgg ,"");
};continue ;};for _aag :=uint (0);_aag < _fgfc ;_aag ++{_fcd :=_ecab .WriteBit (int (_aba >>(7-_aag )&0x01));if _fcd !=nil {return nil ,_c .Wrap (_fcd ,_fgg ,"");};};};};return _agab ,nil ;};func _bbcb (_ffgg ,_bcfd *Bitmap ,_dga CombinationOperator )*Bitmap {_dcad :=New (_ffgg .Width ,_ffgg .Height );
for _aeag :=0;_aeag < len (_dcad .Data );_aeag ++{_dcad .Data [_aeag ]=_bgcb (_ffgg .Data [_aeag ],_bcfd .Data [_aeag ],_dga );};return _dcad ;};func (_ggdf *Boxes )Add (box *_dac .Rectangle )error {if _ggdf ==nil {return _c .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};*_ggdf =append (*_ggdf ,box );return nil ;};func TstFrameBitmapData ()[]byte {return _cbdc .Data };func (_cgga *Boxes )selectWithIndicator (_cdbc *_ba .NumSlice )(_bdda *Boxes ,_dcabc error ){const _bgf ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _cgga ==nil {return nil ,_c .Error (_bgf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _cdbc ==nil {return nil ,_c .Error (_bgf ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (*_cdbc )!=len (*_cgga ){return nil ,_c .Error (_bgf ,"\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 _edcfe ,_fcee int ;for _beff :=0;_beff < len (*_cdbc );_beff ++{if _edcfe ,_dcabc =_cdbc .GetInt (_beff );_dcabc !=nil {return nil ,_c .Wrap (_dcabc ,_bgf ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _edcfe ==1{_fcee ++;
};};if _fcee ==len (*_cgga ){return _cgga ,nil ;};_acag :=Boxes {};for _agf :=0;_agf < len (*_cdbc );_agf ++{_edcfe =int ((*_cdbc )[_agf ]);if _edcfe ==0{continue ;};_acag =append (_acag ,(*_cgga )[_agf ]);};_bdda =&_acag ;return _bdda ,nil ;};func _dfacb (_gggb *Bitmap )(_ece *Bitmap ,_fadf int ,_dfbfe error ){const _bebf ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _gggb ==nil {return nil ,0,_c .Errorf (_bebf ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _edbd ,_abad *Bitmap ;if _edbd ,_dfbfe =_bcf (nil ,_gggb );_dfbfe !=nil {return nil ,0,_c .Wrap (_dfbfe ,_bebf ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_aead [13]int ;_ecc ,_dace int ;);_gggg :=12;_eaeed :=_ba .NewNumSlice (_gggg +1);_fgce :=_ba .NewNumSlice (_gggg +1);var _bfec *Boxes ;for _fbad :=0;_fbad <=_gggg ;_fbad ++{if _fbad ==0{if _abad ,_dfbfe =_bcf (nil ,_edbd );_dfbfe !=nil {return nil ,0,_c .Wrap (_dfbfe ,_bebf ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _abad ,_dfbfe =_cdag (_edbd ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_dfbfe !=nil {return nil ,0,_c .Wrap (_dfbfe ,_bebf ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _bfec ,_dfbfe =_abad .connComponentsBB (4);
_dfbfe !=nil {return nil ,0,_c .Wrap (_dfbfe ,_bebf ,"");};_aead [_fbad ]=len (*_bfec );_eaeed .AddInt (_aead [_fbad ]);switch _fbad {case 0:_ecc =_aead [0];default:_dace =_aead [_fbad -1]-_aead [_fbad ];_fgce .AddInt (_dace );};_edbd =_abad ;};_ggfd :=true ;
_bafc :=2;var _agbd ,_ecb int ;for _cggf :=1;_cggf < len (*_fgce );_cggf ++{if _agbd ,_dfbfe =_eaeed .GetInt (_cggf );_dfbfe !=nil {return nil ,0,_c .Wrap (_dfbfe ,_bebf ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _ggfd &&_agbd < int (0.3*float32 (_ecc )){_bafc =_cggf +1;_ggfd =false ;};if _dace ,_dfbfe =_fgce .GetInt (_cggf );_dfbfe !=nil {return nil ,0,_c .Wrap (_dfbfe ,_bebf ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _dace > _ecb {_ecb =_dace ;};};_ccga :=_gggb .XResolution ;if _ccga ==0{_ccga =150;};if _ccga > 110{_bafc ++;};if _bafc < 2{_g .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");
_bafc =2;};_fadf =_bafc +1;if _ece ,_dfbfe =_eede (nil ,_gggb ,_bafc +1,1);_dfbfe !=nil {return nil ,0,_c .Wrap (_dfbfe ,_bebf ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _ece ,_fadf ,nil ;
};func (_befe *Bitmap )SizesEqual (s *Bitmap )bool {if _befe ==s {return true ;};if _befe .Width !=s .Width ||_befe .Height !=s .Height {return false ;};return true ;};func TstImageBitmapInverseData ()[]byte {_dgede :=_dega .Copy ();_dgede .InverseData ();
return _dgede .Data ;};func init (){const _eece ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_cbdc =New (50,40);var _gbec error ;_cbdc ,_gbec =_cbdc .AddBorder (2,1);if _gbec !=nil {panic (_c .Wrap (_gbec ,_eece ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};_dega ,_gbec =NewWithData (50,22,_gcfde );if _gbec !=nil {panic (_c .Wrap (_gbec ,_eece ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func (_cgcf *Bitmap )nextOnPixelLow (_ebaa ,_dfbf ,_aafc ,_decg ,_bdab int )(_dcfe _dac .Point ,_cfaf bool ,_abdc error ){const _cdgbc ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_ebaf int ;_daag byte ;);_dad :=_bdab *_aafc ;_dgec :=_dad +(_decg /8);if _daag ,_abdc =_cgcf .GetByte (_dgec );_abdc !=nil {return _dcfe ,false ,_c .Wrap (_abdc ,_cdgbc ,"\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 _daag !=0{_edba :=_decg -(_decg %8)+7;for _ebaf =_decg ;_ebaf <=_edba &&_ebaf < _ebaa ;_ebaf ++{if _cgcf .GetPixel (_ebaf ,_bdab ){_dcfe .X =_ebaf ;_dcfe .Y =_bdab ;return _dcfe ,true ,nil ;};};};_gabb :=(_decg /8)+1;_ebaf =8*_gabb ;var _gde int ;
for _dgec =_dad +_gabb ;_ebaf < _ebaa ;_dgec ,_ebaf =_dgec +1,_ebaf +8{if _daag ,_abdc =_cgcf .GetByte (_dgec );_abdc !=nil {return _dcfe ,false ,_c .Wrap (_abdc ,_cdgbc ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");
};if _daag ==0{continue ;};for _gde =0;_gde < 8&&_ebaf < _ebaa ;_gde ,_ebaf =_gde +1,_ebaf +1{if _cgcf .GetPixel (_ebaf ,_bdab ){_dcfe .X =_ebaf ;_dcfe .Y =_bdab ;return _dcfe ,true ,nil ;};};};for _fggc :=_bdab +1;_fggc < _dfbf ;_fggc ++{_dad =_fggc *_aafc ;
for _dgec ,_ebaf =_dad ,0;_ebaf < _ebaa ;_dgec ,_ebaf =_dgec +1,_ebaf +8{if _daag ,_abdc =_cgcf .GetByte (_dgec );_abdc !=nil {return _dcfe ,false ,_c .Wrap (_abdc ,_cdgbc ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");
};if _daag ==0{continue ;};for _gde =0;_gde < 8&&_ebaf < _ebaa ;_gde ,_ebaf =_gde +1,_ebaf +1{if _cgcf .GetPixel (_ebaf ,_fggc ){_dcfe .X =_ebaf ;_dcfe .Y =_fggc ;return _dcfe ,true ,nil ;};};};};return _dcfe ,false ,nil ;};func _gdec (_caae ,_bacb *Bitmap ,_daab ,_dcae ,_dfdc ,_afadc ,_beba ,_feebe ,_afgaf ,_cbbf int ,_aadfe CombinationOperator )error {var _bbgb int ;
_gge :=func (){_bbgb ++;_dfdc +=_bacb .RowStride ;_afadc +=_caae .RowStride ;_beba +=_caae .RowStride };for _bbgb =_daab ;_bbgb < _dcae ;_gge (){var _gcda uint16 ;_affd :=_dfdc ;for _ebfa :=_afadc ;_ebfa <=_beba ;_ebfa ++{_dffd ,_fdfd :=_bacb .GetByte (_affd );
if _fdfd !=nil {return _fdfd ;};_bfeg ,_fdfd :=_caae .GetByte (_ebfa );if _fdfd !=nil {return _fdfd ;};_gcda =(_gcda |uint16 (_bfeg ))<<uint (_cbbf );_bfeg =byte (_gcda >>8);if _ebfa ==_beba {_bfeg =_edga (uint (_feebe ),_bfeg );};if _fdfd =_bacb .SetByte (_affd ,_bgcb (_dffd ,_bfeg ,_aadfe ));
_fdfd !=nil {return _fdfd ;};_affd ++;_gcda <<=uint (_afgaf );};};return nil ;};func (_ccfa *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gcga *Bitmaps ,_ccgce error ){const _egeg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _ccfa ==nil {return nil ,_c .Error (_egeg ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_egeg ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_egeg ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_eded ,_ccgce :=_ccfa .makeSizeIndicator (width ,height ,tp ,relation );if _ccgce !=nil {return nil ,_c .Wrap (_ccgce ,_egeg ,"");};_gcga ,_ccgce =_ccfa .selectByIndicator (_eded );if _ccgce !=nil {return nil ,_c .Wrap (_ccgce ,_egeg ,"");};return _gcga ,nil ;
};func Centroids (bms []*Bitmap )(*Points ,error ){_afaa :=make ([]Point ,len (bms ));_fbdd :=_bbbb ();_cgfag :=_debg ();var _ggff error ;for _ddcc ,_gadf :=range bms {_afaa [_ddcc ],_ggff =_gadf .centroid (_fbdd ,_cgfag );if _ggff !=nil {return nil ,_ggff ;
};};_cdf :=Points (_afaa );return &_cdf ,nil ;};const (_bdae shift =iota ;_bged ;);func MakePixelCentroidTab8 ()[]int {return _bbbb ()};func TstDSymbol (t *_b .T ,scale ...int )*Bitmap {_fdced ,_bdbg :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});
_da .NoError (t ,_bdbg );return TstGetScaledSymbol (t ,_fdced ,scale ...);};func (_dddd *Bitmaps )GetBox (i int )(*_dac .Rectangle ,error ){const _afaec ="\u0047\u0065\u0074\u0042\u006f\u0078";if _dddd ==nil {return nil ,_c .Error (_afaec ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_dddd .Boxes )-1{return nil ,_c .Errorf (_afaec ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dddd .Boxes [i ],nil ;};func (_fdb Points )GetIntY (i int )(int ,error ){if i >=len (_fdb ){return 0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_fdb [i ].Y ),nil ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func TstWSymbol (t *_b .T ,scale ...int )*Bitmap {_edcfa ,_adaf :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});
_da .NoError (t ,_adaf );return TstGetScaledSymbol (t ,_edcfa ,scale ...);};func (_faaa *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_aefc *Boxes ,_eebb error ){const _eaec ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
if _faaa ==nil {return nil ,_c .Error (_eaec ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_c .Error (_eaec ,"\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 _aefc ,_eebb =_faaa .connComponentsBB (connectivity );_eebb !=nil {return nil ,_c .Wrap (_eebb ,_eaec ,"");};}else {if _aefc ,_eebb =_faaa .connComponentsBitmapsBB (bms ,connectivity );_eebb !=nil {return nil ,_c .Wrap (_eebb ,_eaec ,"");
};};return _aefc ,nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func _daa (_ab ,_dfa *Bitmap )(_ce error ){const _gd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";
_deg :=_dfa .RowStride ;_ac :=_ab .RowStride ;_gfg :=_dfa .RowStride *4-_ab .RowStride ;var (_ace ,_cab byte ;_bfe uint32 ;_dec ,_ga ,_cc ,_ed ,_fa ,_bfc ,_fg int ;);for _cc =0;_cc < _dfa .Height ;_cc ++{_dec =_cc *_deg ;_ga =4*_cc *_ac ;for _ed =0;_ed < _deg ;
_ed ++{_ace =_dfa .Data [_dec +_ed ];_bfe =_ecdd [_ace ];_bfc =_ga +_ed *4;if _gfg !=0&&(_ed +1)*4> _ab .RowStride {for _fa =_gfg ;_fa > 0;_fa --{_cab =byte ((_bfe >>uint (_fa *8))&0xff);_fg =_bfc +(_gfg -_fa );if _ce =_ab .SetByte (_fg ,_cab );_ce !=nil {return _c .Wrapf (_ce ,_gd ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_fa );
};};}else if _ce =_ab .setFourBytes (_bfc ,_bfe );_ce !=nil {return _c .Wrap (_ce ,_gd ,"");};if _ce =_ab .setFourBytes (_ga +_ed *4,_ecdd [_dfa .Data [_dec +_ed ]]);_ce !=nil {return _c .Wrap (_ce ,_gd ,"");};};for _fa =1;_fa < 4;_fa ++{for _ed =0;_ed < _ac ;
_ed ++{if _ce =_ab .SetByte (_ga +_fa *_ac +_ed ,_ab .Data [_ga +_ed ]);_ce !=nil {return _c .Wrapf (_ce ,_gd ,"\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",_fa ,_ed );
};};};};return nil ;};func (_dbaa *Bitmap )GetBitOffset (x int )int {return x &0x07};type Boxes []*_dac .Rectangle ;func _dcd (_ddg ,_def *Bitmap ,_ddf int ,_beg []byte ,_gbe int )(_gfd error ){const _aaf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_ede ,_dcf ,_cbb ,_dfb ,_dcfc ,_ded ,_bfeb ,_gaa int ;_ceg ,_dbg ,_gafa ,_gda uint32 ;_acfg ,_cdbb byte ;_agbc uint16 ;);_geg :=make ([]byte ,4);_fec :=make ([]byte ,4);for _cbb =0;_cbb < _ddg .Height -1;_cbb ,_dfb =_cbb +2,_dfb +1{_ede =_cbb *_ddg .RowStride ;
_dcf =_dfb *_def .RowStride ;for _dcfc ,_ded =0,0;_dcfc < _gbe ;_dcfc ,_ded =_dcfc +4,_ded +1{for _bfeb =0;_bfeb < 4;_bfeb ++{_gaa =_ede +_dcfc +_bfeb ;if _gaa <=len (_ddg .Data )-1&&_gaa < _ede +_ddg .RowStride {_geg [_bfeb ]=_ddg .Data [_gaa ];}else {_geg [_bfeb ]=0x00;
};_gaa =_ede +_ddg .RowStride +_dcfc +_bfeb ;if _gaa <=len (_ddg .Data )-1&&_gaa < _ede +(2*_ddg .RowStride ){_fec [_bfeb ]=_ddg .Data [_gaa ];}else {_fec [_bfeb ]=0x00;};};_ceg =_bc .BigEndian .Uint32 (_geg );_dbg =_bc .BigEndian .Uint32 (_fec );_gafa =_ceg &_dbg ;
_gafa |=_gafa <<1;_gda =_ceg |_dbg ;_gda &=_gda <<1;_dbg =_gafa |_gda ;_dbg &=0xaaaaaaaa;_ceg =_dbg |(_dbg <<7);_acfg =byte (_ceg >>24);_cdbb =byte ((_ceg >>8)&0xff);_gaa =_dcf +_ded ;if _gaa +1==len (_def .Data )-1||_gaa +1>=_dcf +_def .RowStride {if _gfd =_def .SetByte (_gaa ,_beg [_acfg ]);
_gfd !=nil {return _c .Wrapf (_gfd ,_aaf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gaa );};}else {_agbc =(uint16 (_beg [_acfg ])<<8)|uint16 (_beg [_cdbb ]);if _gfd =_def .setTwoBytes (_gaa ,_agbc );_gfd !=nil {return _c .Wrapf (_gfd ,_aaf ,"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",_gaa );
};_ded ++;};};};return nil ;};func (_fgec *byHeight )Len ()int {return len (_fgec .Values )};func (_aadf *Bitmap )clearAll ()error {return _aadf .RasterOperation (0,0,_aadf .Width ,_aadf .Height ,PixClr ,nil ,0,0);};func (_bcgff MorphProcess )verify (_bfbaf int ,_gcbf ,_cdaf *int )error {const _cffg ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
switch _bcgff .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_bcgff .Arguments )!=2{return _c .Error (_cffg ,"\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");
};_gdcb ,_ceeg :=_bcgff .getWidthHeight ();if _gdcb <=0||_ceeg <=0{return _c .Error (_cffg ,"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 :_ebfad :=len (_bcgff .Arguments );*_gcbf +=_ebfad ;if _ebfad < 1||_ebfad > 4{return _c .Error (_cffg ,"\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 _cbef :=0;_cbef < _ebfad ;_cbef ++{if _bcgff .Arguments [_cbef ]< 1||_bcgff .Arguments [_cbef ]> 4{return _c .Error (_cffg ,"\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 (_bcgff .Arguments )==0{return _c .Error (_cffg ,"\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");
};_bagb :=_bcgff .Arguments [0];if _bagb !=2&&_bagb !=4&&_bagb !=8{return _c .Error (_cffg ,"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");
};*_gcbf -=_acaa [_bagb /4];case MopAddBorder :if len (_bcgff .Arguments )==0{return _c .Error (_cffg ,"\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");
};_agec :=_bcgff .Arguments [0];if _bfbaf > 0{return _c .Error (_cffg ,"\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 _agec < 1{return _c .Error (_cffg ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_cdaf =_agec ;};return nil ;};func (_gfbc *Bitmaps )Size ()int {return len (_gfbc .Values )};
func (_aec *Bitmap )CountPixels ()int {return _aec .countPixels ()};