2022-06-06 22:48:24 +00:00

653 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 (_gbb "encoding/binary";_gb "github.com/stretchr/testify/require";_fc "github.com/unidoc/unipdf/v3/common";_bg "github.com/unidoc/unipdf/v3/internal/bitwise";_db "github.com/unidoc/unipdf/v3/internal/imageutil";_f "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
_c "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_a "image";_ge "math";_b "sort";_gc "strings";_d "testing";);func (_agb *Bitmap )GetByte (index int )(byte ,error ){if index > len (_agb .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 _agb .Data [index ],nil ;};func (_ffaf *Bitmaps )makeSizeIndicator (_afdg ,_aefed int ,_cdda LocationFilter ,_cffeg SizeComparison )(_cbddg *_f .NumSlice ,_gbada error ){const _fgffe ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _ffaf ==nil {return nil ,_c .Error (_fgffe ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _cdda {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_fgffe ,"\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",_cdda );
};switch _cffeg {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_fgffe ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_cffeg );
};_cbddg =&_f .NumSlice {};var (_eagbc ,_bdfdge ,_cedd int ;_fgdga *Bitmap ;);for _ ,_fgdga =range _ffaf .Values {_eagbc =0;_bdfdge ,_cedd =_fgdga .Width ,_fgdga .Height ;switch _cdda {case LocSelectWidth :if (_cffeg ==SizeSelectIfLT &&_bdfdge < _afdg )||(_cffeg ==SizeSelectIfGT &&_bdfdge > _afdg )||(_cffeg ==SizeSelectIfLTE &&_bdfdge <=_afdg )||(_cffeg ==SizeSelectIfGTE &&_bdfdge >=_afdg )||(_cffeg ==SizeSelectIfEQ &&_bdfdge ==_afdg ){_eagbc =1;
};case LocSelectHeight :if (_cffeg ==SizeSelectIfLT &&_cedd < _aefed )||(_cffeg ==SizeSelectIfGT &&_cedd > _aefed )||(_cffeg ==SizeSelectIfLTE &&_cedd <=_aefed )||(_cffeg ==SizeSelectIfGTE &&_cedd >=_aefed )||(_cffeg ==SizeSelectIfEQ &&_cedd ==_aefed ){_eagbc =1;
};case LocSelectIfEither :if (_cffeg ==SizeSelectIfLT &&(_bdfdge < _afdg ||_cedd < _aefed ))||(_cffeg ==SizeSelectIfGT &&(_bdfdge > _afdg ||_cedd > _aefed ))||(_cffeg ==SizeSelectIfLTE &&(_bdfdge <=_afdg ||_cedd <=_aefed ))||(_cffeg ==SizeSelectIfGTE &&(_bdfdge >=_afdg ||_cedd >=_aefed ))||(_cffeg ==SizeSelectIfEQ &&(_bdfdge ==_afdg ||_cedd ==_aefed )){_eagbc =1;
};case LocSelectIfBoth :if (_cffeg ==SizeSelectIfLT &&(_bdfdge < _afdg &&_cedd < _aefed ))||(_cffeg ==SizeSelectIfGT &&(_bdfdge > _afdg &&_cedd > _aefed ))||(_cffeg ==SizeSelectIfLTE &&(_bdfdge <=_afdg &&_cedd <=_aefed ))||(_cffeg ==SizeSelectIfGTE &&(_bdfdge >=_afdg &&_cedd >=_aefed ))||(_cffeg ==SizeSelectIfEQ &&(_bdfdge ==_afdg &&_cedd ==_aefed )){_eagbc =1;
};};_cbddg .AddInt (_eagbc );};return _cbddg ,nil ;};func (_abfc *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _cegaf ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
if _abfc ==nil {return nil ,_c .Error (_cegaf ,"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 (_abfc .Values )-1{return nil ,_c .Errorf (_cegaf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _abfc .Values [i ],nil ;};type SizeComparison int ;func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_ddde bool ,_bgdd error ){const _cfcd ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_gcbd ,_bbbd :=p1 .Width ,p1 .Height ;_bfcag ,_agcg :=p3 .Width ,p3 .Height ;if _f .Abs (_gcbd -_bfcag )> maxDiffW {return false ,nil ;};if _f .Abs (_bbbd -_agcg )> maxDiffH {return false ,nil ;};_acbd :=int (float32 (area1 )*(1.0-rank )+0.5);_decc :=int (float32 (area3 )*(1.0-rank )+0.5);
var _cccc ,_fcdb int ;if delX >=0{_cccc =int (delX +0.5);}else {_cccc =int (delX -0.5);};if delY >=0{_fcdb =int (delY +0.5);}else {_fcdb =int (delY -0.5);};_bfaca :=p1 .CreateTemplate ();if _bgdd =_bfaca .RasterOperation (0,0,_gcbd ,_bbbd ,PixSrc ,p1 ,0,0);
_bgdd !=nil {return false ,_c .Wrap (_bgdd ,_cfcd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bgdd =_bfaca .RasterOperation (_cccc ,_fcdb ,_gcbd ,_bbbd ,PixNotSrcAndDst ,p4 ,0,0);_bgdd !=nil {return false ,_c .Wrap (_bgdd ,_cfcd ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_ddde ,_bgdd =_bfaca .ThresholdPixelSum (_acbd ,tab8 );if _bgdd !=nil {return false ,_c .Wrap (_bgdd ,_cfcd ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _ddde {return false ,nil ;};if _bgdd =_bfaca .RasterOperation (_cccc ,_fcdb ,_bfcag ,_agcg ,PixSrc ,p3 ,0,0);
_bgdd !=nil {return false ,_c .Wrap (_bgdd ,_cfcd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bgdd =_bfaca .RasterOperation (0,0,_bfcag ,_agcg ,PixNotSrcAndDst ,p2 ,0,0);_bgdd !=nil {return false ,_c .Wrap (_bgdd ,_cfcd ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_ddde ,_bgdd =_bfaca .ThresholdPixelSum (_decc ,tab8 );if _bgdd !=nil {return false ,_c .Wrap (_bgdd ,_cfcd ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_ddde ,nil ;};type BoundaryCondition int ;func MakePixelSumTab8 ()[]int {return _fadcb ()};
const (Vanilla Color =iota ;Chocolate ;);const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_adg *Bitmap )SetPadBits (value int ){_adg .setPadBits (value )};func (_fcda *Bitmap )setFourBytes (_eefd int ,_bcdf uint32 )error {if _eefd +3> len (_fcda .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",_eefd );
};_fcda .Data [_eefd ]=byte ((_bcdf &0xff000000)>>24);_fcda .Data [_eefd +1]=byte ((_bcdf &0xff0000)>>16);_fcda .Data [_eefd +2]=byte ((_bcdf &0xff00)>>8);_fcda .Data [_eefd +3]=byte (_bcdf &0xff);return nil ;};func _bbf (_bbbf ,_bdd *Bitmap ,_aafg ,_deda ,_acb ,_egg ,_bff ,_dddc ,_gee ,_bega int ,_febf CombinationOperator ,_aceb int )error {var _gdbe int ;
_fbfc :=func (){_gdbe ++;_acb +=_bdd .RowStride ;_egg +=_bbbf .RowStride ;_bff +=_bbbf .RowStride };for _gdbe =_aafg ;_gdbe < _deda ;_fbfc (){var _fgga uint16 ;_bba :=_acb ;for _efgd :=_egg ;_efgd <=_bff ;_efgd ++{_dgf ,_cgdg :=_bdd .GetByte (_bba );if _cgdg !=nil {return _cgdg ;
};_efc ,_cgdg :=_bbbf .GetByte (_efgd );if _cgdg !=nil {return _cgdg ;};_fgga =(_fgga |(uint16 (_efc )&0xff))<<uint (_bega );_efc =byte (_fgga >>8);if _cgdg =_bdd .SetByte (_bba ,_fbdb (_dgf ,_efc ,_febf ));_cgdg !=nil {return _cgdg ;};_bba ++;_fgga <<=uint (_gee );
if _efgd ==_bff {_efc =byte (_fgga >>(8-uint8 (_bega )));if _aceb !=0{_efc =_ddab (uint (8+_dddc ),_efc );};_dgf ,_cgdg =_bdd .GetByte (_bba );if _cgdg !=nil {return _cgdg ;};if _cgdg =_bdd .SetByte (_bba ,_fbdb (_dgf ,_efc ,_febf ));_cgdg !=nil {return _cgdg ;
};};};};return nil ;};func (_cddb *ClassedPoints )validateIntSlice ()error {const _bcfd ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_bafb :=range _cddb .IntSlice {if _bafb >=(_cddb .Points .Size ()){return _c .Errorf (_bcfd ,"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",_bafb ,_cddb .Points .Size ());
};};return nil ;};type fillSegment struct{_dgge int ;_gfgd int ;_egdd int ;_bcab int ;};func _eccd (_fee ,_agdeb *Bitmap ,_cecge CombinationOperator )*Bitmap {_cebb :=New (_fee .Width ,_fee .Height );for _dade :=0;_dade < len (_cebb .Data );_dade ++{_cebb .Data [_dade ]=_fbdb (_fee .Data [_dade ],_agdeb .Data [_dade ],_cecge );
};return _cebb ;};func _ceeea (_dfgd *Bitmap ,_bafcd ,_abcc ,_fcag ,_gccb int ,_gebb RasterOperator ){if _bafcd < 0{_fcag +=_bafcd ;_bafcd =0;};_cbgbd :=_bafcd +_fcag -_dfgd .Width ;if _cbgbd > 0{_fcag -=_cbgbd ;};if _abcc < 0{_gccb +=_abcc ;_abcc =0;};
_bdgc :=_abcc +_gccb -_dfgd .Height ;if _bdgc > 0{_gccb -=_bdgc ;};if _fcag <=0||_gccb <=0{return ;};if (_bafcd &7)==0{_bbfc (_dfgd ,_bafcd ,_abcc ,_fcag ,_gccb ,_gebb );}else {_fcfc (_dfgd ,_bafcd ,_abcc ,_fcag ,_gccb ,_gebb );};};func _bag (_efa ,_gece *Bitmap ,_dac int ,_cdc []byte ,_cgg int )(_bbb error ){const _ggc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_bcb ,_fgd ,_beg ,_gbba ,_aab ,_dda ,_gea ,_geg int ;_gcgb ,_bd ,_dee ,_fbc uint32 ;_cae ,_ebe byte ;_dbgb uint16 ;);_ggf :=make ([]byte ,4);_bgfd :=make ([]byte ,4);for _beg =0;_beg < _efa .Height -1;_beg ,_gbba =_beg +2,_gbba +1{_bcb =_beg *_efa .RowStride ;
_fgd =_gbba *_gece .RowStride ;for _aab ,_dda =0,0;_aab < _cgg ;_aab ,_dda =_aab +4,_dda +1{for _gea =0;_gea < 4;_gea ++{_geg =_bcb +_aab +_gea ;if _geg <=len (_efa .Data )-1&&_geg < _bcb +_efa .RowStride {_ggf [_gea ]=_efa .Data [_geg ];}else {_ggf [_gea ]=0x00;
};_geg =_bcb +_efa .RowStride +_aab +_gea ;if _geg <=len (_efa .Data )-1&&_geg < _bcb +(2*_efa .RowStride ){_bgfd [_gea ]=_efa .Data [_geg ];}else {_bgfd [_gea ]=0x00;};};_gcgb =_gbb .BigEndian .Uint32 (_ggf );_bd =_gbb .BigEndian .Uint32 (_bgfd );_dee =_gcgb &_bd ;
_dee |=_dee <<1;_fbc =_gcgb |_bd ;_fbc &=_fbc <<1;_bd =_dee |_fbc ;_bd &=0xaaaaaaaa;_gcgb =_bd |(_bd <<7);_cae =byte (_gcgb >>24);_ebe =byte ((_gcgb >>8)&0xff);_geg =_fgd +_dda ;if _geg +1==len (_gece .Data )-1||_geg +1>=_fgd +_gece .RowStride {if _bbb =_gece .SetByte (_geg ,_cdc [_cae ]);
_bbb !=nil {return _c .Wrapf (_bbb ,_ggc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_geg );};}else {_dbgb =(uint16 (_cdc [_cae ])<<8)|uint16 (_cdc [_ebe ]);if _bbb =_gece .setTwoBytes (_geg ,_dbgb );_bbb !=nil {return _c .Wrapf (_bbb ,_ggc ,"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",_geg );
};_dda ++;};};};return nil ;};func init (){for _gbda :=0;_gbda < 256;_gbda ++{_feg [_gbda ]=uint8 (_gbda &0x1)+(uint8 (_gbda >>1)&0x1)+(uint8 (_gbda >>2)&0x1)+(uint8 (_gbda >>3)&0x1)+(uint8 (_gbda >>4)&0x1)+(uint8 (_gbda >>5)&0x1)+(uint8 (_gbda >>6)&0x1)+(uint8 (_gbda >>7)&0x1);
};};func _ded (_edag *Bitmap ,_gae int ,_afa []byte )(_fd *Bitmap ,_dbd error ){const _ceee ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _edag ==nil {return nil ,_c .Error (_ceee ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _gae < 1||_gae > 4{return nil ,_c .Error (_ceee ,"\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 _edag .Height <=1{return nil ,_c .Errorf (_ceee ,"\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",_edag .Height );
};_fd =New (_edag .Width /2,_edag .Height /2);if _afa ==nil {_afa =_cgc ();};_bec :=_fafb (_edag .RowStride ,2*_fd .RowStride );switch _gae {case 1:_dbd =_dd (_edag ,_fd ,_gae ,_afa ,_bec );case 2:_dbd =_bag (_edag ,_fd ,_gae ,_afa ,_bec );case 3:_dbd =_bed (_edag ,_fd ,_gae ,_afa ,_bec );
case 4:_dbd =_ddda (_edag ,_fd ,_gae ,_afa ,_bec );};if _dbd !=nil {return nil ,_dbd ;};return _fd ,nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_cfdc float64 ,_ecbg error ){const _fgdc ="\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 _cfdc ,_c .Error (_fgdc ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _cfdc ,_c .Error (_fgdc ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _cfdc ,_c .Error (_fgdc ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_dcgd ,_ggaf :=bm1 .Width ,bm1 .Height ;_bdfe ,_fce :=bm2 .Width ,bm2 .Height ;
if _fbda (_dcgd -_bdfe )> maxDiffW {return 0,nil ;};if _fbda (_ggaf -_fce )> maxDiffH {return 0,nil ;};var _dcf ,_gdgf int ;if delX >=0{_dcf =int (delX +0.5);}else {_dcf =int (delX -0.5);};if delY >=0{_gdgf =int (delY +0.5);}else {_gdgf =int (delY -0.5);
};_eddf :=bm1 .createTemplate ();if _ecbg =_eddf .RasterOperation (_dcf ,_gdgf ,_bdfe ,_fce ,PixSrc ,bm2 ,0,0);_ecbg !=nil {return _cfdc ,_c .Wrap (_ecbg ,_fgdc ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _ecbg =_eddf .RasterOperation (0,0,_dcgd ,_ggaf ,PixSrcAndDst ,bm1 ,0,0);
_ecbg !=nil {return _cfdc ,_c .Wrap (_ecbg ,_fgdc ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_afc :=_eddf .countPixels ();_cfdc =float64 (_afc )*float64 (_afc )/(float64 (area1 )*float64 (area2 ));return _cfdc ,nil ;};func (_cbfg *Bitmap )SetPixel (x ,y int ,pixel byte )error {_bbc :=_cbfg .GetByteIndex (x ,y );
if _bbc > len (_cbfg .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",_bbc );};_bcd :=_cbfg .GetBitOffset (x );
_afbg :=uint (7-_bcd );_ega :=_cbfg .Data [_bbc ];var _ccac byte ;if pixel ==1{_ccac =_ega |(pixel &0x01<<_afbg );}else {_ccac =_ega &^(1<<_afbg );};_cbfg .Data [_bbc ]=_ccac ;return nil ;};type byWidth Bitmaps ;type Bitmap struct{Width ,Height int ;BitmapNumber int ;
RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};type Getter interface{GetBitmap ()*Bitmap ;};func (_eae *Bitmap )String ()string {var _dae ="\u000a";for _deg :=0;_deg < _eae .Height ;_deg ++{var _dfc string ;
for _eddg :=0;_eddg < _eae .Width ;_eddg ++{_gag :=_eae .GetPixel (_eddg ,_deg );if _gag {_dfc +="\u0031";}else {_dfc +="\u0030";};};_dae +=_dfc +"\u000a";};return _dae ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _dbda ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_dgbb ,_cdd :=p1 .Width ,p1 .Height ;_efac ,_eegad :=p3 .Width ,p3 .Height ;if _f .Abs (_dgbb -_efac )> maxDiffW {return false ,nil ;};if _f .Abs (_cdd -_eegad )> maxDiffH {return false ,nil ;};_agbd :=int (delX +_f .Sign (delX )*0.5);_cdgd :=int (delY +_f .Sign (delY )*0.5);
var _cfgf error ;_dcbc :=p1 .CreateTemplate ();if _cfgf =_dcbc .RasterOperation (0,0,_dgbb ,_cdd ,PixSrc ,p1 ,0,0);_cfgf !=nil {return false ,_c .Wrap (_cfgf ,_dbda ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _cfgf =_dcbc .RasterOperation (_agbd ,_cdgd ,_dgbb ,_cdd ,PixNotSrcAndDst ,p4 ,0,0);
_cfgf !=nil {return false ,_c .Wrap (_cfgf ,_dbda ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _dcbc .Zero (){return false ,nil ;};if _cfgf =_dcbc .RasterOperation (_agbd ,_cdgd ,_efac ,_eegad ,PixSrc ,p3 ,0,0);_cfgf !=nil {return false ,_c .Wrap (_cfgf ,_dbda ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
};if _cfgf =_dcbc .RasterOperation (0,0,_efac ,_eegad ,PixNotSrcAndDst ,p2 ,0,0);_cfgf !=nil {return false ,_c .Wrap (_cfgf ,_dbda ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _dcbc .Zero (),nil ;};func (_cag *Bitmap )SetDefaultPixel (){for _gcfd :=range _cag .Data {_cag .Data [_gcfd ]=byte (0xff);
};};type SizeSelection int ;func _dga ()(_eef [256]uint32 ){for _ede :=0;_ede < 256;_ede ++{if _ede &0x01!=0{_eef [_ede ]|=0xf;};if _ede &0x02!=0{_eef [_ede ]|=0xf0;};if _ede &0x04!=0{_eef [_ede ]|=0xf00;};if _ede &0x08!=0{_eef [_ede ]|=0xf000;};if _ede &0x10!=0{_eef [_ede ]|=0xf0000;
};if _ede &0x20!=0{_eef [_ede ]|=0xf00000;};if _ede &0x40!=0{_eef [_ede ]|=0xf000000;};if _ede &0x80!=0{_eef [_ede ]|=0xf0000000;};};return _eef ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_fff float64 ,_bgdc error ){const _bggc ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_c .Error (_bggc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_c .Error (_bggc ,"\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 (_bggc ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_bagc ,_bcde :=bm1 .Width ,bm1 .Height ;_adgee ,_fgee :=bm2 .Width ,bm2 .Height ;
_edcb :=_fbda (_bagc -_adgee );if _edcb > maxDiffW {return 0,nil ;};_dbce :=_fbda (_bcde -_fgee );if _dbce > maxDiffH {return 0,nil ;};var _decd ,_ccaeg int ;if delX >=0{_decd =int (delX +0.5);}else {_decd =int (delX -0.5);};if delY >=0{_ccaeg =int (delY +0.5);
}else {_ccaeg =int (delY -0.5);};_bgba :=_adeb (_ccaeg ,0);_cgga :=_fafb (_fgee +_ccaeg ,_bcde );_afgda :=bm1 .RowStride *_bgba ;_cgfc :=bm2 .RowStride *(_bgba -_ccaeg );_ebb :=_adeb (_decd ,0);_ecbe :=_fafb (_adgee +_decd ,_bagc );_ccbaf :=bm2 .RowStride ;
var _fbfd ,_efbca int ;if _decd >=8{_fbfd =_decd >>3;_afgda +=_fbfd ;_ebb -=_fbfd <<3;_ecbe -=_fbfd <<3;_decd &=7;}else if _decd <=-8{_efbca =-((_decd +7)>>3);_cgfc +=_efbca ;_ccbaf -=_efbca ;_decd +=_efbca <<3;};if _ebb >=_ecbe ||_bgba >=_cgga {return 0,nil ;
};_cfbae :=(_ecbe +7)>>3;var (_bdfd ,_aaa ,_aeeg byte ;_bfeac ,_bebb ,_gbgg int ;);switch {case _decd ==0:for _gbgg =_bgba ;_gbgg < _cgga ;_gbgg ,_afgda ,_cgfc =_gbgg +1,_afgda +bm1 .RowStride ,_cgfc +bm2 .RowStride {for _bebb =0;_bebb < _cfbae ;_bebb ++{_aeeg =bm1 .Data [_afgda +_bebb ]&bm2 .Data [_cgfc +_bebb ];
_bfeac +=tab [_aeeg ];};};case _decd > 0:if _ccbaf < _cfbae {for _gbgg =_bgba ;_gbgg < _cgga ;_gbgg ,_afgda ,_cgfc =_gbgg +1,_afgda +bm1 .RowStride ,_cgfc +bm2 .RowStride {_bdfd ,_aaa =bm1 .Data [_afgda ],bm2 .Data [_cgfc ]>>uint (_decd );_aeeg =_bdfd &_aaa ;
_bfeac +=tab [_aeeg ];for _bebb =1;_bebb < _ccbaf ;_bebb ++{_bdfd ,_aaa =bm1 .Data [_afgda +_bebb ],(bm2 .Data [_cgfc +_bebb ]>>uint (_decd ))|(bm2 .Data [_cgfc +_bebb -1]<<uint (8-_decd ));_aeeg =_bdfd &_aaa ;_bfeac +=tab [_aeeg ];};_bdfd =bm1 .Data [_afgda +_bebb ];
_aaa =bm2 .Data [_cgfc +_bebb -1]<<uint (8-_decd );_aeeg =_bdfd &_aaa ;_bfeac +=tab [_aeeg ];};}else {for _gbgg =_bgba ;_gbgg < _cgga ;_gbgg ,_afgda ,_cgfc =_gbgg +1,_afgda +bm1 .RowStride ,_cgfc +bm2 .RowStride {_bdfd ,_aaa =bm1 .Data [_afgda ],bm2 .Data [_cgfc ]>>uint (_decd );
_aeeg =_bdfd &_aaa ;_bfeac +=tab [_aeeg ];for _bebb =1;_bebb < _cfbae ;_bebb ++{_bdfd =bm1 .Data [_afgda +_bebb ];_aaa =(bm2 .Data [_cgfc +_bebb ]>>uint (_decd ))|(bm2 .Data [_cgfc +_bebb -1]<<uint (8-_decd ));_aeeg =_bdfd &_aaa ;_bfeac +=tab [_aeeg ];
};};};default:if _cfbae < _ccbaf {for _gbgg =_bgba ;_gbgg < _cgga ;_gbgg ,_afgda ,_cgfc =_gbgg +1,_afgda +bm1 .RowStride ,_cgfc +bm2 .RowStride {for _bebb =0;_bebb < _cfbae ;_bebb ++{_bdfd =bm1 .Data [_afgda +_bebb ];_aaa =bm2 .Data [_cgfc +_bebb ]<<uint (-_decd );
_aaa |=bm2 .Data [_cgfc +_bebb +1]>>uint (8+_decd );_aeeg =_bdfd &_aaa ;_bfeac +=tab [_aeeg ];};};}else {for _gbgg =_bgba ;_gbgg < _cgga ;_gbgg ,_afgda ,_cgfc =_gbgg +1,_afgda +bm1 .RowStride ,_cgfc +bm2 .RowStride {for _bebb =0;_bebb < _cfbae -1;_bebb ++{_bdfd =bm1 .Data [_afgda +_bebb ];
_aaa =bm2 .Data [_cgfc +_bebb ]<<uint (-_decd );_aaa |=bm2 .Data [_cgfc +_bebb +1]>>uint (8+_decd );_aeeg =_bdfd &_aaa ;_bfeac +=tab [_aeeg ];};_bdfd =bm1 .Data [_afgda +_bebb ];_aaa =bm2 .Data [_cgfc +_bebb ]<<uint (-_decd );_aeeg =_bdfd &_aaa ;_bfeac +=tab [_aeeg ];
};};};_fff =float64 (_bfeac )*float64 (_bfeac )/(float64 (area1 )*float64 (area2 ));return _fff ,nil ;};func TstAddSymbol (t *_d .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_fagd :=_a .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );
bms .AddBox (&_fagd );*x +=sym .Width +space ;};func (_gfae *Bitmap )clearAll ()error {return _gfae .RasterOperation (0,0,_gfae .Width ,_gfae .Height ,PixClr ,nil ,0,0);};const (_dccgd shift =iota ;_gbded ;);func (_bafe CombinationOperator )String ()string {var _baff string ;
switch _bafe {case CmbOpOr :_baff ="\u004f\u0052";case CmbOpAnd :_baff ="\u0041\u004e\u0044";case CmbOpXor :_baff ="\u0058\u004f\u0052";case CmbOpXNor :_baff ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_baff ="\u0052E\u0050\u004c\u0041\u0043\u0045";
case CmbOpNot :_baff ="\u004e\u004f\u0054";};return _baff ;};func (_efed *Bitmaps )SortByHeight (){_dbcac :=(*byHeight )(_efed );_b .Sort (_dbcac )};func (_gcd *Bitmap )Copy ()*Bitmap {_abc :=make ([]byte ,len (_gcd .Data ));copy (_abc ,_gcd .Data );return &Bitmap {Width :_gcd .Width ,Height :_gcd .Height ,RowStride :_gcd .RowStride ,Data :_abc ,Color :_gcd .Color ,Text :_gcd .Text ,BitmapNumber :_gcd .BitmapNumber ,Special :_gcd .Special };
};func _gceb (_afcc *Bitmap ,_egab *_f .Stack ,_cdfe ,_fdf int )(_ecfc *_a .Rectangle ,_fcef error ){const _bebe ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _afcc ==nil {return nil ,_c .Error (_bebe ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _egab ==nil {return nil ,_c .Error (_bebe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_fefac ,_bgae :=_afcc .Width ,_afcc .Height ;_bfab :=_fefac -1;_bddf :=_bgae -1;if _cdfe < 0||_cdfe > _bfab ||_fdf < 0||_fdf > _bddf ||!_afcc .GetPixel (_cdfe ,_fdf ){return nil ,nil ;
};_eeec :=_a .Rect (100000,100000,0,0);if _fcef =_geedf (_egab ,_cdfe ,_cdfe ,_fdf ,1,_bddf ,&_eeec );_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fcef =_geedf (_egab ,_cdfe ,_cdfe ,_fdf +1,-1,_bddf ,&_eeec );
_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_eeec .Min .X ,_eeec .Max .X =_cdfe ,_cdfe ;_eeec .Min .Y ,_eeec .Max .Y =_fdf ,_fdf ;var (_egag *fillSegment ;
_fcdcg int ;);for _egab .Len ()> 0{if _egag ,_fcef =_ggdcd (_egab );_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"");};_fdf =_egag ._egdd ;for _cdfe =_egag ._dgge -1;_cdfe >=0&&_afcc .GetPixel (_cdfe ,_fdf );_cdfe --{if _fcef =_afcc .SetPixel (_cdfe ,_fdf ,0);
_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _cdfe >=_egag ._dgge -1{for {for _cdfe ++;_cdfe <=_egag ._gfgd +1&&_cdfe <=_bfab &&!_afcc .GetPixel (_cdfe ,_fdf );_cdfe ++{};_fcdcg =_cdfe ;if !(_cdfe <=_egag ._gfgd +1&&_cdfe <=_bfab ){break ;
};for ;_cdfe <=_bfab &&_afcc .GetPixel (_cdfe ,_fdf );_cdfe ++{if _fcef =_afcc .SetPixel (_cdfe ,_fdf ,0);_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fcef =_geedf (_egab ,_fcdcg ,_cdfe -1,_egag ._egdd ,_egag ._bcab ,_bddf ,&_eeec );
_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cdfe > _egag ._gfgd {if _fcef =_geedf (_egab ,_egag ._gfgd +1,_cdfe -1,_egag ._egdd ,-_egag ._bcab ,_bddf ,&_eeec );_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_fcdcg =_cdfe +1;if _fcdcg < _egag ._dgge {if _fcef =_geedf (_egab ,_fcdcg ,_egag ._dgge -1,_egag ._egdd ,-_egag ._bcab ,_bddf ,&_eeec );_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_cdfe =_egag ._dgge ;for {for ;_cdfe <=_bfab &&_afcc .GetPixel (_cdfe ,_fdf );_cdfe ++{if _fcef =_afcc .SetPixel (_cdfe ,_fdf ,0);_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fcef =_geedf (_egab ,_fcdcg ,_cdfe -1,_egag ._egdd ,_egag ._bcab ,_bddf ,&_eeec );
_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cdfe > _egag ._gfgd {if _fcef =_geedf (_egab ,_egag ._gfgd +1,_cdfe -1,_egag ._egdd ,-_egag ._bcab ,_bddf ,&_eeec );_fcef !=nil {return nil ,_c .Wrap (_fcef ,_bebe ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _cdfe ++;_cdfe <=_egag ._gfgd +1&&_cdfe <=_bfab &&!_afcc .GetPixel (_cdfe ,_fdf );_cdfe ++{};_fcdcg =_cdfe ;if !(_cdfe <=_egag ._gfgd +1&&_cdfe <=_bfab ){break ;};};};_eeec .Max .X ++;_eeec .Max .Y ++;return &_eeec ,nil ;};func (_bcga *Bitmaps )GetBox (i int )(*_a .Rectangle ,error ){const _cgbgg ="\u0047\u0065\u0074\u0042\u006f\u0078";
if _bcga ==nil {return nil ,_c .Error (_cgbgg ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_bcga .Boxes )-1{return nil ,_c .Errorf (_cgbgg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _bcga .Boxes [i ],nil ;};func (_bbdbag *Bitmaps )WidthSorter ()func (_ecbb ,_ddgc int )bool {return func (_bgag ,_fggg int )bool {return _bbdbag .Values [_bgag ].Width < _bbdbag .Values [_fggg ].Width };};func (_gaccg Points )GetGeometry (i int )(_fgdgf ,_fgfb float32 ,_gcgg error ){if i > len (_gaccg )-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 );
};_agbag :=_gaccg [i ];return _agbag .X ,_agbag .Y ,nil ;};func (_bgfge *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _ddcb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _bgfge ==nil {return nil ,_c .Error (_ddcb ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if s ==nil {return nil ,_c .Error (_ddcb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_dbf :=len (_bgfge .Values );_bbdba :=&Bitmaps {Values :make ([]*Bitmap ,_dbf ),Boxes :make ([]*_a .Rectangle ,_dbf )};
var (_bcef ,_dbca *Bitmap ;_gafg *_a .Rectangle ;_ecaf error ;);for _bede :=0;_bede < _dbf ;_bede ++{if _bcef ,_ecaf =_bgfge .GetBitmap (_bede );_ecaf !=nil {return nil ,_c .Wrap (_ecaf ,_ddcb ,"");};if _gafg ,_ecaf =_bgfge .GetBox (_bede );_ecaf !=nil {return nil ,_c .Wrap (_ecaf ,_ddcb ,"");
};if _dbca ,_ecaf =s .clipRectangle (_gafg ,nil );_ecaf !=nil {return nil ,_c .Wrap (_ecaf ,_ddcb ,"");};if _dbca ,_ecaf =_dbca .And (_bcef );_ecaf !=nil {return nil ,_c .Wrap (_ecaf ,_ddcb ,"");};_bbdba .Values [_bede ]=_dbca ;_bbdba .Boxes [_bede ]=_gafg ;
};return _bbdba ,nil ;};func _dd (_cba ,_cde *Bitmap ,_gfg int ,_gfa []byte ,_edec int )(_dgb error ){const _eea ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_ggb ,_cfd ,_bea ,_da ,_eead ,_dca ,_fafe ,_dba int ;
_cbe ,_gcg uint32 ;_ccff ,_cfa byte ;_egc uint16 ;);_afb :=make ([]byte ,4);_ggbg :=make ([]byte ,4);for _bea =0;_bea < _cba .Height -1;_bea ,_da =_bea +2,_da +1{_ggb =_bea *_cba .RowStride ;_cfd =_da *_cde .RowStride ;for _eead ,_dca =0,0;_eead < _edec ;
_eead ,_dca =_eead +4,_dca +1{for _fafe =0;_fafe < 4;_fafe ++{_dba =_ggb +_eead +_fafe ;if _dba <=len (_cba .Data )-1&&_dba < _ggb +_cba .RowStride {_afb [_fafe ]=_cba .Data [_dba ];}else {_afb [_fafe ]=0x00;};_dba =_ggb +_cba .RowStride +_eead +_fafe ;
if _dba <=len (_cba .Data )-1&&_dba < _ggb +(2*_cba .RowStride ){_ggbg [_fafe ]=_cba .Data [_dba ];}else {_ggbg [_fafe ]=0x00;};};_cbe =_gbb .BigEndian .Uint32 (_afb );_gcg =_gbb .BigEndian .Uint32 (_ggbg );_gcg |=_cbe ;_gcg |=_gcg <<1;_gcg &=0xaaaaaaaa;
_cbe =_gcg |(_gcg <<7);_ccff =byte (_cbe >>24);_cfa =byte ((_cbe >>8)&0xff);_dba =_cfd +_dca ;if _dba +1==len (_cde .Data )-1||_dba +1>=_cfd +_cde .RowStride {_cde .Data [_dba ]=_gfa [_ccff ];}else {_egc =(uint16 (_gfa [_ccff ])<<8)|uint16 (_gfa [_cfa ]);
if _dgb =_cde .setTwoBytes (_dba ,_egc );_dgb !=nil {return _c .Wrapf (_dgb ,_eea ,"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",_dba );
};_dca ++;};};};return nil ;};func (_bfe *Bitmap )InverseData (){_bfe .inverseData ()};func (_cgce *ClassedPoints )SortByX (){_cgce ._bgga =_cgce .xSortFunction ();_b .Sort (_cgce )};func _edb (_cccce *Bitmap ,_bcf int )(*Bitmap ,error ){const _cbdag ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
if _cccce ==nil {return nil ,_c .Error (_cbdag ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bcf <=0{return nil ,_c .Error (_cbdag ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
};if _bcf ==1{_fadb ,_agfc :=_dffg (nil ,_cccce );if _agfc !=nil {return nil ,_c .Wrap (_agfc ,_cbdag ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _fadb ,nil ;};_ddge ,_bafcg :=_aef (_cccce ,_bcf ,_bcf );if _bafcg !=nil {return nil ,_c .Wrap (_bafcg ,_cbdag ,"");
};return _ddge ,nil ;};func (_eeff *Bitmap )setTwoBytes (_bgfg int ,_fcbc uint16 )error {if _bgfg +1> len (_eeff .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",_bgfg );
};_eeff .Data [_bgfg ]=byte ((_fcbc &0xff00)>>8);_eeff .Data [_bgfg +1]=byte (_fcbc &0xff);return nil ;};func _cead (_dggf ,_bdfbf int ,_bcda string )*Selection {_ebcf :=&Selection {Height :_dggf ,Width :_bdfbf ,Name :_bcda };_ebcf .Data =make ([][]SelectionValue ,_dggf );
for _fccg :=0;_fccg < _dggf ;_fccg ++{_ebcf .Data [_fccg ]=make ([]SelectionValue ,_bdfbf );};return _ebcf ;};func (_gdgg *Bitmaps )selectByIndexes (_cfbg []int )(*Bitmaps ,error ){_acfgc :=&Bitmaps {};for _ ,_fdgg :=range _cfbg {_acaeg ,_bdea :=_gdgg .GetBitmap (_fdgg );
if _bdea !=nil {return nil ,_c .Wrap (_bdea ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_acfgc .AddBitmap (_acaeg );};return _acfgc ,nil ;};func _fbda (_gefa int )int {if _gefa < 0{return -_gefa ;};return _gefa ;
};func _bbfc (_dbdcca *Bitmap ,_cdcdf ,_fbac int ,_ffgd ,_gecb int ,_gcde RasterOperator ){var (_cecd int ;_dbea byte ;_cebbg ,_ecfa int ;_egcdc int ;);_gffa :=_ffgd >>3;_cabe :=_ffgd &7;if _cabe > 0{_dbea =_ccecf [_cabe ];};_cecd =_dbdcca .RowStride *_fbac +(_cdcdf >>3);
switch _gcde {case PixClr :for _cebbg =0;_cebbg < _gecb ;_cebbg ++{_egcdc =_cecd +_cebbg *_dbdcca .RowStride ;for _ecfa =0;_ecfa < _gffa ;_ecfa ++{_dbdcca .Data [_egcdc ]=0x0;_egcdc ++;};if _cabe > 0{_dbdcca .Data [_egcdc ]=_cafgb (_dbdcca .Data [_egcdc ],0x0,_dbea );
};};case PixSet :for _cebbg =0;_cebbg < _gecb ;_cebbg ++{_egcdc =_cecd +_cebbg *_dbdcca .RowStride ;for _ecfa =0;_ecfa < _gffa ;_ecfa ++{_dbdcca .Data [_egcdc ]=0xff;_egcdc ++;};if _cabe > 0{_dbdcca .Data [_egcdc ]=_cafgb (_dbdcca .Data [_egcdc ],0xff,_dbea );
};};case PixNotDst :for _cebbg =0;_cebbg < _gecb ;_cebbg ++{_egcdc =_cecd +_cebbg *_dbdcca .RowStride ;for _ecfa =0;_ecfa < _gffa ;_ecfa ++{_dbdcca .Data [_egcdc ]=^_dbdcca .Data [_egcdc ];_egcdc ++;};if _cabe > 0{_dbdcca .Data [_egcdc ]=_cafgb (_dbdcca .Data [_egcdc ],^_dbdcca .Data [_egcdc ],_dbea );
};};};};func _eggb (_bcg *Bitmap ,_dceaa ...MorphProcess )(_ggaec *Bitmap ,_gge error ){const _aagb ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _bcg ==nil {return nil ,_c .Error (_aagb ,"\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 (_dceaa )==0{return nil ,_c .Error (_aagb ,"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 _gge =_aadfa (_dceaa ...);
_gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"");};var _fefb ,_aeee ,_fcad int ;_ggaec =_bcg .Copy ();for _ ,_cefd :=range _dceaa {switch _cefd .Operation {case MopDilation :_fefb ,_aeee =_cefd .getWidthHeight ();_ggaec ,_gge =DilateBrick (nil ,_ggaec ,_fefb ,_aeee );
if _gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"");};case MopErosion :_fefb ,_aeee =_cefd .getWidthHeight ();_ggaec ,_gge =_eag (nil ,_ggaec ,_fefb ,_aeee );if _gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"");};case MopOpening :_fefb ,_aeee =_cefd .getWidthHeight ();
_ggaec ,_gge =_ebdg (nil ,_ggaec ,_fefb ,_aeee );if _gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"");};case MopClosing :_fefb ,_aeee =_cefd .getWidthHeight ();_ggaec ,_gge =_fabe (nil ,_ggaec ,_fefb ,_aeee );if _gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"");
};case MopRankBinaryReduction :_ggaec ,_gge =_fge (_ggaec ,_cefd .Arguments ...);if _gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"");};case MopReplicativeBinaryExpansion :_ggaec ,_gge =_edb (_ggaec ,_cefd .Arguments [0]);if _gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"");
};case MopAddBorder :_fcad =_cefd .Arguments [0];_ggaec ,_gge =_ggaec .AddBorder (_fcad ,0);if _gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"");};default:return nil ,_c .Error (_aagb ,"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 _fcad > 0{_ggaec ,_gge =_ggaec .RemoveBorder (_fcad );if _gge !=nil {return nil ,_c .Wrap (_gge ,_aagb ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _ggaec ,nil ;};func _dffg (_aefe ,_eca *Bitmap )(*Bitmap ,error ){if _eca ==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 _eca ==_aefe {return _aefe ,nil ;};if _aefe ==nil {_aefe =_eca .createTemplate ();copy (_aefe .Data ,_eca .Data );return _aefe ,nil ;};_bgced :=_aefe .resizeImageData (_eca );if _bgced !=nil {return nil ,_c .Wrap (_bgced ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_aefe .Text =_eca .Text ;copy (_aefe .Data ,_eca .Data );return _aefe ,nil ;};func (_bbge *Bitmap )inverseData (){if _fgdg :=_bbge .RasterOperation (0,0,_bbge .Width ,_bbge .Height ,PixNotDst ,nil ,0,0);_fgdg !=nil {_fc .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_fgdg );
};if _bbge .Color ==Chocolate {_bbge .Color =Vanilla ;}else {_bbge .Color =Chocolate ;};};func TstWordBitmap (t *_d .T ,scale ...int )*Bitmap {_ecccd :=1;if len (scale )> 0{_ecccd =scale [0];};_feedb :=3;_afacg :=9+7+15+2*_feedb ;_dbae :=5+_feedb +5;_gbacg :=New (_afacg *_ecccd ,_dbae *_ecccd );
_geaf :=&Bitmaps {};var _efgbf *int ;_feedb *=_ecccd ;_faab :=0;_efgbf =&_faab ;_eabf :=0;_ffbaf :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );_ffbaf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,_feedb );
_ffbaf =TstISymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );_ffbaf =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,_feedb );_ffbaf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );
_ffbaf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );_ffbaf =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,0);*_efgbf =0;_eabf =5*_ecccd +_feedb ;_ffbaf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );
_ffbaf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,_feedb );_ffbaf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );_ffbaf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );
_ffbaf =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );_ffbaf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,1*_ecccd );_ffbaf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_geaf ,_ffbaf ,_efgbf ,_eabf ,0);
TstWriteSymbols (t ,_geaf ,_gbacg );return _gbacg ;};func _gcdcf (_efgb ,_ccbb *Bitmap ,_ageg *Selection )(*Bitmap ,error ){const _degee ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _ebdd ,_gadg int ;
if _ccbb ==nil {return nil ,_c .Error (_degee ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _ageg ==nil {return nil ,_c .Error (_degee ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};_ebdd =_ageg .Width ;_gadg =_ageg .Height ;if _ebdd ==0||_gadg ==0{return nil ,_c .Error (_degee ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _efgb ==nil {return _ccbb .createTemplate (),nil ;};if _bfcb :=_efgb .resizeImageData (_ccbb );
_bfcb !=nil {return nil ,_bfcb ;};return _efgb ,nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_a .Rectangle ;};func (_eadf MorphProcess )getWidthHeight ()(_bcce ,_eefg int ){return _eadf .Arguments [0],_eadf .Arguments [1];};func (_bbccb *Bitmaps )HeightSorter ()func (_fded ,_baedb int )bool {return func (_cadcf ,_dgafa int )bool {_fceeg :=_bbccb .Values [_cadcf ].Height < _bbccb .Values [_dgafa ].Height ;
_fc .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_bbccb .Values [_cadcf ].Height ,_bbccb .Values [_dgafa ].Height ,_fceeg );return _fceeg ;};};func (_dfbfb *Bitmaps )SortByWidth (){_geabf :=(*byWidth )(_dfbfb );
_b .Sort (_geabf )};func Rect (x ,y ,w ,h int )(*_a .Rectangle ,error ){const _bafc ="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 (_bafc ,"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 (_bafc ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_afgd :=_a .Rect (x ,y ,x +w ,y +h );return &_afgd ,nil ;
};func (_bdba *Boxes )selectWithIndicator (_ecbaf *_f .NumSlice )(_gdc *Boxes ,_acbc error ){const _cbff ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _bdba ==nil {return nil ,_c .Error (_cbff ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");
};if _ecbaf ==nil {return nil ,_c .Error (_cbff ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_ecbaf )!=len (*_bdba ){return nil ,_c .Error (_cbff ,"\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 _afadc ,_dbdeg int ;for _cace :=0;_cace < len (*_ecbaf );_cace ++{if _afadc ,_acbc =_ecbaf .GetInt (_cace );_acbc !=nil {return nil ,_c .Wrap (_acbc ,_cbff ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _afadc ==1{_dbdeg ++;
};};if _dbdeg ==len (*_bdba ){return _bdba ,nil ;};_eed :=Boxes {};for _ffe :=0;_ffe < len (*_ecbaf );_ffe ++{_afadc =int ((*_ecbaf )[_ffe ]);if _afadc ==0{continue ;};_eed =append (_eed ,(*_bdba )[_ffe ]);};_gdc =&_eed ;return _gdc ,nil ;};func (_becf *Bitmaps )selectByIndicator (_aedge *_f .NumSlice )(_bgeee *Bitmaps ,_fcadd error ){const _afga ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _becf ==nil {return nil ,_c .Error (_afga ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _aedge ==nil {return nil ,_c .Error (_afga ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_becf .Values )==0{return _becf ,nil ;};if len (*_aedge )!=len (_becf .Values ){return nil ,_c .Errorf (_afga ,"\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 (*_aedge ),len (_becf .Values ));
};var _gfec ,_bbabg ,_dega int ;for _bbabg =0;_bbabg < len (*_aedge );_bbabg ++{if _gfec ,_fcadd =_aedge .GetInt (_bbabg );_fcadd !=nil {return nil ,_c .Wrap (_fcadd ,_afga ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _gfec ==1{_dega ++;
};};if _dega ==len (_becf .Values ){return _becf ,nil ;};_bgeee =&Bitmaps {};_dccga :=len (_becf .Values )==len (_becf .Boxes );for _bbabg =0;_bbabg < len (*_aedge );_bbabg ++{if _gfec =int ((*_aedge )[_bbabg ]);_gfec ==0{continue ;};_bgeee .Values =append (_bgeee .Values ,_becf .Values [_bbabg ]);
if _dccga {_bgeee .Boxes =append (_bgeee .Boxes ,_becf .Boxes [_bbabg ]);};};return _bgeee ,nil ;};func (_cfff *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gedb (_cfff ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func _dcea (_abfd ,_cdcd *Bitmap ,_gaaa *Selection )(*Bitmap ,error ){const _abce ="\u0065\u0072\u006fd\u0065";var (_caab error ;_ccgg *Bitmap ;);_abfd ,_caab =_eaac (_abfd ,_cdcd ,_gaaa ,&_ccgg );if _caab !=nil {return nil ,_c .Wrap (_caab ,_abce ,"");
};if _caab =_abfd .setAll ();_caab !=nil {return nil ,_c .Wrap (_caab ,_abce ,"");};var _abda SelectionValue ;for _fged :=0;_fged < _gaaa .Height ;_fged ++{for _bbfg :=0;_bbfg < _gaaa .Width ;_bbfg ++{_abda =_gaaa .Data [_fged ][_bbfg ];if _abda ==SelHit {_caab =_gedb (_abfd ,_gaaa .Cx -_bbfg ,_gaaa .Cy -_fged ,_cdcd .Width ,_cdcd .Height ,PixSrcAndDst ,_ccgg ,0,0);
if _caab !=nil {return nil ,_c .Wrap (_caab ,_abce ,"");};};};};if MorphBC ==SymmetricMorphBC {return _abfd ,nil ;};_fabb ,_eeeg ,_bcec ,_ceba :=_gaaa .findMaxTranslations ();if _fabb > 0{if _caab =_abfd .RasterOperation (0,0,_fabb ,_cdcd .Height ,PixClr ,nil ,0,0);
_caab !=nil {return nil ,_c .Wrap (_caab ,_abce ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _bcec > 0{if _caab =_abfd .RasterOperation (_cdcd .Width -_bcec ,0,_bcec ,_cdcd .Height ,PixClr ,nil ,0,0);_caab !=nil {return nil ,_c .Wrap (_caab ,_abce ,"\u0078\u006e\u0020\u003e\u0020\u0030");
};};if _eeeg > 0{if _caab =_abfd .RasterOperation (0,0,_cdcd .Width ,_eeeg ,PixClr ,nil ,0,0);_caab !=nil {return nil ,_c .Wrap (_caab ,_abce ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _ceba > 0{if _caab =_abfd .RasterOperation (0,_cdcd .Height -_ceba ,_cdcd .Width ,_ceba ,PixClr ,nil ,0,0);
_caab !=nil {return nil ,_c .Wrap (_caab ,_abce ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _abfd ,nil ;};const _dddac =5000;func (_fdb *Bitmap )removeBorderGeneral (_eegf ,_aca ,_cga ,_bfcf int )(*Bitmap ,error ){const _gacg ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _eegf < 0||_aca < 0||_cga < 0||_bfcf < 0{return nil ,_c .Error (_gacg ,"\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");};_cdbf ,_ecfd :=_fdb .Width ,_fdb .Height ;
_gdb :=_cdbf -_eegf -_aca ;_adb :=_ecfd -_cga -_bfcf ;if _gdb <=0{return nil ,_c .Errorf (_gacg ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_gdb );};if _adb <=0{return nil ,_c .Errorf (_gacg ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_adb );
};_edgc :=New (_gdb ,_adb );_edgc .Color =_fdb .Color ;_ggfg :=_edgc .RasterOperation (0,0,_gdb ,_adb ,PixSrc ,_fdb ,_eegf ,_cga );if _ggfg !=nil {return nil ,_c .Wrap (_ggfg ,_gacg ,"");};return _edgc ,nil ;};func (_gfe *Bitmap )CreateTemplate ()*Bitmap {return _gfe .createTemplate ()};
func (_gbbd *Bitmap )setEightBytes (_def int ,_dfdf uint64 )error {_cagb :=_gbbd .RowStride -(_def %_gbbd .RowStride );if _gbbd .RowStride !=_gbbd .Width >>3{_cagb --;};if _cagb >=8{return _gbbd .setEightFullBytes (_def ,_dfdf );};return _gbbd .setEightPartlyBytes (_def ,_cagb ,_dfdf );
};func _aef (_gf *Bitmap ,_cb ,_ga int )(*Bitmap ,error ){const _bc ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _gf ==nil {return nil ,_c .Error (_bc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _cb <=0||_ga <=0{return nil ,_c .Error (_bc ,"\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 _cb ==_ga {if _cb ==1{_cca ,_eeg :=_dffg (nil ,_gf );
if _eeg !=nil {return nil ,_c .Wrap (_eeg ,_bc ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _cca ,nil ;};if _cb ==2||_cb ==4||_cb ==8{_fe ,_de :=_aaf (_gf ,_cb );if _de !=nil {return nil ,_c .Wrap (_de ,_bc ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
};return _fe ,nil ;};};_agf :=_cb *_gf .Width ;_eda :=_ga *_gf .Height ;_fcg :=New (_agf ,_eda );_gaf :=_fcg .RowStride ;var (_be ,_aea ,_dbg ,_faf ,_ceeb int ;_ba byte ;_cbc error ;);for _aea =0;_aea < _gf .Height ;_aea ++{_be =_ga *_aea *_gaf ;for _dbg =0;
_dbg < _gf .Width ;_dbg ++{if _dggg :=_gf .GetPixel (_dbg ,_aea );_dggg {_ceeb =_cb *_dbg ;for _faf =0;_faf < _cb ;_faf ++{_fcg .setBit (_be *8+_ceeb +_faf );};};};for _faf =1;_faf < _ga ;_faf ++{_adc :=_be +_faf *_gaf ;for _bbe :=0;_bbe < _gaf ;_bbe ++{if _ba ,_cbc =_fcg .GetByte (_be +_bbe );
_cbc !=nil {return nil ,_c .Wrapf (_cbc ,_bc ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_faf );};if _cbc =_fcg .SetByte (_adc +_bbe ,_ba );_cbc !=nil {return nil ,_c .Wrap (_cbc ,_bc ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");
};};};};return _fcg ,nil ;};func (_agfeg *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _feec ="\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 >=_agfeg .IntSlice .Size (){return 0,_c .Errorf (_feec ,"\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 (_agfeg .YAtIndex (i )),nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func TstESymbol (t *_d .T ,scale ...int )*Bitmap {_fcca ,_becfb :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_gb .NoError (t ,_becfb );
return TstGetScaledSymbol (t ,_fcca ,scale ...);};func (_fgf *Bitmap )GetByteIndex (x ,y int )int {return y *_fgf .RowStride +(x >>3)};func _fabe (_bdfdg ,_bged *Bitmap ,_bef ,_deccg int )(*Bitmap ,error ){const _cdgc ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
if _bged ==nil {return nil ,_c .Error (_cdgc ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bef < 1||_deccg < 1{return nil ,_c .Error (_cdgc ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _bef ==1&&_deccg ==1{return _dffg (_bdfdg ,_bged );};if MorphBC ==SymmetricMorphBC {_fcfd ,_fdcg :=_dgcd (_bdfdg ,_bged ,_bef ,_deccg );if _fdcg !=nil {return nil ,_c .Wrap (_fdcg ,_cdgc ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
};return _fcfd ,nil ;};_fdeb :=_adeb (_bef /2,_deccg /2);_dgd :=8*((_fdeb +7)/8);_cfcab ,_efgc :=_bged .AddBorder (_dgd ,0);if _efgc !=nil {return nil ,_c .Wrapf (_efgc ,_cdgc ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_dgd );
};var _eacd ,_dfda *Bitmap ;if _bef ==1||_deccg ==1{_deac :=SelCreateBrick (_deccg ,_bef ,_deccg /2,_bef /2,SelHit );_eacd ,_efgc =_cbg (nil ,_cfcab ,_deac );if _efgc !=nil {return nil ,_c .Wrap (_efgc ,_cdgc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};}else {_dfbg :=SelCreateBrick (1,_bef ,0,_bef /2,SelHit );_bdge ,_ffeg :=_cdde (nil ,_cfcab ,_dfbg );if _ffeg !=nil {return nil ,_c .Wrap (_ffeg ,_cdgc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
};_ebdcf :=SelCreateBrick (_deccg ,1,_deccg /2,0,SelHit );_eacd ,_ffeg =_cdde (nil ,_bdge ,_ebdcf );if _ffeg !=nil {return nil ,_c .Wrap (_ffeg ,_cdgc ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ ,_ffeg =_dcea (_bdge ,_eacd ,_dfbg );_ffeg !=nil {return nil ,_c .Wrap (_ffeg ,_cdgc ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_ffeg =_dcea (_eacd ,_bdge ,_ebdcf );_ffeg !=nil {return nil ,_c .Wrap (_ffeg ,_cdgc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _dfda ,_efgc =_eacd .RemoveBorder (_dgd );_efgc !=nil {return nil ,_c .Wrap (_efgc ,_cdgc ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _bdfdg ==nil {return _dfda ,nil ;};if _ ,_efgc =_dffg (_bdfdg ,_dfda );_efgc !=nil {return nil ,_efgc ;};return _bdfdg ,nil ;
};func TstNSymbol (t *_d .T ,scale ...int )*Bitmap {_agdda ,_gdaa :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_gb .NoError (t ,_gdaa );return TstGetScaledSymbol (t ,_agdda ,scale ...);};func (_aefd Points )GetIntX (i int )(int ,error ){if i >=len (_aefd ){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 (_aefd [i ].X ),nil ;};func TstISymbol (t *_d .T ,scale ...int )*Bitmap {_dcbe ,_deae :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_gb .NoError (t ,_deae );return TstGetScaledSymbol (t ,_dcbe ,scale ...);};type Selection struct{Height ,Width int ;
Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _cdde (_cfbb *Bitmap ,_begea *Bitmap ,_ceda *Selection )(*Bitmap ,error ){var (_cdbe *Bitmap ;_cbdd error ;);_cfbb ,_cbdd =_eaac (_cfbb ,_begea ,_ceda ,&_cdbe );if _cbdd !=nil {return nil ,_cbdd ;
};if _cbdd =_cfbb .clearAll ();_cbdd !=nil {return nil ,_cbdd ;};var _faa SelectionValue ;for _gfge :=0;_gfge < _ceda .Height ;_gfge ++{for _adec :=0;_adec < _ceda .Width ;_adec ++{_faa =_ceda .Data [_gfge ][_adec ];if _faa ==SelHit {if _cbdd =_cfbb .RasterOperation (_adec -_ceda .Cx ,_gfge -_ceda .Cy ,_begea .Width ,_begea .Height ,PixSrcOrDst ,_cdbe ,0,0);
_cbdd !=nil {return nil ,_cbdd ;};};};};return _cfbb ,nil ;};func (_eeadd *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _dfbd ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _eeadd ==nil {return nil ,_c .Error (_dfbd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if i > len (_eeadd .Values )-1{return nil ,_c .Errorf (_dfbd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _eeadd .Values [i ],nil ;};func NewClassedPoints (points *Points ,classes _f .IntSlice )(*ClassedPoints ,error ){const _eceb ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_c .Error (_eceb ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_c .Error (_eceb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_fcggg :=&ClassedPoints {Points :points ,IntSlice :classes };if _gebe :=_fcggg .validateIntSlice ();_gebe !=nil {return nil ,_c .Wrap (_gebe ,_eceb ,"");};return _fcggg ,nil ;};func _dbdcf (_cedef *Bitmap ,_cdfd *_f .Stack ,_dgca ,_dcgdc int )(_bbaf *_a .Rectangle ,_afea error ){const _eaab ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _cedef ==nil {return nil ,_c .Error (_eaab ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cdfd ==nil {return nil ,_c .Error (_eaab ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_beag ,_gfda :=_cedef .Width ,_cedef .Height ;_fefd :=_beag -1;_afadd :=_gfda -1;if _dgca < 0||_dgca > _fefd ||_dcgdc < 0||_dcgdc > _afadd ||!_cedef .GetPixel (_dgca ,_dcgdc ){return nil ,nil ;};var _dbab *_a .Rectangle ;_dbab ,_afea =Rect (100000,100000,0,0);
if _afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"");};if _afea =_geedf (_cdfd ,_dgca ,_dgca ,_dcgdc ,1,_afadd ,_dbab );_afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _afea =_geedf (_cdfd ,_dgca ,_dgca ,_dcgdc +1,-1,_afadd ,_dbab );
_afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_dbab .Min .X ,_dbab .Max .X =_dgca ,_dgca ;_dbab .Min .Y ,_dbab .Max .Y =_dcgdc ,_dcgdc ;var (_dggaf *fillSegment ;
_aafeg int ;);for _cdfd .Len ()> 0{if _dggaf ,_afea =_ggdcd (_cdfd );_afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"");};_dcgdc =_dggaf ._egdd ;for _dgca =_dggaf ._dgge ;_dgca >=0&&_cedef .GetPixel (_dgca ,_dcgdc );_dgca --{if _afea =_cedef .SetPixel (_dgca ,_dcgdc ,0);
_afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"");};};if _dgca >=_dggaf ._dgge {for _dgca ++;_dgca <=_dggaf ._gfgd &&_dgca <=_fefd &&!_cedef .GetPixel (_dgca ,_dcgdc );_dgca ++{};_aafeg =_dgca ;if !(_dgca <=_dggaf ._gfgd &&_dgca <=_fefd ){continue ;
};}else {_aafeg =_dgca +1;if _aafeg < _dggaf ._dgge -1{if _afea =_geedf (_cdfd ,_aafeg ,_dggaf ._dgge -1,_dggaf ._egdd ,-_dggaf ._bcab ,_afadd ,_dbab );_afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_dgca =_dggaf ._dgge +1;};for {for ;_dgca <=_fefd &&_cedef .GetPixel (_dgca ,_dcgdc );_dgca ++{if _afea =_cedef .SetPixel (_dgca ,_dcgdc ,0);_afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _afea =_geedf (_cdfd ,_aafeg ,_dgca -1,_dggaf ._egdd ,_dggaf ._bcab ,_afadd ,_dbab );
_afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dgca > _dggaf ._gfgd +1{if _afea =_geedf (_cdfd ,_dggaf ._gfgd +1,_dgca -1,_dggaf ._egdd ,-_dggaf ._bcab ,_afadd ,_dbab );_afea !=nil {return nil ,_c .Wrap (_afea ,_eaab ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _dgca ++;_dgca <=_dggaf ._gfgd &&_dgca <=_fefd &&!_cedef .GetPixel (_dgca ,_dcgdc );_dgca ++{};_aafeg =_dgca ;if !(_dgca <=_dggaf ._gfgd &&_dgca <=_fefd ){break ;};};};_dbab .Max .X ++;_dbab .Max .Y ++;return _dbab ,nil ;};func (_ecge Points )Get (i int )(Point ,error ){if i > len (_ecge )-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 _ecge [i ],nil ;};func ClipBoxToRectangle (box *_a .Rectangle ,wi ,hi int )(_gfbd *_a .Rectangle ,_aadf error ){const _cafg ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_c .Error (_cafg ,"\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 (_cafg ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_ccba :=*box ;
_gfbd =&_ccba ;if _gfbd .Min .X < 0{_gfbd .Max .X +=_gfbd .Min .X ;_gfbd .Min .X =0;};if _gfbd .Min .Y < 0{_gfbd .Max .Y +=_gfbd .Min .Y ;_gfbd .Min .Y =0;};if _gfbd .Max .X > wi {_gfbd .Max .X =wi ;};if _gfbd .Max .Y > hi {_gfbd .Max .Y =hi ;};return _gfbd ,nil ;
};type Point struct{X ,Y float32 ;};func (_dfdc *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _dfdc .Copy (),nil ;};_agea ,_fec :=_dfdc .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _fec !=nil {return nil ,_c .Wrap (_fec ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");
};return _agea ,nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _egcga (d ,s ,hSize ,vSize )};func (_cdba *Bitmaps )CountPixels ()*_f .NumSlice {_aeac :=&_f .NumSlice {};for _ ,_gefcb :=range _cdba .Values {_aeac .AddInt (_gefcb .CountPixels ());
};return _aeac ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _dbdc ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_dbbc :=_fea (width ,height );_dbbc .Data =data ;
if _dfe :=((width *height )+7)>>3;len (data )< _dfe {return nil ,_c .Errorf (_dbdc ,"\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 ),_dfe );
};if _dfd :=_dbbc .addPadBits ();_dfd !=nil {return nil ,_c .Wrap (_dfd ,_dbdc ,"");};return _dbbc ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func _eb (_bgd ,_gbe *Bitmap )(_aeg error ){const _ecb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";
_ebg :=_gbe .RowStride ;_ccf :=_bgd .RowStride ;var _fa ,_ace ,_bgf ,_ag ,_ebd int ;for _bgf =0;_bgf < _gbe .Height ;_bgf ++{_fa =_bgf *_ebg ;_ace =8*_bgf *_ccf ;for _ag =0;_ag < _ebg ;_ag ++{if _aeg =_bgd .setEightBytes (_ace +_ag *8,_eddbd [_gbe .Data [_fa +_ag ]]);
_aeg !=nil {return _c .Wrap (_aeg ,_ecb ,"");};};for _ebd =1;_ebd < 8;_ebd ++{for _ag =0;_ag < _ccf ;_ag ++{if _aeg =_bgd .SetByte (_ace +_ebd *_ccf +_ag ,_bgd .Data [_ace +_ag ]);_aeg !=nil {return _c .Wrap (_aeg ,_ecb ,"");};};};};return nil ;};func (_eaa *Bitmap )Equivalent (s *Bitmap )bool {return _eaa .equivalent (s )};
func (_bedg *byHeight )Len ()int {return len (_bedg .Values )};func _cefa (_fgea *Bitmap ,_abge ,_bac ,_befa ,_bacf int ,_eggg RasterOperator ,_dgaa *Bitmap ,_dbag ,_cbdf int )error {var (_egde bool ;_abaab bool ;_fceb byte ;_aeffe int ;_acbcb int ;_cbgb int ;
_fdebb int ;_deab bool ;_cfeac int ;_bdac int ;_eface int ;_fcee bool ;_dfgb byte ;_ddcg int ;_febfb int ;_adef int ;_cabc byte ;_acag int ;_cgfd int ;_fbbc uint ;_cfeb uint ;_ddca byte ;_ffbc shift ;_ccda bool ;_bebc bool ;_aebc ,_adgeg int ;);if _dbag &7!=0{_cgfd =8-(_dbag &7);
};if _abge &7!=0{_acbcb =8-(_abge &7);};if _cgfd ==0&&_acbcb ==0{_ddca =_ecef [0];}else {if _acbcb > _cgfd {_fbbc =uint (_acbcb -_cgfd );}else {_fbbc =uint (8-(_cgfd -_acbcb ));};_cfeb =8-_fbbc ;_ddca =_ecef [_fbbc ];};if (_abge &7)!=0{_egde =true ;_aeffe =8-(_abge &7);
_fceb =_ecef [_aeffe ];_cbgb =_fgea .RowStride *_bac +(_abge >>3);_fdebb =_dgaa .RowStride *_cbdf +(_dbag >>3);_acag =8-(_dbag &7);if _aeffe > _acag {_ffbc =_dccgd ;if _befa >=_cgfd {_ccda =true ;};}else {_ffbc =_gbded ;};};if _befa < _aeffe {_abaab =true ;
_fceb &=_ccecf [8-_aeffe +_befa ];};if !_abaab {_cfeac =(_befa -_aeffe )>>3;if _cfeac !=0{_deab =true ;_bdac =_fgea .RowStride *_bac +((_abge +_acbcb )>>3);_eface =_dgaa .RowStride *_cbdf +((_dbag +_acbcb )>>3);};};_ddcg =(_abge +_befa )&7;if !(_abaab ||_ddcg ==0){_fcee =true ;
_dfgb =_ccecf [_ddcg ];_febfb =_fgea .RowStride *_bac +((_abge +_acbcb )>>3)+_cfeac ;_adef =_dgaa .RowStride *_cbdf +((_dbag +_acbcb )>>3)+_cfeac ;if _ddcg > int (_cfeb ){_bebc =true ;};};switch _eggg {case PixSrc :if _egde {for _aebc =0;_aebc < _bacf ;
_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],_cabc ,_fceb );_cbgb +=_fgea .RowStride ;
_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]=_cabc ;
};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],_cabc ,_dfgb );
_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;};};case PixNotSrc :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;
};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],^_cabc ,_fceb );_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );
_fgea .Data [_bdac +_adgeg ]=^_cabc ;};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};
_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],^_cabc ,_dfgb );_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;};};case PixSrcOrDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );
};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],_cabc |_fgea .Data [_cbgb ],_fceb );_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;
_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]|=_cabc ;};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;
_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],_cabc |_fgea .Data [_febfb ],_dfgb );_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;
};};case PixSrcAndDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],_cabc &_fgea .Data [_cbgb ],_fceb );
_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]&=_cabc ;
};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],_cabc &_fgea .Data [_febfb ],_dfgb );
_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;};};case PixSrcXorDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );};
}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],_cabc ^_fgea .Data [_cbgb ],_fceb );_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;_adgeg < _cfeac ;
_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]^=_cabc ;};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;
if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],_cabc ^_fgea .Data [_febfb ],_dfgb );_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;};};case PixNotSrcOrDst :if _egde {for _aebc =0;
_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],^_cabc |_fgea .Data [_cbgb ],_fceb );
_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]|=^_cabc ;
};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],^_cabc |_fgea .Data [_febfb ],_dfgb );
_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;};};case PixNotSrcAndDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );
};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],^_cabc &_fgea .Data [_cbgb ],_fceb );_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;
_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]&=^_cabc ;};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;
_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],^_cabc &_fgea .Data [_febfb ],_dfgb );_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;
};};case PixSrcOrNotDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],_cabc |^_fgea .Data [_cbgb ],_fceb );
_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]=_cabc |^_fgea .Data [_bdac +_adgeg ];
};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],_cabc |^_fgea .Data [_febfb ],_dfgb );
_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;};};case PixSrcAndNotDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );
};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],_cabc &^_fgea .Data [_cbgb ],_fceb );_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;
_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]=_cabc &^_fgea .Data [_bdac +_adgeg ];};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};
if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],_cabc &^_fgea .Data [_febfb ],_dfgb );_febfb +=_fgea .RowStride ;
_adef +=_dgaa .RowStride ;};};case PixNotPixSrcOrDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;
};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],^(_cabc |_fgea .Data [_cbgb ]),_fceb );_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );
_fgea .Data [_bdac +_adgeg ]=^(_cabc |_fgea .Data [_bdac +_adgeg ]);};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );
};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],^(_cabc |_fgea .Data [_febfb ]),_dfgb );_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;};};case PixNotPixSrcAndDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;
if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],^(_cabc &_fgea .Data [_cbgb ]),_fceb );_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;
};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]=^(_cabc &_fgea .Data [_bdac +_adgeg ]);
};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],^(_cabc &_fgea .Data [_febfb ]),_dfgb );
_febfb +=_fgea .RowStride ;_adef +=_dgaa .RowStride ;};};case PixNotPixSrcXorDst :if _egde {for _aebc =0;_aebc < _bacf ;_aebc ++{if _ffbc ==_dccgd {_cabc =_dgaa .Data [_fdebb ]<<_fbbc ;if _ccda {_cabc =_cafgb (_cabc ,_dgaa .Data [_fdebb +1]>>_cfeb ,_ddca );
};}else {_cabc =_dgaa .Data [_fdebb ]>>_cfeb ;};_fgea .Data [_cbgb ]=_cafgb (_fgea .Data [_cbgb ],^(_cabc ^_fgea .Data [_cbgb ]),_fceb );_cbgb +=_fgea .RowStride ;_fdebb +=_dgaa .RowStride ;};};if _deab {for _aebc =0;_aebc < _bacf ;_aebc ++{for _adgeg =0;
_adgeg < _cfeac ;_adgeg ++{_cabc =_cafgb (_dgaa .Data [_eface +_adgeg ]<<_fbbc ,_dgaa .Data [_eface +_adgeg +1]>>_cfeb ,_ddca );_fgea .Data [_bdac +_adgeg ]=^(_cabc ^_fgea .Data [_bdac +_adgeg ]);};_bdac +=_fgea .RowStride ;_eface +=_dgaa .RowStride ;};
};if _fcee {for _aebc =0;_aebc < _bacf ;_aebc ++{_cabc =_dgaa .Data [_adef ]<<_fbbc ;if _bebc {_cabc =_cafgb (_cabc ,_dgaa .Data [_adef +1]>>_cfeb ,_ddca );};_fgea .Data [_febfb ]=_cafgb (_fgea .Data [_febfb ],^(_cabc ^_fgea .Data [_febfb ]),_dfgb );_febfb +=_fgea .RowStride ;
_adef +=_dgaa .RowStride ;};};default:_fc .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",_eggg );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 New (width ,height int )*Bitmap {_cgcc :=_fea (width ,height );_cgcc .Data =make ([]byte ,height *_cgcc .RowStride );return _cgcc ;};func _fadcb ()[]int {_edaa :=make ([]int ,256);for _cfbf :=0;_cfbf <=0xff;_cfbf ++{_fba :=byte (_cfbf );
_edaa [_fba ]=int (_fba &0x1)+(int (_fba >>1)&0x1)+(int (_fba >>2)&0x1)+(int (_fba >>3)&0x1)+(int (_fba >>4)&0x1)+(int (_fba >>5)&0x1)+(int (_fba >>6)&0x1)+(int (_fba >>7)&0x1);};return _edaa ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _gebg ="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 (_gebg ,"\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 (_gebg ,"\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 (_gebg ,"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 (_gebg ,"\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 (_gebg ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_bcdcg ,_dgbe :=bm1 .Width ,bm1 .Height ;_cgfcg ,_gdd :=bm2 .Width ,bm2 .Height ;if _f .Abs (_bcdcg -_cgfcg )> maxDiffW {return false ,nil ;};if _f .Abs (_dgbe -_gdd )> maxDiffH {return false ,nil ;};_gcga :=int (delX +_f .Sign (delX )*0.5);_bfca :=int (delY +_f .Sign (delY )*0.5);
_fca :=int (_ge .Ceil (_ge .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_bbdg :=bm2 .RowStride ;_aaaa :=_adeb (_bfca ,0);_ffdf :=_fafb (_gdd +_bfca ,_dgbe );_geef :=bm1 .RowStride *_aaaa ;_fbcd :=bm2 .RowStride *(_aaaa -_bfca );
var _edfd int ;if _ffdf <=_dgbe {_edfd =downcount [_ffdf -1];};_aecb :=_adeb (_gcga ,0);_aac :=_fafb (_cgfcg +_gcga ,_bcdcg );var _fdbg ,_cfdg int ;if _gcga >=8{_fdbg =_gcga >>3;_geef +=_fdbg ;_aecb -=_fdbg <<3;_aac -=_fdbg <<3;_gcga &=7;}else if _gcga <=-8{_cfdg =-((_gcga +7)>>3);
_fbcd +=_cfdg ;_bbdg -=_cfdg ;_gcga +=_cfdg <<3;};var (_fdcb ,_eafg ,_ccfb int ;_gegca ,_ebae ,_gbbg byte ;);if _aecb >=_aac ||_aaaa >=_ffdf {return false ,nil ;};_dddg :=(_aac +7)>>3;switch {case _gcga ==0:for _eafg =_aaaa ;_eafg < _ffdf ;_eafg ,_geef ,_fbcd =_eafg +1,_geef +bm1 .RowStride ,_fbcd +bm2 .RowStride {for _ccfb =0;
_ccfb < _dddg ;_ccfb ++{_gegca =bm1 .Data [_geef +_ccfb ]&bm2 .Data [_fbcd +_ccfb ];_fdcb +=tab [_gegca ];};if _fdcb >=_fca {return true ,nil ;};if _eddfg :=_fdcb +downcount [_eafg ]-_edfd ;_eddfg < _fca {return false ,nil ;};};case _gcga > 0&&_bbdg < _dddg :for _eafg =_aaaa ;
_eafg < _ffdf ;_eafg ,_geef ,_fbcd =_eafg +1,_geef +bm1 .RowStride ,_fbcd +bm2 .RowStride {_ebae =bm1 .Data [_geef ];_gbbg =bm2 .Data [_fbcd ]>>uint (_gcga );_gegca =_ebae &_gbbg ;_fdcb +=tab [_gegca ];for _ccfb =1;_ccfb < _bbdg ;_ccfb ++{_ebae =bm1 .Data [_geef +_ccfb ];
_gbbg =bm2 .Data [_fbcd +_ccfb ]>>uint (_gcga )|bm2 .Data [_fbcd +_ccfb -1]<<uint (8-_gcga );_gegca =_ebae &_gbbg ;_fdcb +=tab [_gegca ];};_ebae =bm1 .Data [_geef +_ccfb ];_gbbg =bm2 .Data [_fbcd +_ccfb -1]<<uint (8-_gcga );_gegca =_ebae &_gbbg ;_fdcb +=tab [_gegca ];
if _fdcb >=_fca {return true ,nil ;}else if _fdcb +downcount [_eafg ]-_edfd < _fca {return false ,nil ;};};case _gcga > 0&&_bbdg >=_dddg :for _eafg =_aaaa ;_eafg < _ffdf ;_eafg ,_geef ,_fbcd =_eafg +1,_geef +bm1 .RowStride ,_fbcd +bm2 .RowStride {_ebae =bm1 .Data [_geef ];
_gbbg =bm2 .Data [_fbcd ]>>uint (_gcga );_gegca =_ebae &_gbbg ;_fdcb +=tab [_gegca ];for _ccfb =1;_ccfb < _dddg ;_ccfb ++{_ebae =bm1 .Data [_geef +_ccfb ];_gbbg =bm2 .Data [_fbcd +_ccfb ]>>uint (_gcga );_gbbg |=bm2 .Data [_fbcd +_ccfb -1]<<uint (8-_gcga );
_gegca =_ebae &_gbbg ;_fdcb +=tab [_gegca ];};if _fdcb >=_fca {return true ,nil ;}else if _fdcb +downcount [_eafg ]-_edfd < _fca {return false ,nil ;};};case _dddg < _bbdg :for _eafg =_aaaa ;_eafg < _ffdf ;_eafg ,_geef ,_fbcd =_eafg +1,_geef +bm1 .RowStride ,_fbcd +bm2 .RowStride {for _ccfb =0;
_ccfb < _dddg ;_ccfb ++{_ebae =bm1 .Data [_geef +_ccfb ];_gbbg =bm2 .Data [_fbcd +_ccfb ]<<uint (-_gcga );_gbbg |=bm2 .Data [_fbcd +_ccfb +1]>>uint (8+_gcga );_gegca =_ebae &_gbbg ;_fdcb +=tab [_gegca ];};if _fdcb >=_fca {return true ,nil ;}else if _adebe :=_fdcb +downcount [_eafg ]-_edfd ;
_adebe < _fca {return false ,nil ;};};case _bbdg >=_dddg :for _eafg =_aaaa ;_eafg < _ffdf ;_eafg ,_geef ,_fbcd =_eafg +1,_geef +bm1 .RowStride ,_fbcd +bm2 .RowStride {for _ccfb =0;_ccfb < _dddg ;_ccfb ++{_ebae =bm1 .Data [_geef +_ccfb ];_gbbg =bm2 .Data [_fbcd +_ccfb ]<<uint (-_gcga );
_gbbg |=bm2 .Data [_fbcd +_ccfb +1]>>uint (8+_gcga );_gegca =_ebae &_gbbg ;_fdcb +=tab [_gegca ];};_ebae =bm1 .Data [_geef +_ccfb ];_gbbg =bm2 .Data [_fbcd +_ccfb ]<<uint (-_gcga );_gegca =_ebae &_gbbg ;_fdcb +=tab [_gegca ];if _fdcb >=_fca {return true ,nil ;
}else if _fdcb +downcount [_eafg ]-_edfd < _fca {return false ,nil ;};};};_afac :=float32 (_fdcb )*float32 (_fdcb )/(float32 (area1 )*float32 (area2 ));if _afac >=scoreThreshold {_fc .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",_fdcb ,_fca ,_afac ,scoreThreshold );
};return false ,nil ;};func _bfee (_egdeg ,_gedf *Bitmap ,_ebbd ,_eagb int )(_debd error ){const _adcgg ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_baaf ,_dccb ,_cggc ,_cbed int ;_aggf ,_ffgef ,_bfef ,_gab ,_dgce ,_bcca ,_edbf ,_dcce byte ;
);for _baaf =0;_baaf < _ebbd ;_baaf ++{_cggc =_baaf *_egdeg .RowStride ;_cbed =_baaf *_gedf .RowStride ;for _dccb =0;_dccb < _eagb ;_dccb ++{if _aggf ,_debd =_egdeg .GetByte (_cggc +_dccb );_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _ffgef ,_debd =_gedf .GetByte (_cbed +_dccb );_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _baaf > 0{if _bfef ,_debd =_egdeg .GetByte (_cggc -_egdeg .RowStride +_dccb );
_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_aggf |=_bfef |(_bfef <<1)|(_bfef >>1);if _dccb > 0{if _dcce ,_debd =_egdeg .GetByte (_cggc -_egdeg .RowStride +_dccb -1);_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
};_aggf |=_dcce <<7;};if _dccb < _eagb -1{if _dcce ,_debd =_egdeg .GetByte (_cggc -_egdeg .RowStride +_dccb +1);_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_aggf |=_dcce >>7;
};};if _dccb > 0{if _gab ,_debd =_egdeg .GetByte (_cggc +_dccb -1);_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u006a\u0020\u003e \u0030");};_aggf |=_gab <<7;};_aggf &=_ffgef ;if _aggf ==0||^_aggf ==0{if _debd =_egdeg .SetByte (_cggc +_dccb ,_aggf );
_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_edbf =_aggf ;_aggf =(_aggf |(_aggf >>1)|(_aggf <<1))&_ffgef ;if (_aggf ^_edbf )==0{if _debd =_egdeg .SetByte (_cggc +_dccb ,_aggf );
_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _baaf =_ebbd -1;_baaf >=0;_baaf --{_cggc =_baaf *_egdeg .RowStride ;_cbed =_baaf *_gedf .RowStride ;
for _dccb =_eagb -1;_dccb >=0;_dccb --{if _aggf ,_debd =_egdeg .GetByte (_cggc +_dccb );_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _ffgef ,_debd =_gedf .GetByte (_cbed +_dccb );_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _baaf < _ebbd -1{if _dgce ,_debd =_egdeg .GetByte (_cggc +_egdeg .RowStride +_dccb );
_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_aggf |=_dgce |(_dgce <<1)|_dgce >>1;if _dccb > 0{if _dcce ,_debd =_egdeg .GetByte (_cggc +_egdeg .RowStride +_dccb -1);
_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\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");};_aggf |=_dcce <<7;};if _dccb < _eagb -1{if _dcce ,_debd =_egdeg .GetByte (_cggc +_egdeg .RowStride +_dccb +1);
_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\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");
};_aggf |=_dcce >>7;};};if _dccb < _eagb -1{if _bcca ,_debd =_egdeg .GetByte (_cggc +_dccb +1);_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\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");
};_aggf |=_bcca >>7;};_aggf &=_ffgef ;if _aggf ==0||(^_aggf )==0{if _debd =_egdeg .SetByte (_cggc +_dccb ,_aggf );_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_edbf =_aggf ;
_aggf =(_aggf |(_aggf >>1)|(_aggf <<1))&_ffgef ;if (_aggf ^_edbf )==0{if _debd =_egdeg .SetByte (_cggc +_dccb ,_aggf );_debd !=nil {return _c .Wrap (_debd ,_adcgg ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func (_cbfd Points )Size ()int {return len (_cbfd )};func TstGetScaledSymbol (t *_d .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_daaa ,_gbbf :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });
_gb .NoError (t ,_gbbf );return _daaa ;};func Centroids (bms []*Bitmap )(*Points ,error ){_geee :=make ([]Point ,len (bms ));_cgdge :=_dcde ();_fdbd :=_fadcb ();var _efab error ;for _eddb ,_aace :=range bms {_geee [_eddb ],_efab =_aace .centroid (_cgdge ,_fdbd );
if _efab !=nil {return nil ,_efab ;};};_dddca :=Points (_geee );return &_dddca ,nil ;};func (_egee *Bitmap )nextOnPixelLow (_gca ,_bdf ,_bedc ,_gege ,_fab int )(_fgcb _a .Point ,_cdce bool ,_agae error ){const _dggb ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_aabg int ;_dbc byte ;);_bcdb :=_fab *_bedc ;_dfdca :=_bcdb +(_gege /8);if _dbc ,_agae =_egee .GetByte (_dfdca );_agae !=nil {return _fgcb ,false ,_c .Wrap (_agae ,_dggb ,"\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 _dbc !=0{_efd :=_gege -(_gege %8)+7;for _aabg =_gege ;_aabg <=_efd &&_aabg < _gca ;_aabg ++{if _egee .GetPixel (_aabg ,_fab ){_fgcb .X =_aabg ;_fgcb .Y =_fab ;return _fgcb ,true ,nil ;};};};_gcbe :=(_gege /8)+1;_aabg =8*_gcbe ;var _bfdg int ;for _dfdca =_bcdb +_gcbe ;
_aabg < _gca ;_dfdca ,_aabg =_dfdca +1,_aabg +8{if _dbc ,_agae =_egee .GetByte (_dfdca );_agae !=nil {return _fgcb ,false ,_c .Wrap (_agae ,_dggb ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");
};if _dbc ==0{continue ;};for _bfdg =0;_bfdg < 8&&_aabg < _gca ;_bfdg ,_aabg =_bfdg +1,_aabg +1{if _egee .GetPixel (_aabg ,_fab ){_fgcb .X =_aabg ;_fgcb .Y =_fab ;return _fgcb ,true ,nil ;};};};for _geae :=_fab +1;_geae < _bdf ;_geae ++{_bcdb =_geae *_bedc ;
for _dfdca ,_aabg =_bcdb ,0;_aabg < _gca ;_dfdca ,_aabg =_dfdca +1,_aabg +8{if _dbc ,_agae =_egee .GetByte (_dfdca );_agae !=nil {return _fgcb ,false ,_c .Wrap (_agae ,_dggb ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");
};if _dbc ==0{continue ;};for _bfdg =0;_bfdg < 8&&_aabg < _gca ;_bfdg ,_aabg =_bfdg +1,_aabg +1{if _egee .GetPixel (_aabg ,_geae ){_fgcb .X =_aabg ;_fgcb .Y =_geae ;return _fgcb ,true ,nil ;};};};};return _fgcb ,false ,nil ;};func (_eeeac *Selection )setOrigin (_dcgf ,_dcgfd int ){_eeeac .Cy ,_eeeac .Cx =_dcgf ,_dcgfd };
func (_abeg *BitmapsArray )AddBox (box *_a .Rectangle ){_abeg .Boxes =append (_abeg .Boxes ,box )};type SelectionValue int ;type MorphOperation int ;func _ggdcd (_fgbgd *_f .Stack )(_gaga *fillSegment ,_ddaf error ){const _fdfb ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";
if _fgbgd ==nil {return nil ,_c .Error (_fdfb ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _fgbgd .Aux ==nil {return nil ,_c .Error (_fdfb ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
};_fbdf ,_abfe :=_fgbgd .Pop ();if !_abfe {return nil ,nil ;};_caaaf ,_abfe :=_fbdf .(*fillSegment );if !_abfe {return nil ,_c .Error (_fdfb ,"\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");
};_gaga =&fillSegment {_caaaf ._dgge ,_caaaf ._gfgd ,_caaaf ._egdd +_caaaf ._bcab ,_caaaf ._bcab };_fgbgd .Aux .Push (_caaaf );return _gaga ,nil ;};var _feg [256]uint8 ;func TstOSymbol (t *_d .T ,scale ...int )*Bitmap {_cbgd ,_debg :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});
_gb .NoError (t ,_debg );return TstGetScaledSymbol (t ,_cbgd ,scale ...);};func (_bfd *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _bfd .Copy (),nil ;};_dbgc ,_fgbc :=_bfd .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );
if _fgbc !=nil {return nil ,_c .Wrap (_fgbc ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _dbgc ,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 (_aaeb *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gaad *Bitmaps ,_baae error ){const _gbbdc ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _aaeb ==nil {return nil ,_c .Error (_gbbdc ,"\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 (_gbbdc ,"\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 (_gbbdc ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_dadf ,_baae :=_aaeb .makeSizeIndicator (width ,height ,tp ,relation );if _baae !=nil {return nil ,_c .Wrap (_baae ,_gbbdc ,"");};_gaad ,_baae =_aaeb .selectByIndicator (_dadf );if _baae !=nil {return nil ,_c .Wrap (_baae ,_gbbdc ,"");};return _gaad ,nil ;
};func (_bccg *Bitmaps )String ()string {_fccgg :=_gc .Builder {};for _ ,_fcgeb :=range _bccg .Values {_fccgg .WriteString (_fcgeb .String ());_fccgg .WriteRune ('\n');};return _fccgg .String ();};func _eag (_aecf ,_gfbdb *Bitmap ,_baef ,_cbcgb int )(*Bitmap ,error ){const _eeab ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
if _gfbdb ==nil {return nil ,_c .Error (_eeab ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _baef < 1||_cbcgb < 1{return nil ,_c .Error (_eeab ,"\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 _baef ==1&&_cbcgb ==1{_agfa ,_ecea :=_dffg (_aecf ,_gfbdb );if _ecea !=nil {return nil ,_c .Wrap (_ecea ,_eeab ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _agfa ,nil ;};if _baef ==1||_cbcgb ==1{_cfea :=SelCreateBrick (_cbcgb ,_baef ,_cbcgb /2,_baef /2,SelHit );_bdcg ,_dbdcc :=_dcea (_aecf ,_gfbdb ,_cfea );if _dbdcc !=nil {return nil ,_c .Wrap (_dbdcc ,_eeab ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _bdcg ,nil ;};_ecgf :=SelCreateBrick (1,_baef ,0,_baef /2,SelHit );_efddd :=SelCreateBrick (_cbcgb ,1,_cbcgb /2,0,SelHit );_ccd ,_ffb :=_dcea (nil ,_gfbdb ,_ecgf );if _ffb !=nil {return nil ,_c .Wrap (_ffb ,_eeab ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_aecf ,_ffb =_dcea (_aecf ,_ccd ,_efddd );if _ffb !=nil {return nil ,_c .Wrap (_ffb ,_eeab ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _aecf ,nil ;};type shift int ;func (_ecf *Bitmap )GetVanillaData ()[]byte {if _ecf .Color ==Chocolate {_ecf .inverseData ();
};return _ecf .Data ;};func (_cedg *Bitmap )addPadBits ()(_fdd error ){const _fbg ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_ccc :=_cedg .Width %8;if _ccc ==0{return nil ;};_cdb :=_cedg .Width /8;
_dgc :=_bg .NewReader (_cedg .Data );_ddea :=make ([]byte ,_cedg .Height *_cedg .RowStride );_dfcb :=_bg .NewWriterMSB (_ddea );_dag :=make ([]byte ,_cdb );var (_cfaf int ;_dffd uint64 ;);for _cfaf =0;_cfaf < _cedg .Height ;_cfaf ++{if _ ,_fdd =_dgc .Read (_dag );
_fdd !=nil {return _c .Wrap (_fdd ,_fbg ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_fdd =_dfcb .Write (_dag );_fdd !=nil {return _c .Wrap (_fdd ,_fbg ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _dffd ,_fdd =_dgc .ReadBits (byte (_ccc ));
_fdd !=nil {return _c .Wrap (_fdd ,_fbg ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _fdd =_dfcb .WriteByte (byte (_dffd )<<uint (8-_ccc ));_fdd !=nil {return _c .Wrap (_fdd ,_fbg ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_cedg .Data =_dfcb .Data ();return nil ;};type LocationFilter int ;func (_fbeb *Boxes )Add (box *_a .Rectangle )error {if _fbeb ==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");
};*_fbeb =append (*_fbeb ,box );return nil ;};func (_cddaf *BitmapsArray )GetBox (i int )(*_a .Rectangle ,error ){const _edeb ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _cddaf ==nil {return nil ,_c .Error (_edeb ,"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 (_cddaf .Boxes )-1{return nil ,_c .Errorf (_edeb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _cddaf .Boxes [i ],nil ;};func _fcfc (_fbbg *Bitmap ,_bcbf ,_gfcb int ,_gdfe ,_fafed int ,_gfcg RasterOperator ){var (_bagda bool ;
_eeabd bool ;_dfag int ;_bcbe int ;_gegea int ;_efdad int ;_bbcc bool ;_ccgc byte ;);_acbcbg :=8-(_bcbf &7);_dcgee :=_ecef [_acbcbg ];_gcad :=_fbbg .RowStride *_gfcb +(_bcbf >>3);if _gdfe < _acbcbg {_bagda =true ;_dcgee &=_ccecf [8-_acbcbg +_gdfe ];};if !_bagda {_dfag =(_gdfe -_acbcbg )>>3;
if _dfag !=0{_eeabd =true ;_bcbe =_gcad +1;};};_gegea =(_bcbf +_gdfe )&7;if !(_bagda ||_gegea ==0){_bbcc =true ;_ccgc =_ccecf [_gegea ];_efdad =_gcad +1+_dfag ;};var _fcff ,_fcfca int ;switch _gfcg {case PixClr :for _fcff =0;_fcff < _fafed ;_fcff ++{_fbbg .Data [_gcad ]=_cafgb (_fbbg .Data [_gcad ],0x0,_dcgee );
_gcad +=_fbbg .RowStride ;};if _eeabd {for _fcff =0;_fcff < _fafed ;_fcff ++{for _fcfca =0;_fcfca < _dfag ;_fcfca ++{_fbbg .Data [_bcbe +_fcfca ]=0x0;};_bcbe +=_fbbg .RowStride ;};};if _bbcc {for _fcff =0;_fcff < _fafed ;_fcff ++{_fbbg .Data [_efdad ]=_cafgb (_fbbg .Data [_efdad ],0x0,_ccgc );
_efdad +=_fbbg .RowStride ;};};case PixSet :for _fcff =0;_fcff < _fafed ;_fcff ++{_fbbg .Data [_gcad ]=_cafgb (_fbbg .Data [_gcad ],0xff,_dcgee );_gcad +=_fbbg .RowStride ;};if _eeabd {for _fcff =0;_fcff < _fafed ;_fcff ++{for _fcfca =0;_fcfca < _dfag ;
_fcfca ++{_fbbg .Data [_bcbe +_fcfca ]=0xff;};_bcbe +=_fbbg .RowStride ;};};if _bbcc {for _fcff =0;_fcff < _fafed ;_fcff ++{_fbbg .Data [_efdad ]=_cafgb (_fbbg .Data [_efdad ],0xff,_ccgc );_efdad +=_fbbg .RowStride ;};};case PixNotDst :for _fcff =0;_fcff < _fafed ;
_fcff ++{_fbbg .Data [_gcad ]=_cafgb (_fbbg .Data [_gcad ],^_fbbg .Data [_gcad ],_dcgee );_gcad +=_fbbg .RowStride ;};if _eeabd {for _fcff =0;_fcff < _fafed ;_fcff ++{for _fcfca =0;_fcfca < _dfag ;_fcfca ++{_fbbg .Data [_bcbe +_fcfca ]=^(_fbbg .Data [_bcbe +_fcfca ]);
};_bcbe +=_fbbg .RowStride ;};};if _bbcc {for _fcff =0;_fcff < _fafed ;_fcff ++{_fbbg .Data [_efdad ]=_cafgb (_fbbg .Data [_efdad ],^_fbbg .Data [_efdad ],_ccgc );_efdad +=_fbbg .RowStride ;};};};};func (_bda *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _bda .addBorderGeneral (left ,right ,top ,bot ,val );
};func (_ebdde *Bitmaps )AddBitmap (bm *Bitmap ){_ebdde .Values =append (_ebdde .Values ,bm )};func _dgcd (_fgbg ,_defd *Bitmap ,_bgee ,_gfaf int )(*Bitmap ,error ){const _ffda ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _defd ==nil {return nil ,_c .Error (_ffda ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _bgee < 1||_gfaf < 1{return nil ,_c .Error (_ffda ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _bgee ==1&&_gfaf ==1{return _defd .Copy (),nil ;};if _bgee ==1||_gfaf ==1{_ffgc :=SelCreateBrick (_gfaf ,_bgee ,_gfaf /2,_bgee /2,SelHit );
var _adcg error ;_fgbg ,_adcg =_cbg (_fgbg ,_defd ,_ffgc );if _adcg !=nil {return nil ,_c .Wrap (_adcg ,_ffda ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fgbg ,nil ;
};_fead :=SelCreateBrick (1,_bgee ,0,_bgee /2,SelHit );_fggb :=SelCreateBrick (_gfaf ,1,_gfaf /2,0,SelHit );_fbfa ,_gde :=_cdde (nil ,_defd ,_fead );if _gde !=nil {return nil ,_c .Wrap (_gde ,_ffda ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _fgbg ,_gde =_cdde (_fgbg ,_fbfa ,_fggb );_gde !=nil {return nil ,_c .Wrap (_gde ,_ffda ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_gde =_dcea (_fbfa ,_fgbg ,_fead );_gde !=nil {return nil ,_c .Wrap (_gde ,_ffda ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_gde =_dcea (_fgbg ,_fbfa ,_fggb );_gde !=nil {return nil ,_c .Wrap (_gde ,_ffda ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _fgbg ,nil ;};func (_fdc *Bitmap )ClipRectangle (box *_a .Rectangle )(_fggf *Bitmap ,_ccg *_a .Rectangle ,_agd error ){const _gaa ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,nil ,_c .Error (_gaa ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_aeec ,_cebg :=_fdc .Width ,_fdc .Height ;_edae :=_a .Rect (0,0,_aeec ,_cebg );if !box .Overlaps (_edae ){return nil ,nil ,_c .Error (_gaa ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
};_gfcd :=box .Intersect (_edae );_aeff ,_cce :=_gfcd .Min .X ,_gfcd .Min .Y ;_dbac ,_eaf :=_gfcd .Dx (),_gfcd .Dy ();_fggf =New (_dbac ,_eaf );_fggf .Text =_fdc .Text ;if _agd =_fggf .RasterOperation (0,0,_dbac ,_eaf ,PixSrc ,_fdc ,_aeff ,_cce );_agd !=nil {return nil ,nil ,_c .Wrap (_agd ,_gaa ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_ccg =&_gfcd ;return _fggf ,_ccg ,nil ;};func _cab (_abg ,_dege *Bitmap ,_gdgc ,_egcg ,_agdf ,_bddc ,_gcge ,_ffge ,_dggc ,_egec int ,_fddd CombinationOperator )error {var _defb int ;_acccd :=func (){_defb ++;_agdf +=_dege .RowStride ;_bddc +=_abg .RowStride ;
_gcge +=_abg .RowStride };for _defb =_gdgc ;_defb < _egcg ;_acccd (){var _afade uint16 ;_dcca :=_agdf ;for _dabg :=_bddc ;_dabg <=_gcge ;_dabg ++{_gegd ,_bfde :=_dege .GetByte (_dcca );if _bfde !=nil {return _bfde ;};_cedc ,_bfde :=_abg .GetByte (_dabg );
if _bfde !=nil {return _bfde ;};_afade =(_afade |uint16 (_cedc ))<<uint (_egec );_cedc =byte (_afade >>8);if _dabg ==_gcge {_cedc =_ddab (uint (_ffge ),_cedc );};if _bfde =_dege .SetByte (_dcca ,_fbdb (_gegd ,_cedc ,_fddd ));_bfde !=nil {return _bfde ;
};_dcca ++;_afade <<=uint (_dggc );};};return nil ;};func _dc ()(_bgg [256]uint16 ){for _dea :=0;_dea < 256;_dea ++{if _dea &0x01!=0{_bgg [_dea ]|=0x3;};if _dea &0x02!=0{_bgg [_dea ]|=0xc;};if _dea &0x04!=0{_bgg [_dea ]|=0x30;};if _dea &0x08!=0{_bgg [_dea ]|=0xc0;
};if _dea &0x10!=0{_bgg [_dea ]|=0x300;};if _dea &0x20!=0{_bgg [_dea ]|=0xc00;};if _dea &0x40!=0{_bgg [_dea ]|=0x3000;};if _dea &0x80!=0{_bgg [_dea ]|=0xc000;};};return _bgg ;};func (_acba *ClassedPoints )YAtIndex (i int )float32 {return (*_acba .Points )[_acba .IntSlice [i ]].Y };
type byHeight Bitmaps ;func (_gdag *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _ccbbg ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_ccbbe ,_dcff :=_gdag .selectByIndexes (idx );
if _dcff !=nil {return nil ,_c .Wrap (_dcff ,_ccbbg ,"");};return _ccbbe ,nil ;};func (_cfba *Bitmap )setEightFullBytes (_ddc int ,_bgge uint64 )error {if _ddc +7> len (_cfba .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");
};_cfba .Data [_ddc ]=byte ((_bgge &0xff00000000000000)>>56);_cfba .Data [_ddc +1]=byte ((_bgge &0xff000000000000)>>48);_cfba .Data [_ddc +2]=byte ((_bgge &0xff0000000000)>>40);_cfba .Data [_ddc +3]=byte ((_bgge &0xff00000000)>>32);_cfba .Data [_ddc +4]=byte ((_bgge &0xff000000)>>24);
_cfba .Data [_ddc +5]=byte ((_bgge &0xff0000)>>16);_cfba .Data [_ddc +6]=byte ((_bgge &0xff00)>>8);_cfba .Data [_ddc +7]=byte (_bgge &0xff);return nil ;};func (_daf *Bitmap )Zero ()bool {_deef :=_daf .Width /8;_cda :=_daf .Width &7;var _caa byte ;if _cda !=0{_caa =byte (0xff<<uint (8-_cda ));
};var _cdg ,_fae ,_dfa int ;for _fae =0;_fae < _daf .Height ;_fae ++{_cdg =_daf .RowStride *_fae ;for _dfa =0;_dfa < _deef ;_dfa ,_cdg =_dfa +1,_cdg +1{if _daf .Data [_cdg ]!=0{return false ;};};if _cda > 0{if _daf .Data [_cdg ]&_caa !=0{return false ;
};};};return true ;};type Color int ;func (_cacg *Bitmap )centroid (_cgggc ,_fbee []int )(Point ,error ){_afgb :=Point {};_cacg .setPadBits (0);if len (_cgggc )==0{_cgggc =_dcde ();};if len (_fbee )==0{_fbee =_fadcb ();};var _fcbbc ,_gfgc ,_gcbcb ,_geed ,_dcaa ,_eeaf int ;
var _afeg byte ;for _dcaa =0;_dcaa < _cacg .Height ;_dcaa ++{_aeab :=_cacg .RowStride *_dcaa ;_geed =0;for _eeaf =0;_eeaf < _cacg .RowStride ;_eeaf ++{_afeg =_cacg .Data [_aeab +_eeaf ];if _afeg !=0{_geed +=_fbee [_afeg ];_fcbbc +=_cgggc [_afeg ]+_eeaf *8*_fbee [_afeg ];
};};_gcbcb +=_geed ;_gfgc +=_geed *_dcaa ;};if _gcbcb !=0{_afgb .X =float32 (_fcbbc )/float32 (_gcbcb );_afgb .Y =float32 (_gfgc )/float32 (_gcbcb );};return _afgb ,nil ;};func (_aeag Points )GetIntY (i int )(int ,error ){if i >=len (_aeag ){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 (_aeag [i ].Y ),nil ;};func (_dbe *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _dbe .removeBorderGeneral (left ,right ,top ,bot );};func (_ecd *Bitmap )setEightPartlyBytes (_dagg ,_fbd int ,_afbc uint64 )(_gbbc error ){var (_edee byte ;
_edge int ;);const _ecgd ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _bedf :=1;_bedf <=_fbd ;_bedf ++{_edge =64-_bedf *8;_edee =byte (_afbc >>uint (_edge )&0xff);_fc .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",_edee ,_dagg ,_dagg +_bedf -1,_fbd ,_edge );
if _gbbc =_ecd .SetByte (_dagg +_bedf -1,_edee );_gbbc !=nil {return _c .Wrap (_gbbc ,_ecgd ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_fbcg :=_ecd .RowStride *8-_ecd .Width ;if _fbcg ==0{return nil ;};_edge -=8;_edee =byte (_afbc >>uint (_edge )&0xff)<<uint (_fbcg );
if _gbbc =_ecd .SetByte (_dagg +_fbd ,_edee );_gbbc !=nil {return _c .Wrap (_gbbc ,_ecgd ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func Extract (roi _a .Rectangle ,src *Bitmap )(*Bitmap ,error ){_ddfe :=New (roi .Dx (),roi .Dy ());_cecg :=roi .Min .X &0x07;
_cefe :=8-_cecg ;_efgfa :=uint (8-_ddfe .Width &0x07);_cfca :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_abd :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_agdb :=_ddfe .RowStride ==_abd +1-_cfca ;var _abb int ;for _gbg :=roi .Min .Y ;_gbg < roi .Max .Y ;
_gbg ++{_efda :=_cfca ;_ebc :=_abb ;switch {case _cfca ==_abd :_badfg ,_adee :=src .GetByte (_efda );if _adee !=nil {return nil ,_adee ;};_badfg <<=uint (_cecg );_adee =_ddfe .SetByte (_ebc ,_ddab (_efgfa ,_badfg ));if _adee !=nil {return nil ,_adee ;};
case _cecg ==0:for _dced :=_cfca ;_dced <=_abd ;_dced ++{_cfcad ,_bcdfa :=src .GetByte (_efda );if _bcdfa !=nil {return nil ,_bcdfa ;};_efda ++;if _dced ==_abd &&_agdb {_cfcad =_ddab (_efgfa ,_cfcad );};_bcdfa =_ddfe .SetByte (_ebc ,_cfcad );if _bcdfa !=nil {return nil ,_bcdfa ;
};_ebc ++;};default:_bdbb :=_gbee (src ,_ddfe ,uint (_cecg ),uint (_cefe ),_efgfa ,_cfca ,_abd ,_agdb ,_efda ,_ebc );if _bdbb !=nil {return nil ,_bdbb ;};};_cfca +=src .RowStride ;_abd +=src .RowStride ;_abb +=_ddfe .RowStride ;};return _ddfe ,nil ;};func _ecbae (_gbbgf *Bitmap ,_cdbg *_f .Stack ,_bdee ,_gbge ,_gebc int )(_gcdg *_a .Rectangle ,_eaef error ){const _acgc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _gbbgf ==nil {return nil ,_c .Error (_acgc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cdbg ==nil {return nil ,_c .Error (_acgc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};switch _gebc {case 4:if _gcdg ,_eaef =_dbdcf (_gbbgf ,_cdbg ,_bdee ,_gbge );_eaef !=nil {return nil ,_c .Wrap (_eaef ,_acgc ,"");};return _gcdg ,nil ;case 8:if _gcdg ,_eaef =_gceb (_gbbgf ,_cdbg ,_bdee ,_gbge );_eaef !=nil {return nil ,_c .Wrap (_eaef ,_acgc ,"");
};return _gcdg ,nil ;default:return nil ,_c .Errorf (_acgc ,"\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",_gebc );
};};var (_dfde =_dc ();_fegc =_dga ();_eddbd =_acea (););type ClassedPoints struct{*Points ;_f .IntSlice ;_bgga func (_ffdga ,_feeb int )bool ;};func (_ecdf Points )YSorter ()func (_cgffg ,_fega int )bool {return func (_abced ,_bbee int )bool {return _ecdf [_abced ].Y < _ecdf [_bbee ].Y };
};func (_ddegg Points )XSorter ()func (_deeea ,_degce int )bool {return func (_cgdgee ,_bfdd int )bool {return _ddegg [_cgdgee ].X < _ddegg [_bfdd ].X };};func _fbb (_dbb *Bitmap ,_fga *Bitmap ,_fgac int )(_bfa error ){const _dgg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";
switch _fgac {case 2:_bfa =_ac (_dbb ,_fga );case 4:_bfa =_ce (_dbb ,_fga );case 8:_bfa =_eb (_dbb ,_fga );default:return _c .Error (_dgg ,"\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 _bfa !=nil {_bfa =_c .Wrap (_bfa ,_dgg ,"");};return _bfa ;};func (_ebgg *BitmapsArray )AddBitmaps (bm *Bitmaps ){_ebgg .Values =append (_ebgg .Values ,bm )};func (_dccg *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_dccg .Width ,Height :_dccg .Height ,RowStride :_dccg .RowStride ,Color :_dccg .Color ,Text :_dccg .Text ,BitmapNumber :_dccg .BitmapNumber ,Special :_dccg .Special ,Data :make ([]byte ,len (_dccg .Data ))};
};func _gbee (_bbd ,_gefc *Bitmap ,_gfca ,_ada ,_dffa uint ,_egff ,_fcgg int ,_fbfb bool ,_geab ,_efdc int )error {for _fccb :=_egff ;_fccb < _fcgg ;_fccb ++{if _geab +1< len (_bbd .Data ){_fade :=_fccb +1==_fcgg ;_affg ,_gaaf :=_bbd .GetByte (_geab );
if _gaaf !=nil {return _gaaf ;};_geab ++;_affg <<=_gfca ;_edga ,_gaaf :=_bbd .GetByte (_geab );if _gaaf !=nil {return _gaaf ;};_edga >>=_ada ;_dfg :=_affg |_edga ;if _fade &&!_fbfb {_dfg =_ddab (_dffa ,_dfg );};_gaaf =_gefc .SetByte (_efdc ,_dfg );if _gaaf !=nil {return _gaaf ;
};_efdc ++;if _fade &&_fbfb {_efbc ,_egef :=_bbd .GetByte (_geab );if _egef !=nil {return _egef ;};_efbc <<=_gfca ;_dfg =_ddab (_dffa ,_efbc );if _egef =_gefc .SetByte (_efdc ,_dfg );_egef !=nil {return _egef ;};};continue ;};_dgfb ,_dbdb :=_bbd .GetByte (_geab );
if _dbdb !=nil {_fc .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",_geab ,_dbdb );return _dbdb ;};
_dgfb <<=_gfca ;_geab ++;_dbdb =_gefc .SetByte (_efdc ,_dgfb );if _dbdb !=nil {return _dbdb ;};_efdc ++;};return nil ;};func _gedb (_gfeg *Bitmap ,_ffcf ,_gbc ,_aefdg ,_gcab int ,_fda RasterOperator ,_fgbac *Bitmap ,_dagga ,_gbaf int )error {const _gggb ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
if _gfeg ==nil {return _c .Error (_gggb ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _fda ==PixDst {return nil ;};switch _fda {case PixClr ,PixSet ,PixNotDst :_ceeea (_gfeg ,_ffcf ,_gbc ,_aefdg ,_gcab ,_fda );
return nil ;};if _fgbac ==nil {_fc .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 (_gggb ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _daa :=_efce (_gfeg ,_ffcf ,_gbc ,_aefdg ,_gcab ,_fda ,_fgbac ,_dagga ,_gbaf );_daa !=nil {return _c .Wrap (_daa ,_gggb ,"");};return nil ;
};func TstFrameBitmapData ()[]byte {return _gcdeb .Data };const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_bfac *Bitmap )clipRectangle (_ccb ,_accb *_a .Rectangle )(_cfg *Bitmap ,_aceg error ){const _dbad ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if _ccb ==nil {return nil ,_c .Error (_dbad ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_geb ,_ebdc :=_bfac .Width ,_bfac .Height ;_aecc ,_aceg :=ClipBoxToRectangle (_ccb ,_geb ,_ebdc );if _aceg !=nil {_fc .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",_aceg );
return nil ,nil ;};_bfea ,_gcc :=_aecc .Min .X ,_aecc .Min .Y ;_cfb ,_dcgg :=_aecc .Max .X -_aecc .Min .X ,_aecc .Max .Y -_aecc .Min .Y ;_cfg =New (_cfb ,_dcgg );_cfg .Text =_bfac .Text ;if _aceg =_cfg .RasterOperation (0,0,_cfb ,_dcgg ,PixSrc ,_bfac ,_bfea ,_gcc );
_aceg !=nil {return nil ,_c .Wrap (_aceg ,_dbad ,"");};if _accb !=nil {*_accb =*_aecc ;};return _cfg ,nil ;};func _ebdg (_abaag ,_fcgc *Bitmap ,_acfd ,_dada int )(*Bitmap ,error ){const _bafa ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _fcgc ==nil {return nil ,_c .Error (_bafa ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _acfd < 1&&_dada < 1{return nil ,_c .Error (_bafa ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _acfd ==1&&_dada ==1{return _fcgc .Copy (),nil ;};if _acfd ==1||_dada ==1{var _edfa error ;
_bfdc :=SelCreateBrick (_dada ,_acfd ,_dada /2,_acfd /2,SelHit );_abaag ,_edfa =_gbaa (_abaag ,_fcgc ,_bfdc );if _edfa !=nil {return nil ,_c .Wrap (_edfa ,_bafa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _abaag ,nil ;};_gcac :=SelCreateBrick (1,_acfd ,0,_acfd /2,SelHit );_gdad :=SelCreateBrick (_dada ,1,_dada /2,0,SelHit );_cefed ,_febg :=_dcea (nil ,_fcgc ,_gcac );if _febg !=nil {return nil ,_c .Wrap (_febg ,_bafa ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_abaag ,_febg =_dcea (_abaag ,_cefed ,_gdad );if _febg !=nil {return nil ,_c .Wrap (_febg ,_bafa ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_febg =_cdde (_cefed ,_abaag ,_gcac );if _febg !=nil {return nil ,_c .Wrap (_febg ,_bafa ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_febg =_cdde (_abaag ,_cefed ,_gdad );if _febg !=nil {return nil ,_c .Wrap (_febg ,_bafa ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _abaag ,nil ;};func (_cege *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_aedgd *Boxes ,_eeadb error ){const _dgff ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _cege ==nil {return nil ,_c .Error (_dgff ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_cege )==0{return _cege ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_dgff ,"\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 (_dgff ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_bbeg :=_cege .makeSizeIndicator (width ,height ,tp ,relation );_bbfd ,_eeadb :=_cege .selectWithIndicator (_bbeg );if _eeadb !=nil {return nil ,_c .Wrap (_eeadb ,_dgff ,"");};return _bbfd ,nil ;};func (_cdcf *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _cddc ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
if len (_cdcf .Values )==0{return nil ,_c .Error (_cddc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_acff :=&BitmapsArray {};_cdcf .SortByHeight ();_bedb :=-1;_aagc :=-1;for _gfcgd :=0;_gfcgd < len (_cdcf .Values );
_gfcgd ++{_gebad :=_cdcf .Values [_gfcgd ].Height ;if _gebad > _bedb {_bedb =_gebad ;_aagc ++;_acff .Values =append (_acff .Values ,&Bitmaps {});};_acff .Values [_aagc ].AddBitmap (_cdcf .Values [_gfcgd ]);};return _acff ,nil ;};func (_dcb *Bitmap )GetUnpaddedData ()([]byte ,error ){_ecg :=uint (_dcb .Width &0x07);
if _ecg ==0{return _dcb .Data ,nil ;};_cgf :=_dcb .Width *_dcb .Height ;if _cgf %8!=0{_cgf >>=3;_cgf ++;}else {_cgf >>=3;};_eba :=make ([]byte ,_cgf );_adf :=_bg .NewWriterMSB (_eba );const _bgcd ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
for _eee :=0;_eee < _dcb .Height ;_eee ++{for _fbe :=0;_fbe < _dcb .RowStride ;_fbe ++{_efef :=_dcb .Data [_eee *_dcb .RowStride +_fbe ];if _fbe !=_dcb .RowStride -1{_feb :=_adf .WriteByte (_efef );if _feb !=nil {return nil ,_c .Wrap (_feb ,_bgcd ,"");
};continue ;};for _efg :=uint (0);_efg < _ecg ;_efg ++{_dff :=_adf .WriteBit (int (_efef >>(7-_efg )&0x01));if _dff !=nil {return nil ,_c .Wrap (_dff ,_bgcd ,"");};};};};return _eba ,nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_a .Rectangle ;
};func _gfgbb (_caaa *Bitmap ,_agced ,_adged ,_fdag ,_ecfga int ,_gdde RasterOperator ,_ccbf *Bitmap ,_dgfd ,_bdfb int )error {var (_edage byte ;_ggce int ;_abcf int ;_gaec ,_fgce int ;_bgbf ,_becge int ;);_eacc :=_fdag >>3;_cfgbf :=_fdag &7;if _cfgbf > 0{_edage =_ccecf [_cfgbf ];
};_ggce =_ccbf .RowStride *_bdfb +(_dgfd >>3);_abcf =_caaa .RowStride *_adged +(_agced >>3);switch _gdde {case PixSrc :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;
_becge ++{_caaa .Data [_fgce ]=_ccbf .Data [_gaec ];_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],_ccbf .Data [_gaec ],_edage );};};case PixNotSrc :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;
_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]=^(_ccbf .Data [_gaec ]);_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],^_ccbf .Data [_gaec ],_edage );};};case PixSrcOrDst :for _bgbf =0;
_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]|=_ccbf .Data [_gaec ];_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],_ccbf .Data [_gaec ]|_caaa .Data [_fgce ],_edage );
};};case PixSrcAndDst :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]&=_ccbf .Data [_gaec ];_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],_ccbf .Data [_gaec ]&_caaa .Data [_fgce ],_edage );
};};case PixSrcXorDst :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]^=_ccbf .Data [_gaec ];_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],_ccbf .Data [_gaec ]^_caaa .Data [_fgce ],_edage );
};};case PixNotSrcOrDst :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]|=^(_ccbf .Data [_gaec ]);_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],^(_ccbf .Data [_gaec ])|_caaa .Data [_fgce ],_edage );
};};case PixNotSrcAndDst :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]&=^(_ccbf .Data [_gaec ]);_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],^(_ccbf .Data [_gaec ])&_caaa .Data [_fgce ],_edage );
};};case PixSrcOrNotDst :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]=_ccbf .Data [_gaec ]|^(_caaa .Data [_fgce ]);_fgce ++;
_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],_ccbf .Data [_gaec ]|^(_caaa .Data [_fgce ]),_edage );};};case PixSrcAndNotDst :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;
for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]=_ccbf .Data [_gaec ]&^(_caaa .Data [_fgce ]);_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],_ccbf .Data [_gaec ]&^(_caaa .Data [_fgce ]),_edage );};};case PixNotPixSrcOrDst :for _bgbf =0;
_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]=^(_ccbf .Data [_gaec ]|_caaa .Data [_fgce ]);_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],^(_ccbf .Data [_gaec ]|_caaa .Data [_fgce ]),_edage );
};};case PixNotPixSrcAndDst :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]=^(_ccbf .Data [_gaec ]&_caaa .Data [_fgce ]);_fgce ++;
_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],^(_ccbf .Data [_gaec ]&_caaa .Data [_fgce ]),_edage );};};case PixNotPixSrcXorDst :for _bgbf =0;_bgbf < _ecfga ;_bgbf ++{_gaec =_ggce +_bgbf *_ccbf .RowStride ;_fgce =_abcf +_bgbf *_caaa .RowStride ;
for _becge =0;_becge < _eacc ;_becge ++{_caaa .Data [_fgce ]=^(_ccbf .Data [_gaec ]^_caaa .Data [_fgce ]);_fgce ++;_gaec ++;};if _cfgbf > 0{_caaa .Data [_fgce ]=_cafgb (_caaa .Data [_fgce ],^(_ccbf .Data [_gaec ]^_caaa .Data [_fgce ]),_edage );};};default:_fc .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",_gdde );
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 (_dab *Bitmap )Equals (s *Bitmap )bool {if len (_dab .Data )!=len (s .Data )||_dab .Width !=s .Width ||_dab .Height !=s .Height {return false ;};for _gbde :=0;_gbde < _dab .Height ;_gbde ++{_ecba :=_gbde *_dab .RowStride ;for _bbgc :=0;
_bbgc < _dab .RowStride ;_bbgc ++{if _dab .Data [_ecba +_bbgc ]!=s .Data [_ecba +_bbgc ]{return false ;};};};return true ;};func _fafb (_bgfb ,_cef int )int {if _bgfb < _cef {return _bgfb ;};return _cef ;};func _ac (_cf ,_e *Bitmap )(_ee error ){const _ef ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
_gbd :=_e .RowStride ;_bge :=_cf .RowStride ;var (_ec byte ;_aa uint16 ;_ed ,_ca ,_ae ,_af ,_bgc int ;);for _ae =0;_ae < _e .Height ;_ae ++{_ed =_ae *_gbd ;_ca =2*_ae *_bge ;for _af =0;_af < _gbd ;_af ++{_ec =_e .Data [_ed +_af ];_aa =_dfde [_ec ];_bgc =_ca +_af *2;
if _cf .RowStride !=_e .RowStride *2&&(_af +1)*2> _cf .RowStride {_ee =_cf .SetByte (_bgc ,byte (_aa >>8));}else {_ee =_cf .setTwoBytes (_bgc ,_aa );};if _ee !=nil {return _c .Wrap (_ee ,_ef ,"");};};for _af =0;_af < _bge ;_af ++{_bgc =_ca +_bge +_af ;
_ec =_cf .Data [_ca +_af ];if _ee =_cf .SetByte (_bgc ,_ec );_ee !=nil {return _c .Wrapf (_ee ,_ef ,"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",_ca +_af ,_ca +_bge +_af );
};};};return nil ;};func TstCSymbol (t *_d .T )*Bitmap {t .Helper ();_bcbg :=New (6,6);_gb .NoError (t ,_bcbg .SetPixel (1,0,1));_gb .NoError (t ,_bcbg .SetPixel (2,0,1));_gb .NoError (t ,_bcbg .SetPixel (3,0,1));_gb .NoError (t ,_bcbg .SetPixel (4,0,1));
_gb .NoError (t ,_bcbg .SetPixel (0,1,1));_gb .NoError (t ,_bcbg .SetPixel (5,1,1));_gb .NoError (t ,_bcbg .SetPixel (0,2,1));_gb .NoError (t ,_bcbg .SetPixel (0,3,1));_gb .NoError (t ,_bcbg .SetPixel (0,4,1));_gb .NoError (t ,_bcbg .SetPixel (5,4,1));
_gb .NoError (t ,_bcbg .SetPixel (1,5,1));_gb .NoError (t ,_bcbg .SetPixel (2,5,1));_gb .NoError (t ,_bcbg .SetPixel (3,5,1));_gb .NoError (t ,_bcbg .SetPixel (4,5,1));return _bcbg ;};var _gecbb =[]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 (_eegd *Points )Add (pt *Points )error {const _afbf ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _eegd ==nil {return _c .Error (_afbf ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if pt ==nil {return _c .Error (_afbf ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_eegd =append (*_eegd ,*pt ...);return nil ;};func _aaf (_fcc *Bitmap ,_cea int )(*Bitmap ,error ){const _bgeb ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";
if _fcc ==nil {return nil ,_c .Error (_bgeb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cea ==1{return _dffg (nil ,_fcc );};if _cea !=2&&_cea !=4&&_cea !=8{return nil ,_c .Error (_bgeb ,"\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");
};_afe :=_cea *_fcc .Width ;_df :=_cea *_fcc .Height ;_aff :=New (_afe ,_df );var _cee error ;switch _cea {case 2:_cee =_ac (_aff ,_fcc );case 4:_cee =_ce (_aff ,_fcc );case 8:_cee =_eb (_aff ,_fcc );};if _cee !=nil {return nil ,_c .Wrap (_cee ,_bgeb ,"");
};return _aff ,nil ;};func _aadfa (_gade ...MorphProcess )(_dddd error ){const _feade ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _agg ,_gacc int ;for _geeb ,_bdeb :=range _gade {if _dddd =_bdeb .verify (_geeb ,&_agg ,&_gacc );
_dddd !=nil {return _c .Wrap (_dddd ,_feade ,"");};};if _gacc !=0&&_agg !=0{return _c .Error (_feade ,"\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 (_cffc *ClassedPoints )Swap (i ,j int ){_cffc .IntSlice [i ],_cffc .IntSlice [j ]=_cffc .IntSlice [j ],_cffc .IntSlice [i ];};func (_afgf MorphProcess )verify (_abf int ,_bfce ,_bgeba *int )error {const _dffaf ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
switch _afgf .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_afgf .Arguments )!=2{return _c .Error (_dffaf ,"\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");
};_fdcc ,_dcdc :=_afgf .getWidthHeight ();if _fdcc <=0||_dcdc <=0{return _c .Error (_dffaf ,"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 :_edaf :=len (_afgf .Arguments );*_bfce +=_edaf ;if _edaf < 1||_edaf > 4{return _c .Error (_dffaf ,"\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 _cccf :=0;_cccf < _edaf ;_cccf ++{if _afgf .Arguments [_cccf ]< 1||_afgf .Arguments [_cccf ]> 4{return _c .Error (_dffaf ,"\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 (_afgf .Arguments )==0{return _c .Error (_dffaf ,"\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");
};_bgde :=_afgf .Arguments [0];if _bgde !=2&&_bgde !=4&&_bgde !=8{return _c .Error (_dffaf ,"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");
};*_bfce -=_bdfc [_bgde /4];case MopAddBorder :if len (_afgf .Arguments )==0{return _c .Error (_dffaf ,"\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");
};_gbf :=_afgf .Arguments [0];if _abf > 0{return _c .Error (_dffaf ,"\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 _gbf < 1{return _c .Error (_dffaf ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_bgeba =_gbf ;};return nil ;};func (_edgg *ClassedPoints )SortByY (){_edgg ._bgga =_edgg .ySortFunction ();
_b .Sort (_edgg )};func _ce (_cd ,_gba *Bitmap )(_ad error ){const _bf ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_bb :=_gba .RowStride ;_fg :=_cd .RowStride ;_dg :=_gba .RowStride *4-_cd .RowStride ;
var (_cc ,_gec byte ;_aec uint32 ;_bgb ,_aee ,_aad ,_bfg ,_gg ,_gd ,_fb int ;);for _aad =0;_aad < _gba .Height ;_aad ++{_bgb =_aad *_bb ;_aee =4*_aad *_fg ;for _bfg =0;_bfg < _bb ;_bfg ++{_cc =_gba .Data [_bgb +_bfg ];_aec =_fegc [_cc ];_gd =_aee +_bfg *4;
if _dg !=0&&(_bfg +1)*4> _cd .RowStride {for _gg =_dg ;_gg > 0;_gg --{_gec =byte ((_aec >>uint (_gg *8))&0xff);_fb =_gd +(_dg -_gg );if _ad =_cd .SetByte (_fb ,_gec );_ad !=nil {return _c .Wrapf (_ad ,_bf ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_gg );
};};}else if _ad =_cd .setFourBytes (_gd ,_aec );_ad !=nil {return _c .Wrap (_ad ,_bf ,"");};if _ad =_cd .setFourBytes (_aee +_bfg *4,_fegc [_gba .Data [_bgb +_bfg ]]);_ad !=nil {return _c .Wrap (_ad ,_bf ,"");};};for _gg =1;_gg < 4;_gg ++{for _bfg =0;
_bfg < _fg ;_bfg ++{if _ad =_cd .SetByte (_aee +_gg *_fg +_bfg ,_cd .Data [_aee +_bfg ]);_ad !=nil {return _c .Wrapf (_ad ,_bf ,"\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",_gg ,_bfg );
};};};};return nil ;};func (_gfbf *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _ecad ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _fafea :=_gfbf .validateIntSlice ();
_fafea !=nil {return nil ,_c .Wrap (_fafea ,_ecad ,"");};if _gfbf .IntSlice .Size ()==0{return nil ,_c .Error (_ecad ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_gfbf .SortByY ();var (_dbbf []*ClassedPoints ;
_fcea int ;);_cbfe :=-1;var _fgbe *ClassedPoints ;for _cfagd :=0;_cfagd < len (_gfbf .IntSlice );_cfagd ++{_fcea =int (_gfbf .YAtIndex (_cfagd ));if _fcea !=_cbfe {_fgbe =&ClassedPoints {Points :_gfbf .Points };_cbfe =_fcea ;_dbbf =append (_dbbf ,_fgbe );
};_fgbe .IntSlice =append (_fgbe .IntSlice ,_gfbf .IntSlice [_cfagd ]);};for _ ,_cedb :=range _dbbf {_cedb .SortByX ();};return _dbbf ,nil ;};func TstVSymbol (t *_d .T ,scale ...int )*Bitmap {_adgd ,_debc :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});
_gb .NoError (t ,_debc );return TstGetScaledSymbol (t ,_adgd ,scale ...);};func (_gaff *Bitmaps )AddBox (box *_a .Rectangle ){_gaff .Boxes =append (_gaff .Boxes ,box )};func (_efb *Bitmap )SizesEqual (s *Bitmap )bool {if _efb ==s {return true ;};if _efb .Width !=s .Width ||_efb .Height !=s .Height {return false ;
};return true ;};func (_ebda *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_agc bool ,_gda error ){const _edf ="\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 =_fadcb ();};_egf :=_ebda .Width >>3;_eega :=_ebda .Width &7;_fcd :=byte (0xff<<uint (8-_eega ));var (_baf ,_agdg ,_cac ,_gad int ;_gdf byte ;);for _baf =0;_baf < _ebda .Height ;_baf ++{_cac =_ebda .RowStride *_baf ;for _agdg =0;_agdg < _egf ;
_agdg ++{_gdf ,_gda =_ebda .GetByte (_cac +_agdg );if _gda !=nil {return false ,_c .Wrap (_gda ,_edf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_gad +=tab8 [_gdf ];};if _eega !=0{_gdf ,_gda =_ebda .GetByte (_cac +_agdg );if _gda !=nil {return false ,_c .Wrap (_gda ,_edf ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
};_gdf &=_fcd ;_gad +=tab8 [_gdf ];};if _gad > thresh {return true ,nil ;};};return _agc ,nil ;};func _acea ()(_eg [256]uint64 ){for _cff :=0;_cff < 256;_cff ++{if _cff &0x01!=0{_eg [_cff ]|=0xff;};if _cff &0x02!=0{_eg [_cff ]|=0xff00;};if _cff &0x04!=0{_eg [_cff ]|=0xff0000;
};if _cff &0x08!=0{_eg [_cff ]|=0xff000000;};if _cff &0x10!=0{_eg [_cff ]|=0xff00000000;};if _cff &0x20!=0{_eg [_cff ]|=0xff0000000000;};if _cff &0x40!=0{_eg [_cff ]|=0xff000000000000;};if _cff &0x80!=0{_eg [_cff ]|=0xff00000000000000;};};return _eg ;};
func (_eab *Bitmap )GetBitOffset (x int )int {return x &0x07};func _aeeb (_aaec ,_fcdc *Bitmap ,_fecf ,_bgdec int )(_gfeff error ){const _egggf ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_daaf ,_dddbf ,_daab ,_cacd int ;
_edad ,_fafg ,_dcbb ,_cgggb ,_gacaf ,_cacgc ,_ecee byte ;);for _daaf =0;_daaf < _fecf ;_daaf ++{_daab =_daaf *_aaec .RowStride ;_cacd =_daaf *_fcdc .RowStride ;for _dddbf =0;_dddbf < _bgdec ;_dddbf ++{_edad ,_gfeff =_aaec .GetByte (_daab +_dddbf );if _gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");
};_fafg ,_gfeff =_fcdc .GetByte (_cacd +_dddbf );if _gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _daaf > 0{_dcbb ,_gfeff =_aaec .GetByte (_daab -_aaec .RowStride +_dddbf );if _gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u0069\u0020\u003e \u0030");
};_edad |=_dcbb ;};if _dddbf > 0{_cgggb ,_gfeff =_aaec .GetByte (_daab +_dddbf -1);if _gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u006a\u0020\u003e \u0030");};_edad |=_cgggb <<7;};_edad &=_fafg ;if _edad ==0||(^_edad )==0{if _gfeff =_aaec .SetByte (_daab +_dddbf ,_edad );
_gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_ecee =_edad ;_edad =(_edad |(_edad >>1)|(_edad <<1))&_fafg ;if (_edad ^_ecee )==0{if _gfeff =_aaec .SetByte (_daab +_dddbf ,_edad );
_gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _daaf =_fecf -1;_daaf >=0;_daaf --{_daab =_daaf *_aaec .RowStride ;_cacd =_daaf *_fcdc .RowStride ;
for _dddbf =_bgdec -1;_dddbf >=0;_dddbf --{if _edad ,_gfeff =_aaec .GetByte (_daab +_dddbf );_gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _fafg ,_gfeff =_fcdc .GetByte (_cacd +_dddbf );
_gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _daaf < _fecf -1{if _gacaf ,_gfeff =_aaec .GetByte (_daab +_aaec .RowStride +_dddbf );_gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");
};_edad |=_gacaf ;};if _dddbf < _bgdec -1{if _cacgc ,_gfeff =_aaec .GetByte (_daab +_dddbf +1);_gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};
_edad |=_cacgc >>7;};_edad &=_fafg ;if _edad ==0||(^_edad )==0{if _gfeff =_aaec .SetByte (_daab +_dddbf ,_edad );_gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\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 {_ecee =_edad ;_edad =(_edad |(_edad >>1)|(_edad <<1))&_fafg ;if (_edad ^_ecee )==0{if _gfeff =_aaec .SetByte (_daab +_dddbf ,_edad );_gfeff !=nil {return _c .Wrap (_gfeff ,_egggf ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};func _fea (_dfb ,_edcf int )*Bitmap {return &Bitmap {Width :_dfb ,Height :_edcf ,RowStride :(_dfb +7)>>3};};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gedb (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func (_agce *ClassedPoints )xSortFunction ()func (_ecgc int ,_cge int )bool {return func (_fefa ,_bgff int )bool {return _agce .XAtIndex (_fefa )< _agce .XAtIndex (_bgff )};};func (_bfcc *Bitmap )countPixels ()int {var (_cdf int ;_edcfa uint8 ;_bbcb byte ;
_cggg int ;);_bca :=_bfcc .RowStride ;_fcbb :=uint (_bfcc .Width &0x07);if _fcbb !=0{_edcfa =uint8 ((0xff<<(8-_fcbb ))&0xff);_bca --;};for _deb :=0;_deb < _bfcc .Height ;_deb ++{for _cggg =0;_cggg < _bca ;_cggg ++{_bbcb =_bfcc .Data [_deb *_bfcc .RowStride +_cggg ];
_cdf +=int (_feg [_bbcb ]);};if _fcbb !=0{_cdf +=int (_feg [_bfcc .Data [_deb *_bfcc .RowStride +_cggg ]&_edcfa ]);};};return _cdf ;};func MakePixelCentroidTab8 ()[]int {return _dcde ()};func (_ceec *ClassedPoints )XAtIndex (i int )float32 {return (*_ceec .Points )[_ceec .IntSlice [i ]].X };
type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};var (_ccecf =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_ecef =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func _adeb (_fcf ,_fcccd int )int {if _fcf > _fcccd {return _fcf ;
};return _fcccd ;};func (_bebdf *Bitmaps )Size ()int {return len (_bebdf .Values )};func (_cfcg *Bitmap )connComponentsBB (_eace int )(_geec *Boxes ,_afd error ){const _deee ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
if _eace !=4&&_eace !=8{return nil ,_c .Error (_deee ,"\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 _cfcg .Zero (){return &Boxes {},nil ;
};_cfcg .setPadBits (0);_eceg ,_afd :=_dffg (nil ,_cfcg );if _afd !=nil {return nil ,_c .Wrap (_afd ,_deee ,"\u0062\u006d\u0031");};_fabg :=&_f .Stack {};_fabg .Aux =&_f .Stack {};_geec =&Boxes {};var (_aafa ,_cfcga int ;_dcbg _a .Point ;_degc bool ;_dccf *_a .Rectangle ;
);for {if _dcbg ,_degc ,_afd =_eceg .nextOnPixel (_cfcga ,_aafa );_afd !=nil {return nil ,_c .Wrap (_afd ,_deee ,"");};if !_degc {break ;};if _dccf ,_afd =_ecbae (_eceg ,_fabg ,_dcbg .X ,_dcbg .Y ,_eace );_afd !=nil {return nil ,_c .Wrap (_afd ,_deee ,"");
};if _afd =_geec .Add (_dccf );_afd !=nil {return nil ,_c .Wrap (_afd ,_deee ,"");};_cfcga =_dcbg .X ;_aafa =_dcbg .Y ;};return _geec ,nil ;};func TstImageBitmapInverseData ()[]byte {_bddcb :=_dfcbb .Copy ();_bddcb .InverseData ();return _bddcb .Data ;
};func _geedf (_egb *_f .Stack ,_ffa ,_bagcd ,_gbec ,_cdae ,_fgcd int ,_ebfa *_a .Rectangle )(_aeda error ){const _bbba ="\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 _egb ==nil {return _c .Error (_bbba ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _ebfa ==nil {return _c .Error (_bbba ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_ebfa .Min .X =_f .Min (_ebfa .Min .X ,_ffa );_ebfa .Max .X =_f .Max (_ebfa .Max .X ,_bagcd );_ebfa .Min .Y =_f .Min (_ebfa .Min .Y ,_gbec );_ebfa .Max .Y =_f .Max (_ebfa .Max .Y ,_gbec );if !(_gbec +_cdae >=0&&_gbec +_cdae <=_fgcd ){return nil ;};if _egb .Aux ==nil {return _c .Error (_bbba ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
};var _gefd *fillSegment ;_bdde ,_egge :=_egb .Aux .Pop ();if _egge {if _gefd ,_egge =_bdde .(*fillSegment );!_egge {return _c .Error (_bbba ,"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 {_gefd =&fillSegment {};};_gefd ._dgge =_ffa ;_gefd ._gfgd =_bagcd ;_gefd ._egdd =_gbec ;_gefd ._bcab =_cdae ;_egb .Push (_gefd );return nil ;};func (_gcbbc *ClassedPoints )Len ()int {return _gcbbc .IntSlice .Size ()};func TstImageBitmap ()*Bitmap {return _dfcbb .Copy ()};
var _bdfc =[5]int {1,2,3,0,4};func _ddab (_bgcf uint ,_gaegg byte )byte {return _gaegg >>_bgcf <<_bgcf };func (_adcc *Points )AddPoint (x ,y float32 ){*_adcc =append (*_adcc ,Point {x ,y })};func _ddeg (_abad *Bitmap )(_afdb *Bitmap ,_fcde int ,_fbcc error ){const _acfb ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _abad ==nil {return nil ,0,_c .Errorf (_acfb ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _fbdbc ,_cgfgg *Bitmap ;if _fbdbc ,_fbcc =_dffg (nil ,_abad );_fbcc !=nil {return nil ,0,_c .Wrap (_fbcc ,_acfb ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_gebd [13]int ;_cbbe ,_eaag int ;);_fdgdc :=12;_fdde :=_f .NewNumSlice (_fdgdc +1);_abdb :=_f .NewNumSlice (_fdgdc +1);var _gcdc *Boxes ;for _bfed :=0;_bfed <=_fdgdc ;_bfed ++{if _bfed ==0{if _cgfgg ,_fbcc =_dffg (nil ,_fbdbc );_fbcc !=nil {return nil ,0,_c .Wrap (_fbcc ,_acfb ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _cgfgg ,_fbcc =_eggb (_fbdbc ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_fbcc !=nil {return nil ,0,_c .Wrap (_fbcc ,_acfb ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _gcdc ,_fbcc =_cgfgg .connComponentsBB (4);
_fbcc !=nil {return nil ,0,_c .Wrap (_fbcc ,_acfb ,"");};_gebd [_bfed ]=len (*_gcdc );_fdde .AddInt (_gebd [_bfed ]);switch _bfed {case 0:_cbbe =_gebd [0];default:_eaag =_gebd [_bfed -1]-_gebd [_bfed ];_abdb .AddInt (_eaag );};_fbdbc =_cgfgg ;};_fccba :=true ;
_bgea :=2;var _dbeg ,_cdaf int ;for _bbfb :=1;_bbfb < len (*_abdb );_bbfb ++{if _dbeg ,_fbcc =_fdde .GetInt (_bbfb );_fbcc !=nil {return nil ,0,_c .Wrap (_fbcc ,_acfb ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _fccba &&_dbeg < int (0.3*float32 (_cbbe )){_bgea =_bbfb +1;_fccba =false ;};if _eaag ,_fbcc =_abdb .GetInt (_bbfb );_fbcc !=nil {return nil ,0,_c .Wrap (_fbcc ,_acfb ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _eaag > _cdaf {_cdaf =_eaag ;};};_geca :=_abad .XResolution ;if _geca ==0{_geca =150;};if _geca > 110{_bgea ++;};if _bgea < 2{_fc .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");
_bgea =2;};_fcde =_bgea +1;if _afdb ,_fbcc =_dgcd (nil ,_abad ,_bgea +1,1);_fbcc !=nil {return nil ,0,_c .Wrap (_fbcc ,_acfb ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _afdb ,_fcde ,nil ;
};func _eeaae (_dgda *Bitmap ,_feed ,_bfgc ,_eccf ,_fbcb int ,_agge RasterOperator ,_gbad *Bitmap ,_caaf ,_agffb int )error {var (_add bool ;_cgcg bool ;_fgef int ;_gaecg int ;_ebeb int ;_cbfef bool ;_ggdc byte ;_gfbc int ;_cfcb int ;_dadc int ;_efae ,_ffff int ;
);_efcd :=8-(_feed &7);_ffffg :=_ecef [_efcd ];_gfbfe :=_dgda .RowStride *_bfgc +(_feed >>3);_acgf :=_gbad .RowStride *_agffb +(_caaf >>3);if _eccf < _efcd {_add =true ;_ffffg &=_ccecf [8-_efcd +_eccf ];};if !_add {_fgef =(_eccf -_efcd )>>3;if _fgef > 0{_cgcg =true ;
_gaecg =_gfbfe +1;_ebeb =_acgf +1;};};_gfbc =(_feed +_eccf )&7;if !(_add ||_gfbc ==0){_cbfef =true ;_ggdc =_ccecf [_gfbc ];_cfcb =_gfbfe +1+_fgef ;_dadc =_acgf +1+_fgef ;};switch _agge {case PixSrc :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],_gbad .Data [_acgf ],_ffffg );
_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]=_gbad .Data [_ebeb +_ffff ];};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;};
};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],_gbad .Data [_dadc ],_ggdc );_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixNotSrc :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],^_gbad .Data [_acgf ],_ffffg );
_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]=^_gbad .Data [_ebeb +_ffff ];};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;
};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],^_gbad .Data [_dadc ],_ggdc );_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixSrcOrDst :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],_gbad .Data [_acgf ]|_dgda .Data [_gfbfe ],_ffffg );
_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]|=_gbad .Data [_ebeb +_ffff ];};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;
};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],_gbad .Data [_dadc ]|_dgda .Data [_cfcb ],_ggdc );_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixSrcAndDst :for _efae =0;_efae < _fbcb ;
_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],_gbad .Data [_acgf ]&_dgda .Data [_gfbfe ],_ffffg );_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]&=_gbad .Data [_ebeb +_ffff ];
};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],_gbad .Data [_dadc ]&_dgda .Data [_cfcb ],_ggdc );_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;
};};case PixSrcXorDst :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],_gbad .Data [_acgf ]^_dgda .Data [_gfbfe ],_ffffg );_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;
_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]^=_gbad .Data [_ebeb +_ffff ];};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],_gbad .Data [_dadc ]^_dgda .Data [_cfcb ],_ggdc );
_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixNotSrcOrDst :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],^(_gbad .Data [_acgf ])|_dgda .Data [_gfbfe ],_ffffg );_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;
};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]|=^(_gbad .Data [_ebeb +_ffff ]);};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],^(_gbad .Data [_dadc ])|_dgda .Data [_cfcb ],_ggdc );
_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixNotSrcAndDst :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],^(_gbad .Data [_acgf ])&_dgda .Data [_gfbfe ],_ffffg );_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;
};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]&=^_gbad .Data [_ebeb +_ffff ];};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],^(_gbad .Data [_dadc ])&_dgda .Data [_cfcb ],_ggdc );
_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixSrcOrNotDst :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],_gbad .Data [_acgf ]|^(_dgda .Data [_gfbfe ]),_ffffg );_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;
};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]=_gbad .Data [_ebeb +_ffff ]|^(_dgda .Data [_gaecg +_ffff ]);};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;};};if _cbfef {for _efae =0;
_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],_gbad .Data [_dadc ]|^(_dgda .Data [_cfcb ]),_ggdc );_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixSrcAndNotDst :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],_gbad .Data [_acgf ]&^(_dgda .Data [_gfbfe ]),_ffffg );
_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]=_gbad .Data [_ebeb +_ffff ]&^(_dgda .Data [_gaecg +_ffff ]);};_gaecg +=_dgda .RowStride ;
_ebeb +=_gbad .RowStride ;};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],_gbad .Data [_dadc ]&^(_dgda .Data [_cfcb ]),_ggdc );_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixNotPixSrcOrDst :for _efae =0;
_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],^(_gbad .Data [_acgf ]|_dgda .Data [_gfbfe ]),_ffffg );_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;
_ffff ++{_dgda .Data [_gaecg +_ffff ]=^(_gbad .Data [_ebeb +_ffff ]|_dgda .Data [_gaecg +_ffff ]);};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],^(_gbad .Data [_dadc ]|_dgda .Data [_cfcb ]),_ggdc );
_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixNotPixSrcAndDst :for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],^(_gbad .Data [_acgf ]&_dgda .Data [_gfbfe ]),_ffffg );_gfbfe +=_dgda .RowStride ;
_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]=^(_gbad .Data [_ebeb +_ffff ]&_dgda .Data [_gaecg +_ffff ]);};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;
};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],^(_gbad .Data [_dadc ]&_dgda .Data [_cfcb ]),_ggdc );_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;};};case PixNotPixSrcXorDst :for _efae =0;_efae < _fbcb ;
_efae ++{_dgda .Data [_gfbfe ]=_cafgb (_dgda .Data [_gfbfe ],^(_gbad .Data [_acgf ]^_dgda .Data [_gfbfe ]),_ffffg );_gfbfe +=_dgda .RowStride ;_acgf +=_gbad .RowStride ;};if _cgcg {for _efae =0;_efae < _fbcb ;_efae ++{for _ffff =0;_ffff < _fgef ;_ffff ++{_dgda .Data [_gaecg +_ffff ]=^(_gbad .Data [_ebeb +_ffff ]^_dgda .Data [_gaecg +_ffff ]);
};_gaecg +=_dgda .RowStride ;_ebeb +=_gbad .RowStride ;};};if _cbfef {for _efae =0;_efae < _fbcb ;_efae ++{_dgda .Data [_cfcb ]=_cafgb (_dgda .Data [_cfcb ],^(_gbad .Data [_dadc ]^_dgda .Data [_cfcb ]),_ggdc );_cfcb +=_dgda .RowStride ;_dadc +=_gbad .RowStride ;
};};default:_fc .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",_agge );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 ;};type RasterOperator int ;func (_aed *Bitmap )GetPixel (x ,y int )bool {_ddb :=_aed .GetByteIndex (x ,y );_bege :=_aed .GetBitOffset (x );_dacd :=uint (7-_bege );if _ddb > len (_aed .Data )-1{_fc .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 ,_aed );
return false ;};if (_aed .Data [_ddb ]>>_dacd )&0x01>=1{return true ;};return false ;};func _gcgeb (_dfbbe *Bitmap ,_gbac *Bitmap ,_acfg int )(_dbaf error ){const _gdeb ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
_affa :=_fafb (_dfbbe .Height ,_gbac .Height );_edde :=_fafb (_dfbbe .RowStride ,_gbac .RowStride );switch _acfg {case 4:_dbaf =_aeeb (_dfbbe ,_gbac ,_affa ,_edde );case 8:_dbaf =_bfee (_dfbbe ,_gbac ,_affa ,_edde );default:return _c .Errorf (_gdeb ,"\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",_acfg );
};if _dbaf !=nil {return _c .Wrap (_dbaf ,_gdeb ,"");};return nil ;};func (_efbe *byHeight )Less (i ,j int )bool {return _efbe .Values [i ].Height < _efbe .Values [j ].Height };func (_fbgf *Boxes )makeSizeIndicator (_dad ,_ccae int ,_dfbe LocationFilter ,_bgceg SizeComparison )*_f .NumSlice {_cfc :=&_f .NumSlice {};
var _gbdg ,_gacaa ,_fag int ;for _ ,_fcge :=range *_fbgf {_gbdg =0;_gacaa ,_fag =_fcge .Dx (),_fcge .Dy ();switch _dfbe {case LocSelectWidth :if (_bgceg ==SizeSelectIfLT &&_gacaa < _dad )||(_bgceg ==SizeSelectIfGT &&_gacaa > _dad )||(_bgceg ==SizeSelectIfLTE &&_gacaa <=_dad )||(_bgceg ==SizeSelectIfGTE &&_gacaa >=_dad ){_gbdg =1;
};case LocSelectHeight :if (_bgceg ==SizeSelectIfLT &&_fag < _ccae )||(_bgceg ==SizeSelectIfGT &&_fag > _ccae )||(_bgceg ==SizeSelectIfLTE &&_fag <=_ccae )||(_bgceg ==SizeSelectIfGTE &&_fag >=_ccae ){_gbdg =1;};case LocSelectIfEither :if (_bgceg ==SizeSelectIfLT &&(_fag < _ccae ||_gacaa < _dad ))||(_bgceg ==SizeSelectIfGT &&(_fag > _ccae ||_gacaa > _dad ))||(_bgceg ==SizeSelectIfLTE &&(_fag <=_ccae ||_gacaa <=_dad ))||(_bgceg ==SizeSelectIfGTE &&(_fag >=_ccae ||_gacaa >=_dad )){_gbdg =1;
};case LocSelectIfBoth :if (_bgceg ==SizeSelectIfLT &&(_fag < _ccae &&_gacaa < _dad ))||(_bgceg ==SizeSelectIfGT &&(_fag > _ccae &&_gacaa > _dad ))||(_bgceg ==SizeSelectIfLTE &&(_fag <=_ccae &&_gacaa <=_dad ))||(_bgceg ==SizeSelectIfGTE &&(_fag >=_ccae &&_gacaa >=_dad )){_gbdg =1;
};};_cfc .AddInt (_gbdg );};return _cfc ;};func (_gac *Bitmap )ToImage ()_a .Image {_dec ,_gada :=_db .NewImage (_gac .Width ,_gac .Height ,1,1,_gac .Data ,nil ,nil );if _gada !=nil {_fc .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",_gada );
};return _dec ;};func _cbg (_ebcd ,_eaeg *Bitmap ,_decfc *Selection )(*Bitmap ,error ){const _eabg ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _gfef error ;if _ebcd ,_gfef =_gcdcf (_ebcd ,_eaeg ,_decfc );_gfef !=nil {return nil ,_gfef ;
};_cfge ,_gfef :=_cdde (nil ,_eaeg ,_decfc );if _gfef !=nil {return nil ,_c .Wrap (_gfef ,_eabg ,"");};if _ ,_gfef =_dcea (_ebcd ,_cfge ,_decfc );_gfef !=nil {return nil ,_c .Wrap (_gfef ,_eabg ,"");};return _ebcd ,nil ;};func (_debf *Bitmap )thresholdPixelSum (_gggc int )bool {var (_ecc int ;
_egdc uint8 ;_caf byte ;_decf int ;);_cgfb :=_debf .RowStride ;_ffdg :=uint (_debf .Width &0x07);if _ffdg !=0{_egdc =uint8 ((0xff<<(8-_ffdg ))&0xff);_cgfb --;};for _bce :=0;_bce < _debf .Height ;_bce ++{for _decf =0;_decf < _cgfb ;_decf ++{_caf =_debf .Data [_bce *_debf .RowStride +_decf ];
_ecc +=int (_feg [_caf ]);};if _ffdg !=0{_caf =_debf .Data [_bce *_debf .RowStride +_decf ]&_egdc ;_ecc +=int (_feg [_caf ]);};if _ecc > _gggc {return true ;};};return false ;};func TstFrameBitmap ()*Bitmap {return _gcdeb .Copy ()};func (_cgdc *ClassedPoints )Less (i ,j int )bool {return _cgdc ._bgga (i ,j )};
func (_dge *Bitmap )equivalent (_dagf *Bitmap )bool {if _dge ==_dagf {return true ;};if !_dge .SizesEqual (_dagf ){return false ;};_gga :=_eccd (_dge ,_dagf ,CmbOpXor );_ggbb :=_dge .countPixels ();_aegf :=int (0.25*float32 (_ggbb ));if _gga .thresholdPixelSum (_aegf ){return false ;
};var (_dfaf [9][9]int ;_ecec [18][9]int ;_ggae [9][18]int ;_cgfg int ;_cbbc int ;);_ccec :=9;_dbaa :=_dge .Height /_ccec ;_cdgg :=_dge .Width /_ccec ;_fefe ,_aedg :=_dbaa /2,_cdgg /2;if _dbaa < _cdgg {_fefe =_cdgg /2;_aedg =_dbaa /2;};_agff :=float64 (_fefe )*float64 (_aedg )*_ge .Pi ;
_aag :=int (float64 (_dbaa *_cdgg /2)*0.9);_cgbc :=int (float64 (_cdgg *_dbaa /2)*0.9);for _cagg :=0;_cagg < _ccec ;_cagg ++{_cgd :=_cdgg *_cagg +_cgfg ;var _fed int ;if _cagg ==_ccec -1{_cgfg =0;_fed =_dge .Width ;}else {_fed =_cgd +_cdgg ;if ((_dge .Width -_cgfg )%_ccec )> 0{_cgfg ++;
_fed ++;};};for _aae :=0;_aae < _ccec ;_aae ++{_adea :=_dbaa *_aae +_cbbc ;var _aadc int ;if _aae ==_ccec -1{_cbbc =0;_aadc =_dge .Height ;}else {_aadc =_adea +_dbaa ;if (_dge .Height -_cbbc )%_ccec > 0{_cbbc ++;_aadc ++;};};var _cdff ,_ege ,_efgf ,_fdge int ;
_cec :=(_cgd +_fed )/2;_dbbe :=(_adea +_aadc )/2;for _fde :=_cgd ;_fde < _fed ;_fde ++{for _gfeb :=_adea ;_gfeb < _aadc ;_gfeb ++{if _gga .GetPixel (_fde ,_gfeb ){if _fde < _cec {_cdff ++;}else {_ege ++;};if _gfeb < _dbbe {_fdge ++;}else {_efgf ++;};};
};};_dfaf [_cagg ][_aae ]=_cdff +_ege ;_ecec [_cagg *2][_aae ]=_cdff ;_ecec [_cagg *2+1][_aae ]=_ege ;_ggae [_cagg ][_aae *2]=_fdge ;_ggae [_cagg ][_aae *2+1]=_efgf ;};};for _ffg :=0;_ffg < _ccec *2-1;_ffg ++{for _ddba :=0;_ddba < (_ccec -1);_ddba ++{var _gaca int ;
for _bagd :=0;_bagd < 2;_bagd ++{for _agbc :=0;_agbc < 2;_agbc ++{_gaca +=_ecec [_ffg +_bagd ][_ddba +_agbc ];};};if _gaca > _cgbc {return false ;};};};for _caad :=0;_caad < (_ccec -1);_caad ++{for _cbd :=0;_cbd < ((_ccec *2)-1);_cbd ++{var _gcdb int ;
for _aba :=0;_aba < 2;_aba ++{for _acf :=0;_acf < 2;_acf ++{_gcdb +=_ggae [_caad +_aba ][_cbd +_acf ];};};if _gcdb > _aag {return false ;};};};for _eeea :=0;_eeea < (_ccec -2);_eeea ++{for _fgff :=0;_fgff < (_ccec -2);_fgff ++{var _dcbd ,_ffd int ;for _ccag :=0;
_ccag < 3;_ccag ++{for _ccgf :=0;_ccgf < 3;_ccgf ++{if _ccag ==_ccgf {_dcbd +=_dfaf [_eeea +_ccag ][_fgff +_ccgf ];};if (2-_ccag )==_ccgf {_ffd +=_dfaf [_eeea +_ccag ][_fgff +_ccgf ];};};};if _dcbd > _cgbc ||_ffd > _cgbc {return false ;};};};for _ggag :=0;
_ggag < (_ccec -1);_ggag ++{for _bcc :=0;_bcc < (_ccec -1);_bcc ++{var _gfag int ;for _acegc :=0;_acegc < 2;_acegc ++{for _fgc :=0;_fgc < 2;_fgc ++{_gfag +=_dfaf [_ggag +_acegc ][_bcc +_fgc ];};};if float64 (_gfag )> _agff {return false ;};};};return true ;
};func _gbaa (_gff ,_aeeea *Bitmap ,_dcge *Selection )(*Bitmap ,error ){const _agba ="\u006f\u0070\u0065\u006e";var _cbea error ;_gff ,_cbea =_gcdcf (_gff ,_aeeea ,_dcge );if _cbea !=nil {return nil ,_c .Wrap (_cbea ,_agba ,"");};_ecaa ,_cbea :=_dcea (nil ,_aeeea ,_dcge );
if _cbea !=nil {return nil ,_c .Wrap (_cbea ,_agba ,"");};_ ,_cbea =_cdde (_gff ,_ecaa ,_dcge );if _cbea !=nil {return nil ,_c .Wrap (_cbea ,_agba ,"");};return _gff ,nil ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_bbca :=_cead (h ,w ,"");
_bbca .setOrigin (cy ,cx );var _dgaf ,_acaa int ;for _dgaf =0;_dgaf < h ;_dgaf ++{for _acaa =0;_acaa < w ;_acaa ++{_bbca .Data [_dgaf ][_acaa ]=tp ;};};return _bbca ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;
LocSelectIfEither ;LocSelectIfBoth ;);func _efce (_fedb *Bitmap ,_bbab ,_fbeg int ,_cfbfa ,_cccb int ,_eede RasterOperator ,_gggcg *Bitmap ,_dfbb ,_ggd int )error {var _cdebf ,_ccga ,_fdebc ,_febge int ;if _bbab < 0{_dfbb -=_bbab ;_cfbfa +=_bbab ;_bbab =0;
};if _dfbb < 0{_bbab -=_dfbb ;_cfbfa +=_dfbb ;_dfbb =0;};_cdebf =_bbab +_cfbfa -_fedb .Width ;if _cdebf > 0{_cfbfa -=_cdebf ;};_ccga =_dfbb +_cfbfa -_gggcg .Width ;if _ccga > 0{_cfbfa -=_ccga ;};if _fbeg < 0{_ggd -=_fbeg ;_cccb +=_fbeg ;_fbeg =0;};if _ggd < 0{_fbeg -=_ggd ;
_cccb +=_ggd ;_ggd =0;};_fdebc =_fbeg +_cccb -_fedb .Height ;if _fdebc > 0{_cccb -=_fdebc ;};_febge =_ggd +_cccb -_gggcg .Height ;if _febge > 0{_cccb -=_febge ;};if _cfbfa <=0||_cccb <=0{return nil ;};var _cgec error ;switch {case _bbab &7==0&&_dfbb &7==0:_cgec =_gfgbb (_fedb ,_bbab ,_fbeg ,_cfbfa ,_cccb ,_eede ,_gggcg ,_dfbb ,_ggd );
case _bbab &7==_dfbb &7:_cgec =_eeaae (_fedb ,_bbab ,_fbeg ,_cfbfa ,_cccb ,_eede ,_gggcg ,_dfbb ,_ggd );default:_cgec =_cefa (_fedb ,_bbab ,_fbeg ,_cfbfa ,_cccb ,_eede ,_gggcg ,_dfbb ,_ggd );};if _cgec !=nil {return _c .Wrap (_cgec ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");
};return nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _dffg (d ,s )};func TstWriteSymbols (t *_d .T ,bms *Bitmaps ,src *Bitmap ){for _gcgbb :=0;_gcgbb < bms .Size ();_gcgbb ++{_gbfc :=bms .Values [_gcgbb ];_fgfe :=bms .Boxes [_gcgbb ];_egfb :=src .RasterOperation (_fgfe .Min .X ,_fgfe .Min .Y ,_gbfc .Width ,_gbfc .Height ,PixSrc ,_gbfc ,0,0);
_gb .NoError (t ,_egfb );};};func (_addf *byHeight )Swap (i ,j int ){_addf .Values [i ],_addf .Values [j ]=_addf .Values [j ],_addf .Values [i ];if _addf .Boxes !=nil {_addf .Boxes [i ],_addf .Boxes [j ]=_addf .Boxes [j ],_addf .Boxes [i ];};};func (_ceebf *Bitmap )addBorderGeneral (_dbde ,_egce ,_afaf ,_cfe int ,_ced int )(*Bitmap ,error ){const _acg ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _dbde < 0||_egce < 0||_afaf < 0||_cfe < 0{return nil ,_c .Error (_acg ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_agde ,_dde :=_ceebf .Width ,_ceebf .Height ;_ffc :=_agde +_dbde +_egce ;
_cegc :=_dde +_afaf +_cfe ;_gdac :=New (_ffc ,_cegc );_gdac .Color =_ceebf .Color ;_gfd :=PixClr ;if _ced > 0{_gfd =PixSet ;};_becg :=_gdac .RasterOperation (0,0,_dbde ,_cegc ,_gfd ,nil ,0,0);if _becg !=nil {return nil ,_c .Wrap (_becg ,_acg ,"\u006c\u0065\u0066\u0074");
};_becg =_gdac .RasterOperation (_ffc -_egce ,0,_egce ,_cegc ,_gfd ,nil ,0,0);if _becg !=nil {return nil ,_c .Wrap (_becg ,_acg ,"\u0072\u0069\u0067h\u0074");};_becg =_gdac .RasterOperation (0,0,_ffc ,_afaf ,_gfd ,nil ,0,0);if _becg !=nil {return nil ,_c .Wrap (_becg ,_acg ,"\u0074\u006f\u0070");
};_becg =_gdac .RasterOperation (0,_cegc -_cfe ,_ffc ,_cfe ,_gfd ,nil ,0,0);if _becg !=nil {return nil ,_c .Wrap (_becg ,_acg ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_becg =_gdac .RasterOperation (_dbde ,_afaf ,_agde ,_dde ,PixSrc ,_ceebf ,0,0);if _becg !=nil {return nil ,_c .Wrap (_becg ,_acg ,"\u0063\u006f\u0070\u0079");
};return _gdac ,nil ;};func _ddda (_bdg ,_dcd *Bitmap ,_eeac int ,_ea []byte ,_aadb int )(_ceb error ){const _cdeb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_fadc ,_eac ,_age ,_ddg ,_ff ,_gdg ,_bbg ,_fgb int ;
_fdg ,_egd uint32 ;_edd ,_edc byte ;_ggg uint16 ;);_bgce :=make ([]byte ,4);_edg :=make ([]byte ,4);for _age =0;_age < _bdg .Height -1;_age ,_ddg =_age +2,_ddg +1{_fadc =_age *_bdg .RowStride ;_eac =_ddg *_dcd .RowStride ;for _ff ,_gdg =0,0;_ff < _aadb ;
_ff ,_gdg =_ff +4,_gdg +1{for _bbg =0;_bbg < 4;_bbg ++{_fgb =_fadc +_ff +_bbg ;if _fgb <=len (_bdg .Data )-1&&_fgb < _fadc +_bdg .RowStride {_bgce [_bbg ]=_bdg .Data [_fgb ];}else {_bgce [_bbg ]=0x00;};_fgb =_fadc +_bdg .RowStride +_ff +_bbg ;if _fgb <=len (_bdg .Data )-1&&_fgb < _fadc +(2*_bdg .RowStride ){_edg [_bbg ]=_bdg .Data [_fgb ];
}else {_edg [_bbg ]=0x00;};};_fdg =_gbb .BigEndian .Uint32 (_bgce );_egd =_gbb .BigEndian .Uint32 (_edg );_egd &=_fdg ;_egd &=_egd <<1;_egd &=0xaaaaaaaa;_fdg =_egd |(_egd <<7);_edd =byte (_fdg >>24);_edc =byte ((_fdg >>8)&0xff);_fgb =_eac +_gdg ;if _fgb +1==len (_dcd .Data )-1||_fgb +1>=_eac +_dcd .RowStride {_dcd .Data [_fgb ]=_ea [_edd ];
if _ceb =_dcd .SetByte (_fgb ,_ea [_edd ]);_ceb !=nil {return _c .Wrapf (_ceb ,_cdeb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fgb );};}else {_ggg =(uint16 (_ea [_edd ])<<8)|uint16 (_ea [_edc ]);if _ceb =_dcd .setTwoBytes (_fgb ,_ggg );_ceb !=nil {return _c .Wrapf (_ceb ,_cdeb ,"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",_fgb );
};_gdg ++;};};};return nil ;};func (_agfg *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _cegdb ="\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 >=_agfg .IntSlice .Size (){return 0,_c .Errorf (_cegdb ,"\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 (_agfg .XAtIndex (i )),nil ;};var MorphBC BoundaryCondition ;func (_aadd *Boxes )Get (i int )(*_a .Rectangle ,error ){const _dddb ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _aadd ==nil {return nil ,_c .Error (_dddb ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if i > len (*_aadd )-1{return nil ,_c .Errorf (_dddb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_aadd )[i ],nil ;};func (_dgceg *byWidth )Less (i ,j int )bool {return _dgceg .Values [i ].Width < _dgceg .Values [j ].Width };
func TstDSymbol (t *_d .T ,scale ...int )*Bitmap {_aegb ,_dcbbb :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_gb .NoError (t ,_dcbbb );return TstGetScaledSymbol (t ,_aegb ,scale ...);};func _bed (_fccc ,_egcd *Bitmap ,_ddd int ,_edeg []byte ,_ebf int )(_gfgb error ){const _eeb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
var (_cbf ,_gcf ,_aga ,_bdb ,_gaeg ,_fcgb ,_bfc ,_ddf int ;_cdeg ,_fgg ,_fad ,_cgb uint32 ;_ab ,_ged byte ;_eeaa uint16 ;);_dcc :=make ([]byte ,4);_efaa :=make ([]byte ,4);for _aga =0;_aga < _fccc .Height -1;_aga ,_bdb =_aga +2,_bdb +1{_cbf =_aga *_fccc .RowStride ;
_gcf =_bdb *_egcd .RowStride ;for _gaeg ,_fcgb =0,0;_gaeg < _ebf ;_gaeg ,_fcgb =_gaeg +4,_fcgb +1{for _bfc =0;_bfc < 4;_bfc ++{_ddf =_cbf +_gaeg +_bfc ;if _ddf <=len (_fccc .Data )-1&&_ddf < _cbf +_fccc .RowStride {_dcc [_bfc ]=_fccc .Data [_ddf ];}else {_dcc [_bfc ]=0x00;
};_ddf =_cbf +_fccc .RowStride +_gaeg +_bfc ;if _ddf <=len (_fccc .Data )-1&&_ddf < _cbf +(2*_fccc .RowStride ){_efaa [_bfc ]=_fccc .Data [_ddf ];}else {_efaa [_bfc ]=0x00;};};_cdeg =_gbb .BigEndian .Uint32 (_dcc );_fgg =_gbb .BigEndian .Uint32 (_efaa );
_fad =_cdeg &_fgg ;_fad |=_fad <<1;_cgb =_cdeg |_fgg ;_cgb &=_cgb <<1;_fgg =_fad &_cgb ;_fgg &=0xaaaaaaaa;_cdeg =_fgg |(_fgg <<7);_ab =byte (_cdeg >>24);_ged =byte ((_cdeg >>8)&0xff);_ddf =_gcf +_fcgb ;if _ddf +1==len (_egcd .Data )-1||_ddf +1>=_gcf +_egcd .RowStride {if _gfgb =_egcd .SetByte (_ddf ,_edeg [_ab ]);
_gfgb !=nil {return _c .Wrapf (_gfgb ,_eeb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_ddf );};}else {_eeaa =(uint16 (_edeg [_ab ])<<8)|uint16 (_edeg [_ged ]);if _gfgb =_egcd .setTwoBytes (_ddf ,_eeaa );_gfgb !=nil {return _c .Wrapf (_gfgb ,_eeb ,"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",_ddf );
};_fcgb ++;};};};return nil ;};func _beca (_baa ,_ecfg ,_cebge *Bitmap )(*Bitmap ,error ){const _dfea ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _ecfg ==nil {return nil ,_c .Error (_dfea ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _cebge ==nil {return nil ,_c .Error (_dfea ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _dgga error ;switch {case _baa ==_ecfg :if _dgga =_baa .RasterOperation (0,0,_ecfg .Width ,_ecfg .Height ,PixNotSrcAndDst ,_cebge ,0,0);
_dgga !=nil {return nil ,_c .Wrap (_dgga ,_dfea ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _baa ==_cebge :if _dgga =_baa .RasterOperation (0,0,_ecfg .Width ,_ecfg .Height ,PixNotSrcAndDst ,_ecfg ,0,0);_dgga !=nil {return nil ,_c .Wrap (_dgga ,_dfea ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
};default:_baa ,_dgga =_dffg (_baa ,_ecfg );if _dgga !=nil {return nil ,_c .Wrap (_dgga ,_dfea ,"");};if _dgga =_baa .RasterOperation (0,0,_ecfg .Width ,_ecfg .Height ,PixNotSrcAndDst ,_cebge ,0,0);_dgga !=nil {return nil ,_c .Wrap (_dgga ,_dfea ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
};};return _baa ,nil ;};func TstTSymbol (t *_d .T ,scale ...int )*Bitmap {_dcda ,_bffd :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_gb .NoError (t ,_bffd );return TstGetScaledSymbol (t ,_dcda ,scale ...);};type Points []Point ;func (_eccc *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_gcbc *Boxes ,_geba error ){const _ccee ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
if _eccc ==nil {return nil ,_c .Error (_ccee ,"\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 (_ccee ,"\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 _gcbc ,_geba =_eccc .connComponentsBB (connectivity );_geba !=nil {return nil ,_c .Wrap (_geba ,_ccee ,"");};}else {if _gcbc ,_geba =_eccc .connComponentsBitmapsBB (bms ,connectivity );_geba !=nil {return nil ,_c .Wrap (_geba ,_ccee ,"");
};};return _gcbc ,nil ;};func _fcbe (_fgcc ,_fafbd ,_agbe *Bitmap ,_gfee int )(*Bitmap ,error ){const _afff ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _fafbd ==nil {return nil ,_c .Error (_afff ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _agbe ==nil {return nil ,_c .Error (_afff ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gfee !=4&&_gfee !=8{return nil ,_c .Error (_afff ,"\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 _fgbb error ;_fgcc ,_fgbb =_dffg (_fgcc ,_fafbd );if _fgbb !=nil {return nil ,_c .Wrap (_fgbb ,_afff ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_acgb :=_fafbd .createTemplate ();_agbe .setPadBits (0);
for _begc :=0;_begc < _dddac ;_begc ++{_acgb ,_fgbb =_dffg (_acgb ,_fgcc );if _fgbb !=nil {return nil ,_c .Wrapf (_fgbb ,_afff ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_begc );};if _fgbb =_gcgeb (_fgcc ,_agbe ,_gfee );
_fgbb !=nil {return nil ,_c .Wrapf (_fgbb ,_afff ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_begc );};if _acgb .Equals (_fgcc ){break ;};};return _fgcc ,nil ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;
CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_gfc *Bitmap )And (s *Bitmap )(_gfab *Bitmap ,_ade error ){const _dfbf ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _gfc ==nil {return nil ,_c .Error (_dfbf ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
};if s ==nil {return nil ,_c .Error (_dfbf ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_gfc .SizesEqual (s ){_fc .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",_dfbf );
};if _gfab ,_ade =_dffg (_gfab ,_gfc );_ade !=nil {return nil ,_c .Wrap (_ade ,_dfbf ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ade =_gfab .RasterOperation (0,0,_gfab .Width ,_gfab .Height ,PixSrcAndDst ,s ,0,0);
_ade !=nil {return nil ,_c .Wrap (_ade ,_dfbf ,"");};return _gfab ,nil ;};func _egcga (_eaff ,_gce *Bitmap ,_cadc ,_ecbc int )(*Bitmap ,error ){const _eedf ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _gce ==nil {_fc .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 (_eedf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _cadc < 1||_ecbc < 1{return nil ,_c .Error (_eedf ,"\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 _cadc ==1&&_ecbc ==1{_gaac ,_cgcb :=_dffg (_eaff ,_gce );if _cgcb !=nil {return nil ,_c .Wrap (_cgcb ,_eedf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gaac ,nil ;};if _cadc ==1||_ecbc ==1{_cbcg :=SelCreateBrick (_ecbc ,_cadc ,_ecbc /2,_cadc /2,SelHit );_defg ,_aafe :=_cdde (_eaff ,_gce ,_cbcg );if _aafe !=nil {return nil ,_c .Wrap (_aafe ,_eedf ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _defg ,nil ;};_gfaa :=SelCreateBrick (1,_cadc ,0,_cadc /2,SelHit );_bdfcf :=SelCreateBrick (_ecbc ,1,_ecbc /2,0,SelHit );_bggd ,_aedd :=_cdde (nil ,_gce ,_gfaa );if _aedd !=nil {return nil ,_c .Wrap (_aedd ,_eedf ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_eaff ,_aedd =_cdde (_eaff ,_bggd ,_bdfcf );if _aedd !=nil {return nil ,_c .Wrap (_aedd ,_eedf ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _eaff ,nil ;};func (_bebd *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _acef ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
if len (_bebd .Values )==0{return nil ,_c .Error (_acef ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_agfd :=&BitmapsArray {};_bebd .SortByWidth ();_fbgfb :=-1;_eeffd :=-1;for _aeeef :=0;_aeeef < len (_bebd .Values );
_aeeef ++{_feca :=_bebd .Values [_aeeef ].Width ;if _feca > _fbgfb {_fbgfb =_feca ;_eeffd ++;_agfd .Values =append (_agfd .Values ,&Bitmaps {});};_agfd .Values [_eeffd ].AddBitmap (_bebd .Values [_aeeef ]);};return _agfd ,nil ;};func _cfgb (_agfe ,_gbae ,_bad *Bitmap )(*Bitmap ,error ){const _geag ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";
if _gbae ==nil {return nil ,_c .Error (_geag ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bad ==nil {return nil ,_c .Error (_geag ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _agfe ==_bad {return nil ,_c .Error (_geag ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");
};if !_gbae .SizesEqual (_bad ){_fc .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",_geag );
};var _feda error ;if _agfe ,_feda =_dffg (_agfe ,_gbae );_feda !=nil {return nil ,_c .Wrap (_feda ,_geag ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _feda =_agfe .RasterOperation (0,0,_agfe .Width ,_agfe .Height ,PixSrcXorDst ,_bad ,0,0);
_feda !=nil {return nil ,_c .Wrap (_feda ,_geag ,"");};return _agfe ,nil ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _cdde (d ,s ,sel )};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _fbdb (oldByte ,newByte ,op );
};func TstWSymbol (t *_d .T ,scale ...int )*Bitmap {_efede ,_dcfgd :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_gb .NoError (t ,_dcfgd );return TstGetScaledSymbol (t ,_efede ,scale ...);};func _fge (_fef *Bitmap ,_ece ...int )(_beb *Bitmap ,_cg error ){const _dce ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _fef ==nil {return nil ,_c .Error (_dce ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_ece )==0||len (_ece )> 4{return nil ,_c .Error (_dce ,"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 _ece [0]<=0{_fc .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");_beb ,_cg =_dffg (nil ,_fef );if _cg !=nil {return nil ,_c .Wrap (_cg ,_dce ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _beb ,nil ;};_fcb :=_cgc ();_beb =_fef ;for _cbb ,_eec :=range _ece {if _eec <=0{break ;};_beb ,_cg =_ded (_beb ,_eec ,_fcb );if _cg !=nil {return nil ,_c .Wrapf (_cg ,_dce ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_cbb );
};};return _beb ,nil ;};func (_dagd *Bitmap )setPadBits (_gdfd int ){_efddc :=8-_dagd .Width %8;if _efddc ==8{return ;};_cad :=_dagd .Width /8;_cbag :=_ecef [_efddc ];if _gdfd ==0{_cbag ^=_cbag ;};var _gcfb int ;for _dfed :=0;_dfed < _dagd .Height ;_dfed ++{_gcfb =_dfed *_dagd .RowStride +_cad ;
if _gdfd ==0{_dagd .Data [_gcfb ]&=_cbag ;}else {_dagd .Data [_gcfb ]|=_cbag ;};};};func (_fdbc *byWidth )Swap (i ,j int ){_fdbc .Values [i ],_fdbc .Values [j ]=_fdbc .Values [j ],_fdbc .Values [i ];if _fdbc .Boxes !=nil {_fdbc .Boxes [i ],_fdbc .Boxes [j ]=_fdbc .Boxes [j ],_fdbc .Boxes [i ];
};};type Boxes []*_a .Rectangle ;func (_abe *ClassedPoints )ySortFunction ()func (_bggf int ,_gafb int )bool {return func (_gcae ,_cbfgb int )bool {return _abe .YAtIndex (_gcae )< _abe .YAtIndex (_cbfgb )};};func (_cgff *Bitmap )SetByte (index int ,v byte )error {if index > len (_cgff .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 );
};_cgff .Data [index ]=v ;return nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _cgfgc ,_edfb int ;_cfbc :=src .RowStride -1;if x < 0{_edfb =-x ;x =0;}else if x +src .Width > dst .Width {_cfbc -=src .Width +x -dst .Width ;
};if y < 0{_cgfgc =-y ;y =0;_edfb +=src .RowStride ;_cfbc +=src .RowStride ;}else if y +src .Height > dst .Height {_cgfgc =src .Height +y -dst .Height ;};var (_fabc int ;_ead error ;);_caed :=x &0x07;_afef :=8-_caed ;_bga :=src .Width &0x07;_eada :=_afef -_bga ;
_fbf :=_afef &0x07!=0;_cffe :=src .Width <=((_cfbc -_edfb )<<3)+_afef ;_badf :=dst .GetByteIndex (x ,y );_affe :=_cgfgc +dst .Height ;if src .Height > _affe {_fabc =_affe ;}else {_fabc =src .Height ;};switch {case !_fbf :_ead =_cede (src ,dst ,_cgfgc ,_fabc ,_badf ,_edfb ,_cfbc ,op );
case _cffe :_ead =_cab (src ,dst ,_cgfgc ,_fabc ,_badf ,_edfb ,_cfbc ,_eada ,_caed ,_afef ,op );default:_ead =_bbf (src ,dst ,_cgfgc ,_fabc ,_badf ,_edfb ,_cfbc ,_eada ,_caed ,_afef ,op ,_bga );};return _ead ;};type CombinationOperator int ;func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};
var _ _b .Interface =&ClassedPoints {};func _dcde ()[]int {_cafa :=make ([]int ,256);_cafa [0]=0;_cafa [1]=7;var _dabd int ;for _dabd =2;_dabd < 4;_dabd ++{_cafa [_dabd ]=_cafa [_dabd -2]+6;};for _dabd =4;_dabd < 8;_dabd ++{_cafa [_dabd ]=_cafa [_dabd -4]+5;
};for _dabd =8;_dabd < 16;_dabd ++{_cafa [_dabd ]=_cafa [_dabd -8]+4;};for _dabd =16;_dabd < 32;_dabd ++{_cafa [_dabd ]=_cafa [_dabd -16]+3;};for _dabd =32;_dabd < 64;_dabd ++{_cafa [_dabd ]=_cafa [_dabd -32]+2;};for _dabd =64;_dabd < 128;_dabd ++{_cafa [_dabd ]=_cafa [_dabd -64]+1;
};for _dabd =128;_dabd < 256;_dabd ++{_cafa [_dabd ]=_cafa [_dabd -128];};return _cafa ;};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);var (_gcdeb *Bitmap ;_dfcbb *Bitmap ;);func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _eggb (src ,sequence ...);
};func (_gaab *Bitmap )setBit (_ebga int ){_gaab .Data [(_ebga >>3)]|=0x80>>uint (_ebga &7)};func init (){const _fffd ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_gcdeb =New (50,40);
var _ecbag error ;_gcdeb ,_ecbag =_gcdeb .AddBorder (2,1);if _ecbag !=nil {panic (_c .Wrap (_ecbag ,_fffd ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_dfcbb ,_ecbag =NewWithData (50,22,_gecbb );if _ecbag !=nil {panic (_c .Wrap (_ecbag ,_fffd ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};};func (_bdff *Bitmap )setAll ()error {_bagf :=_gedb (_bdff ,0,0,_bdff .Width ,_bdff .Height ,PixSet ,nil ,0,0);if _bagf !=nil {return _c .Wrap (_bagf ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func TstRSymbol (t *_d .T ,scale ...int )*Bitmap {_fbdfb ,_gbcf :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});
_gb .NoError (t ,_gbcf );return TstGetScaledSymbol (t ,_fbdfb ,scale ...);};func _fbdb (_dafd ,_eacb byte ,_gegc CombinationOperator )byte {switch _gegc {case CmbOpOr :return _eacb |_dafd ;case CmbOpAnd :return _eacb &_dafd ;case CmbOpXor :return _eacb ^_dafd ;
case CmbOpXNor :return ^(_eacb ^_dafd );case CmbOpNot :return ^(_eacb );default:return _eacb ;};};func TstImageBitmapData ()[]byte {return _dfcbb .Data };func (_fggab *Bitmap )connComponentsBitmapsBB (_acd *Bitmaps ,_gaag int )(_edgae *Boxes ,_bae error ){const _acbf ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
if _gaag !=4&&_gaag !=8{return nil ,_c .Error (_acbf ,"\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 _acd ==nil {return nil ,_c .Error (_acbf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if len (_acd .Values )> 0{return nil ,_c .Error (_acbf ,"\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 _fggab .Zero (){return &Boxes {},nil ;};
var (_dabe ,_aefg ,_acae ,_dedd *Bitmap ;);_fggab .setPadBits (0);if _dabe ,_bae =_dffg (nil ,_fggab );_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"\u0062\u006d\u0031");};if _aefg ,_bae =_dffg (nil ,_fggab );_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"\u0062\u006d\u0032");
};_ggbgd :=&_f .Stack {};_ggbgd .Aux =&_f .Stack {};_edgae =&Boxes {};var (_gadae ,_gcbb int ;_dece _a .Point ;_aabb bool ;_dccfd *_a .Rectangle ;);for {if _dece ,_aabb ,_bae =_dabe .nextOnPixel (_gadae ,_gcbb );_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"");
};if !_aabb {break ;};if _dccfd ,_bae =_ecbae (_dabe ,_ggbgd ,_dece .X ,_dece .Y ,_gaag );_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"");};if _bae =_edgae .Add (_dccfd );_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"");};if _acae ,_bae =_dabe .clipRectangle (_dccfd ,nil );
_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"\u0062\u006d\u0033");};if _dedd ,_bae =_aefg .clipRectangle (_dccfd ,nil );_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"\u0062\u006d\u0034");};if _ ,_bae =_cfgb (_acae ,_acae ,_dedd );_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
};if _bae =_aefg .RasterOperation (_dccfd .Min .X ,_dccfd .Min .Y ,_dccfd .Dx (),_dccfd .Dy (),PixSrcXorDst ,_acae ,0,0);_bae !=nil {return nil ,_c .Wrap (_bae ,_acbf ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};
_acd .AddBitmap (_acae );_gadae =_dece .X ;_gcbb =_dece .Y ;};_acd .Boxes =*_edgae ;return _edgae ,nil ;};func (_ceaa *Selection )findMaxTranslations ()(_aefc ,_ggeb ,_dgcac ,_dcfg int ){for _fcadg :=0;_fcadg < _ceaa .Height ;_fcadg ++{for _cgaa :=0;_cgaa < _ceaa .Width ;
_cgaa ++{if _ceaa .Data [_fcadg ][_cgaa ]==SelHit {_aefc =_adeb (_aefc ,_ceaa .Cx -_cgaa );_ggeb =_adeb (_ggeb ,_ceaa .Cy -_fcadg );_dgcac =_adeb (_dgcac ,_cgaa -_ceaa .Cx );_dcfg =_adeb (_dcfg ,_fcadg -_ceaa .Cy );};};};return _aefc ,_ggeb ,_dgcac ,_dcfg ;
};func (_affb *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_ddabb *Bitmaps ,_egcgc *Boxes ,_aecad error ){const _fcccc ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _affb ==nil {return nil ,nil ,_c .Error (_fcccc ,"\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 (_fcccc ,"\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 _affb .Zero (){_egcgc =&Boxes {};_ddabb =&Bitmaps {};return _ddabb ,_egcgc ,nil ;};switch components {case ComponentConn :_ddabb =&Bitmaps {};if _egcgc ,_aecad =_affb .ConnComponents (_ddabb ,8);_aecad !=nil {return nil ,nil ,_c .Wrap (_aecad ,_fcccc ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_adge ,_bcdfg :=MorphSequence (_affb ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _bcdfg !=nil {return nil ,nil ,_c .Wrap (_bcdfg ,_fcccc ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _fc .Log .IsLogLevel (_fc .LogLevelTrace ){_fc .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",_adge .String ());
};_cegd :=&Bitmaps {};_egcgc ,_bcdfg =_adge .ConnComponents (_cegd ,8);if _bcdfg !=nil {return nil ,nil ,_c .Wrap (_bcdfg ,_fcccc ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _fc .Log .IsLogLevel (_fc .LogLevelTrace ){_fc .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",_cegd .String ());
};if _ddabb ,_bcdfg =_cegd .ClipToBitmap (_affb );_bcdfg !=nil {return nil ,nil ,_c .Wrap (_bcdfg ,_fcccc ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_ecbf :=1;
var _degb *Bitmap ;switch {case _affb .XResolution <=200:_degb =_affb ;case _affb .XResolution <=400:_ecbf =2;_degb ,_aecad =_fge (_affb ,1,0,0,0);if _aecad !=nil {return nil ,nil ,_c .Wrap (_aecad ,_fcccc ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_ecbf =4;_degb ,_aecad =_fge (_affb ,1,1,0,0);if _aecad !=nil {return nil ,nil ,_c .Wrap (_aecad ,_fcccc ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_eecg ,_ ,_cgbg :=_ddeg (_degb );if _cgbg !=nil {return nil ,nil ,_c .Wrap (_cgbg ,_fcccc ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_bde ,_cgbg :=_edb (_eecg ,_ecbf );if _cgbg !=nil {return nil ,nil ,_c .Wrap (_cgbg ,_fcccc ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_fdgf :=&Bitmaps {};if _egcgc ,_cgbg =_bde .ConnComponents (_fdgf ,4);_cgbg !=nil {return nil ,nil ,_c .Wrap (_cgbg ,_fcccc ,"\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 _ddabb ,_cgbg =_fdgf .ClipToBitmap (_affb );_cgbg !=nil {return nil ,nil ,_c .Wrap (_cgbg ,_fcccc ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_ddabb ,_aecad =_ddabb .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _aecad !=nil {return nil ,nil ,_c .Wrap (_aecad ,_fcccc ,"");};_egcgc ,_aecad =_egcgc .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _aecad !=nil {return nil ,nil ,_c .Wrap (_aecad ,_fcccc ,"");};return _ddabb ,_egcgc ,nil ;
};func TstASymbol (t *_d .T )*Bitmap {t .Helper ();_ddef :=New (6,6);_gb .NoError (t ,_ddef .SetPixel (1,0,1));_gb .NoError (t ,_ddef .SetPixel (2,0,1));_gb .NoError (t ,_ddef .SetPixel (3,0,1));_gb .NoError (t ,_ddef .SetPixel (4,0,1));_gb .NoError (t ,_ddef .SetPixel (5,1,1));
_gb .NoError (t ,_ddef .SetPixel (1,2,1));_gb .NoError (t ,_ddef .SetPixel (2,2,1));_gb .NoError (t ,_ddef .SetPixel (3,2,1));_gb .NoError (t ,_ddef .SetPixel (4,2,1));_gb .NoError (t ,_ddef .SetPixel (5,2,1));_gb .NoError (t ,_ddef .SetPixel (0,3,1));
_gb .NoError (t ,_ddef .SetPixel (5,3,1));_gb .NoError (t ,_ddef .SetPixel (0,4,1));_gb .NoError (t ,_ddef .SetPixel (5,4,1));_gb .NoError (t ,_ddef .SetPixel (1,5,1));_gb .NoError (t ,_ddef .SetPixel (2,5,1));_gb .NoError (t ,_ddef .SetPixel (3,5,1));
_gb .NoError (t ,_ddef .SetPixel (4,5,1));_gb .NoError (t ,_ddef .SetPixel (5,5,1));return _ddef ;};func (_efe *Bitmap )GetChocolateData ()[]byte {if _efe .Color ==Vanilla {_efe .inverseData ();};return _efe .Data ;};func (_efdd *Bitmap )resizeImageData (_fbea *Bitmap )error {if _fbea ==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 _efdd .SizesEqual (_fbea ){return nil ;};_efdd .Data =make ([]byte ,len (_fbea .Data ));_efdd .Width =_fbea .Width ;_efdd .Height =_fbea .Height ;_efdd .RowStride =_fbea .RowStride ;return nil ;};func TstPSymbol (t *_d .T )*Bitmap {t .Helper ();_gcca :=New (5,8);
_gb .NoError (t ,_gcca .SetPixel (0,0,1));_gb .NoError (t ,_gcca .SetPixel (1,0,1));_gb .NoError (t ,_gcca .SetPixel (2,0,1));_gb .NoError (t ,_gcca .SetPixel (3,0,1));_gb .NoError (t ,_gcca .SetPixel (4,1,1));_gb .NoError (t ,_gcca .SetPixel (0,1,1));
_gb .NoError (t ,_gcca .SetPixel (4,2,1));_gb .NoError (t ,_gcca .SetPixel (0,2,1));_gb .NoError (t ,_gcca .SetPixel (4,3,1));_gb .NoError (t ,_gcca .SetPixel (0,3,1));_gb .NoError (t ,_gcca .SetPixel (0,4,1));_gb .NoError (t ,_gcca .SetPixel (1,4,1));
_gb .NoError (t ,_gcca .SetPixel (2,4,1));_gb .NoError (t ,_gcca .SetPixel (3,4,1));_gb .NoError (t ,_gcca .SetPixel (0,5,1));_gb .NoError (t ,_gcca .SetPixel (0,6,1));_gb .NoError (t ,_gcca .SetPixel (0,7,1));return _gcca ;};func _eaac (_cgdf *Bitmap ,_gcag *Bitmap ,_cbeb *Selection ,_bbbg **Bitmap )(*Bitmap ,error ){const _dcef ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
if _gcag ==nil {return nil ,_c .Error (_dcef ,"\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 _cbeb ==nil {return nil ,_c .Error (_dcef ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
};_defbe ,_eaee :=_cbeb .Height ,_cbeb .Width ;if _defbe ==0||_eaee ==0{return nil ,_c .Error (_dcef ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _cgdf ==nil {_cgdf =_gcag .createTemplate ();
*_bbbg =_gcag ;return _cgdf ,nil ;};_cgdf .Width =_gcag .Width ;_cgdf .Height =_gcag .Height ;_cgdf .RowStride =_gcag .RowStride ;_cgdf .Color =_gcag .Color ;_cgdf .Data =make ([]byte ,_gcag .RowStride *_gcag .Height );if _cgdf ==_gcag {*_bbbg =_gcag .Copy ();
}else {*_bbbg =_gcag ;};return _cgdf ,nil ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _aeca ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_acc :=_fea (width ,height );_acc .Data =data ;if len (data )< height *_acc .RowStride {return nil ,_c .Errorf (_aeca ,"\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 *_acc .RowStride );
};return _acc ,nil ;};func _cgc ()(_fbbf []byte ){_fbbf =make ([]byte ,256);for _dcg :=0;_dcg < 256;_dcg ++{_fdgd :=byte (_dcg );_fbbf [_fdgd ]=(_fdgd &0x01)|((_fdgd &0x04)>>1)|((_fdgd &0x10)>>2)|((_fdgd &0x40)>>3)|((_fdgd &0x02)<<3)|((_fdgd &0x08)<<2)|((_fdgd &0x20)<<1)|(_fdgd &0x80);
};return _fbbf ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_cebga *byWidth )Len ()int {return len (_cebga .Values )};func (_ceg *Bitmap )CountPixels ()int {return _ceg .countPixels ()};
func _cede (_acccb ,_aeef *Bitmap ,_cfag ,_eaae ,_fbbb ,_gbbce ,_cbda int ,_cega CombinationOperator )error {var _fgdb int ;_bcdc :=func (){_fgdb ++;_fbbb +=_aeef .RowStride ;_gbbce +=_acccb .RowStride ;_cbda +=_acccb .RowStride };for _fgdb =_cfag ;_fgdb < _eaae ;
_bcdc (){_adbb :=_fbbb ;for _gadc :=_gbbce ;_gadc <=_cbda ;_gadc ++{_abaa ,_gfb :=_aeef .GetByte (_adbb );if _gfb !=nil {return _gfb ;};_afg ,_gfb :=_acccb .GetByte (_gadc );if _gfb !=nil {return _gfb ;};if _gfb =_aeef .SetByte (_adbb ,_fbdb (_abaa ,_afg ,_cega ));
_gfb !=nil {return _gfb ;};_adbb ++;};};return nil ;};func _cafgb (_gged ,_fgead ,_ffba byte )byte {return (_gged &^(_ffba ))|(_fgead &_ffba )};func TstWordBitmapWithSpaces (t *_d .T ,scale ...int )*Bitmap {_eeef :=1;if len (scale )> 0{_eeef =scale [0];
};_cdab :=3;_bbfe :=9+7+15+2*_cdab +2*_cdab ;_aabd :=5+_cdab +5+2*_cdab ;_ebef :=New (_bbfe *_eeef ,_aabd *_eeef );_dccd :=&Bitmaps {};var _ddbg *int ;_cdab *=_eeef ;_ggad :=_cdab ;_ddbg =&_ggad ;_ggbba :=_cdab ;_dgcg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );
_dgcg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,_cdab );_dgcg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );_dgcg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,_cdab );
_dgcg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );_dgcg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );_dgcg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,0);
*_ddbg =_cdab ;_ggbba =5*_eeef +_cdab ;_dgcg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );_dgcg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,_cdab );_dgcg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );
_dgcg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );_dgcg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );_dgcg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,1*_eeef );
_dgcg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_dccd ,_dgcg ,_ddbg ,_ggbba ,0);TstWriteSymbols (t ,_dccd ,_ebef );return _ebef ;};func (_agdd *Bitmap )nextOnPixel (_bgcg ,_gef int )(_gcb _a .Point ,_gadb bool ,_afad error ){const _accc ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
_gcb ,_gadb ,_afad =_agdd .nextOnPixelLow (_agdd .Width ,_agdd .Height ,_agdd .RowStride ,_bgcg ,_gef );if _afad !=nil {return _gcb ,false ,_c .Wrap (_afad ,_accc ,"");};return _gcb ,_gadb ,nil ;};type Component int ;