2020-08-27 21:45:09 +00:00

12 lines
195 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package bitmap ;import (_ag "encoding/binary";_fb "github.com/stretchr/testify/require";_bf "github.com/unidoc/unipdf/v3/common";_fbc "github.com/unidoc/unipdf/v3/internal/bitwise";_g "github.com/unidoc/unipdf/v3/internal/imageutil";_b "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_a "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ff "image";_bb "math";_ae "sort";_e "strings";_ad "testing";);func (_feec *Bitmap )CreateTemplate ()*Bitmap {return _feec .createTemplate ()};func (_eed *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_dgba bool ,_gag error ){const _fcb ="\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 =_aaec ();};_dcc :=_eed .Width >>3;_afbe :=_eed .Width &7;_febd :=byte (0xff<<uint (8-_afbe ));var (_caea ,_bcbb ,_aaca ,_dbcb int ;_agg byte ;);for _caea =0;_caea < _eed .Height ;_caea ++{_aaca =_eed .RowStride *_caea ;for _bcbb =0;_bcbb < _dcc ;_bcbb ++{_agg ,_gag =_eed .GetByte (_aaca +_bcbb );if _gag !=nil {return false ,_a .Wrap (_gag ,_fcb ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_dbcb +=tab8 [_agg ];};if _afbe !=0{_agg ,_gag =_eed .GetByte (_aaca +_bcbb );if _gag !=nil {return false ,_a .Wrap (_gag ,_fcb ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_agg &=_febd ;_dbcb +=tab8 [_agg ];};if _dbcb > thresh {return true ,nil ;};};return _dgba ,nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _cefa ="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 ,_a .Error (_cefa ,"\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 ,_a .Error (_cefa ,"\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 ,_a .Error (_cefa ,"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 ,_a .Error (_cefa ,"\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 ,_a .Error (_cefa ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");};_dafdc ,_bcaf :=bm1 .Width ,bm1 .Height ;_cbcc ,_cgfg :=bm2 .Width ,bm2 .Height ;if _b .Abs (_dafdc -_cbcc )> maxDiffW {return false ,nil ;};if _b .Abs (_bcaf -_cgfg )> maxDiffH {return false ,nil ;};_bcca :=int (delX +_b .Sign (delX )*0.5);_acdf :=int (delY +_b .Sign (delY )*0.5);_bbad :=int (_bb .Ceil (_bb .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_agefd :=bm2 .RowStride ;_gbeg :=_baba (_acdf ,0);_bccg :=_ebcf (_cgfg +_acdf ,_bcaf );_fgfa :=bm1 .RowStride *_gbeg ;_bcbbc :=bm2 .RowStride *(_gbeg -_acdf );var _gafg int ;if _bccg <=_bcaf {_gafg =downcount [_bccg -1];};_faa :=_baba (_bcca ,0);_dcbea :=_ebcf (_cbcc +_bcca ,_dafdc );var _gebd ,_edgd int ;if _bcca >=8{_gebd =_bcca >>3;_fgfa +=_gebd ;_faa -=_gebd <<3;_dcbea -=_gebd <<3;_bcca &=7;}else if _bcca <=-8{_edgd =-((_bcca +7)>>3);_bcbbc +=_edgd ;_agefd -=_edgd ;_bcca +=_edgd <<3;};var (_dcee ,_dcbc ,_ebdc int ;_cccb ,_cbeg ,_bbac byte ;);if _faa >=_dcbea ||_gbeg >=_bccg {return false ,nil ;};_ggad :=(_dcbea +7)>>3;switch {case _bcca ==0:for _dcbc =_gbeg ;_dcbc < _bccg ;_dcbc ,_fgfa ,_bcbbc =_dcbc +1,_fgfa +bm1 .RowStride ,_bcbbc +bm2 .RowStride {for _ebdc =0;_ebdc < _ggad ;_ebdc ++{_cccb =bm1 .Data [_fgfa +_ebdc ]&bm2 .Data [_bcbbc +_ebdc ];_dcee +=tab [_cccb ];};if _dcee >=_bbad {return true ,nil ;};if _efd :=_dcee +downcount [_dcbc ]-_gafg ;_efd < _bbad {return false ,nil ;};};case _bcca > 0&&_agefd < _ggad :for _dcbc =_gbeg ;_dcbc < _bccg ;_dcbc ,_fgfa ,_bcbbc =_dcbc +1,_fgfa +bm1 .RowStride ,_bcbbc +bm2 .RowStride {_cbeg =bm1 .Data [_fgfa ];_bbac =bm2 .Data [_bcbbc ]>>uint (_bcca );_cccb =_cbeg &_bbac ;_dcee +=tab [_cccb ];for _ebdc =1;_ebdc < _agefd ;_ebdc ++{_cbeg =bm1 .Data [_fgfa +_ebdc ];_bbac =bm2 .Data [_bcbbc +_ebdc ]>>uint (_bcca )|bm2 .Data [_bcbbc +_ebdc -1]<<uint (8-_bcca );_cccb =_cbeg &_bbac ;_dcee +=tab [_cccb ];};_cbeg =bm1 .Data [_fgfa +_ebdc ];_bbac =bm2 .Data [_bcbbc +_ebdc -1]<<uint (8-_bcca );_cccb =_cbeg &_bbac ;_dcee +=tab [_cccb ];if _dcee >=_bbad {return true ,nil ;}else if _dcee +downcount [_dcbc ]-_gafg < _bbad {return false ,nil ;};};case _bcca > 0&&_agefd >=_ggad :for _dcbc =_gbeg ;_dcbc < _bccg ;_dcbc ,_fgfa ,_bcbbc =_dcbc +1,_fgfa +bm1 .RowStride ,_bcbbc +bm2 .RowStride {_cbeg =bm1 .Data [_fgfa ];_bbac =bm2 .Data [_bcbbc ]>>uint (_bcca );_cccb =_cbeg &_bbac ;_dcee +=tab [_cccb ];for _ebdc =1;_ebdc < _ggad ;_ebdc ++{_cbeg =bm1 .Data [_fgfa +_ebdc ];_bbac =bm2 .Data [_bcbbc +_ebdc ]>>uint (_bcca );_bbac |=bm2 .Data [_bcbbc +_ebdc -1]<<uint (8-_bcca );_cccb =_cbeg &_bbac ;_dcee +=tab [_cccb ];};if _dcee >=_bbad {return true ,nil ;}else if _dcee +downcount [_dcbc ]-_gafg < _bbad {return false ,nil ;};};case _ggad < _agefd :for _dcbc =_gbeg ;_dcbc < _bccg ;_dcbc ,_fgfa ,_bcbbc =_dcbc +1,_fgfa +bm1 .RowStride ,_bcbbc +bm2 .RowStride {for _ebdc =0;_ebdc < _ggad ;_ebdc ++{_cbeg =bm1 .Data [_fgfa +_ebdc ];_bbac =bm2 .Data [_bcbbc +_ebdc ]<<uint (-_bcca );_bbac |=bm2 .Data [_bcbbc +_ebdc +1]>>uint (8+_bcca );_cccb =_cbeg &_bbac ;_dcee +=tab [_cccb ];};if _dcee >=_bbad {return true ,nil ;}else if _efae :=_dcee +downcount [_dcbc ]-_gafg ;_efae < _bbad {return false ,nil ;};};case _agefd >=_ggad :for _dcbc =_gbeg ;_dcbc < _bccg ;_dcbc ,_fgfa ,_bcbbc =_dcbc +1,_fgfa +bm1 .RowStride ,_bcbbc +bm2 .RowStride {for _ebdc =0;_ebdc < _ggad ;_ebdc ++{_cbeg =bm1 .Data [_fgfa +_ebdc ];_bbac =bm2 .Data [_bcbbc +_ebdc ]<<uint (-_bcca );_bbac |=bm2 .Data [_bcbbc +_ebdc +1]>>uint (8+_bcca );_cccb =_cbeg &_bbac ;_dcee +=tab [_cccb ];};_cbeg =bm1 .Data [_fgfa +_ebdc ];_bbac =bm2 .Data [_bcbbc +_ebdc ]<<uint (-_bcca );_cccb =_cbeg &_bbac ;_dcee +=tab [_cccb ];if _dcee >=_bbad {return true ,nil ;}else if _dcee +downcount [_dcbc ]-_gafg < _bbad {return false ,nil ;};};};_eacf :=float32 (_dcee )*float32 (_dcee )/(float32 (area1 )*float32 (area2 ));if _eacf >=scoreThreshold {_bf .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",_dcee ,_bbad ,_eacf ,scoreThreshold );};return false ,nil ;};func (_fegee *Bitmaps )SortByHeight (){_dadfc :=(*byHeight )(_fegee );_ae .Sort (_dadfc )};func (_cgc *Bitmap )GetVanillaData ()[]byte {if _cgc .Color ==Chocolate {_cgc .inverseData ();};return _cgc .Data ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_bddec float64 ,_cccg error ){const _cebg ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_a .Error (_cebg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_a .Error (_cebg ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_a .Error (_cebg ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_dbdf ,_cgaa :=bm1 .Width ,bm1 .Height ;_cddf ,_bage :=bm2 .Width ,bm2 .Height ;_ebde :=_acgf (_dbdf -_cddf );if _ebde > maxDiffW {return 0,nil ;};_edc :=_acgf (_cgaa -_bage );if _edc > maxDiffH {return 0,nil ;};var _afba ,_ggaga int ;if delX >=0{_afba =int (delX +0.5);}else {_afba =int (delX -0.5);};if delY >=0{_ggaga =int (delY +0.5);}else {_ggaga =int (delY -0.5);};_dadd :=_baba (_ggaga ,0);_bgcbd :=_ebcf (_bage +_ggaga ,_cgaa );_egcd :=bm1 .RowStride *_dadd ;_feba :=bm2 .RowStride *(_dadd -_ggaga );_bbg :=_baba (_afba ,0);_caga :=_ebcf (_cddf +_afba ,_dbdf );_ggdc :=bm2 .RowStride ;var _agbdg ,_fdfg int ;if _afba >=8{_agbdg =_afba >>3;_egcd +=_agbdg ;_bbg -=_agbdg <<3;_caga -=_agbdg <<3;_afba &=7;}else if _afba <=-8{_fdfg =-((_afba +7)>>3);_feba +=_fdfg ;_ggdc -=_fdfg ;_afba +=_fdfg <<3;};if _bbg >=_caga ||_dadd >=_bgcbd {return 0,nil ;};_ffbc :=(_caga +7)>>3;var (_ecbg ,_cacg ,_dag byte ;_febda ,_fba ,_agbgd int ;);switch {case _afba ==0:for _agbgd =_dadd ;_agbgd < _bgcbd ;_agbgd ,_egcd ,_feba =_agbgd +1,_egcd +bm1 .RowStride ,_feba +bm2 .RowStride {for _fba =0;_fba < _ffbc ;_fba ++{_dag =bm1 .Data [_egcd +_fba ]&bm2 .Data [_feba +_fba ];_febda +=tab [_dag ];};};case _afba > 0:if _ggdc < _ffbc {for _agbgd =_dadd ;_agbgd < _bgcbd ;_agbgd ,_egcd ,_feba =_agbgd +1,_egcd +bm1 .RowStride ,_feba +bm2 .RowStride {_ecbg ,_cacg =bm1 .Data [_egcd ],bm2 .Data [_feba ]>>uint (_afba );_dag =_ecbg &_cacg ;_febda +=tab [_dag ];for _fba =1;_fba < _ggdc ;_fba ++{_ecbg ,_cacg =bm1 .Data [_egcd +_fba ],(bm2 .Data [_feba +_fba ]>>uint (_afba ))|(bm2 .Data [_feba +_fba -1]<<uint (8-_afba ));_dag =_ecbg &_cacg ;_febda +=tab [_dag ];};_ecbg =bm1 .Data [_egcd +_fba ];_cacg =bm2 .Data [_feba +_fba -1]<<uint (8-_afba );_dag =_ecbg &_cacg ;_febda +=tab [_dag ];};}else {for _agbgd =_dadd ;_agbgd < _bgcbd ;_agbgd ,_egcd ,_feba =_agbgd +1,_egcd +bm1 .RowStride ,_feba +bm2 .RowStride {_ecbg ,_cacg =bm1 .Data [_egcd ],bm2 .Data [_feba ]>>uint (_afba );_dag =_ecbg &_cacg ;_febda +=tab [_dag ];for _fba =1;_fba < _ffbc ;_fba ++{_ecbg =bm1 .Data [_egcd +_fba ];_cacg =(bm2 .Data [_feba +_fba ]>>uint (_afba ))|(bm2 .Data [_feba +_fba -1]<<uint (8-_afba ));_dag =_ecbg &_cacg ;_febda +=tab [_dag ];};};};default:if _ffbc < _ggdc {for _agbgd =_dadd ;_agbgd < _bgcbd ;_agbgd ,_egcd ,_feba =_agbgd +1,_egcd +bm1 .RowStride ,_feba +bm2 .RowStride {for _fba =0;_fba < _ffbc ;_fba ++{_ecbg =bm1 .Data [_egcd +_fba ];_cacg =bm2 .Data [_feba +_fba ]<<uint (-_afba );_cacg |=bm2 .Data [_feba +_fba +1]>>uint (8+_afba );_dag =_ecbg &_cacg ;_febda +=tab [_dag ];};};}else {for _agbgd =_dadd ;_agbgd < _bgcbd ;_agbgd ,_egcd ,_feba =_agbgd +1,_egcd +bm1 .RowStride ,_feba +bm2 .RowStride {for _fba =0;_fba < _ffbc -1;_fba ++{_ecbg =bm1 .Data [_egcd +_fba ];_cacg =bm2 .Data [_feba +_fba ]<<uint (-_afba );_cacg |=bm2 .Data [_feba +_fba +1]>>uint (8+_afba );_dag =_ecbg &_cacg ;_febda +=tab [_dag ];};_ecbg =bm1 .Data [_egcd +_fba ];_cacg =bm2 .Data [_feba +_fba ]<<uint (-_afba );_dag =_ecbg &_cacg ;_febda +=tab [_dag ];};};};_bddec =float64 (_febda )*float64 (_febda )/(float64 (area1 )*float64 (area2 ));return _bddec ,nil ;};func _bafg (_gcf ,_dda int )*Bitmap {return &Bitmap {Width :_gcf ,Height :_dda ,RowStride :(_gcf +7)>>3};};func (_ggcab *byWidth )Less (i ,j int )bool {return _ggcab .Values [i ].Width < _ggcab .Values [j ].Width };func (_gacgf *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _aefc ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_gacgf .Values )==0{return nil ,_a .Error (_aefc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_dcea :=&BitmapsArray {};_gacgf .SortByHeight ();_ebdgb :=-1;_cccgd :=-1;for _bfad :=0;_bfad < len (_gacgf .Values );_bfad ++{_bdcd :=_gacgf .Values [_bfad ].Height ;if _bdcd > _ebdgb {_ebdgb =_bdcd ;_cccgd ++;_dcea .Values =append (_dcea .Values ,&Bitmaps {});};_dcea .Values [_cccgd ].AddBitmap (_gacgf .Values [_bfad ]);};return _dcea ,nil ;};type SizeComparison int ;func TstWSymbol (t *_ad .T ,scale ...int )*Bitmap {_edacc ,_dbagd :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_fb .NoError (t ,_dbagd );return TstGetScaledSymbol (t ,_edacc ,scale ...);};func _cgbg (_efeeb ,_bgcbc *Bitmap ,_baec ,_ffgd int )(*Bitmap ,error ){const _gecb ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _bgcbc ==nil {_bf .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 ,_a .Error (_gecb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _baec < 1||_ffgd < 1{return nil ,_a .Error (_gecb ,"\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 _baec ==1&&_ffgd ==1{_cebaf ,_efgc :=_afa (_efeeb ,_bgcbc );if _efgc !=nil {return nil ,_a .Wrap (_efgc ,_gecb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _cebaf ,nil ;};if _baec ==1||_ffgd ==1{_dea :=SelCreateBrick (_ffgd ,_baec ,_ffgd /2,_baec /2,SelHit );_dbcbg ,_afebc :=_babaa (_efeeb ,_bgcbc ,_dea );if _afebc !=nil {return nil ,_a .Wrap (_afebc ,_gecb ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _dbcbg ,nil ;};_abca :=SelCreateBrick (1,_baec ,0,_baec /2,SelHit );_afdd :=SelCreateBrick (_ffgd ,1,_ffgd /2,0,SelHit );_ffge ,_ccfea :=_babaa (nil ,_bgcbc ,_abca );if _ccfea !=nil {return nil ,_a .Wrap (_ccfea ,_gecb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_efeeb ,_ccfea =_babaa (_efeeb ,_ffge ,_afdd );if _ccfea !=nil {return nil ,_a .Wrap (_ccfea ,_gecb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _efeeb ,nil ;};func _ege (_baf ,_aea *Bitmap )(_gd error ){const _age ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_ge :=_aea .RowStride ;_df :=_baf .RowStride ;_c :=_aea .RowStride *4-_baf .RowStride ;var (_fae ,_fcg byte ;_gg uint32 ;_gde ,_afg ,_cd ,_fd ,_fca ,_da ,_dg int ;);for _cd =0;_cd < _aea .Height ;_cd ++{_gde =_cd *_ge ;_afg =4*_cd *_df ;for _fd =0;_fd < _ge ;_fd ++{_fae =_aea .Data [_gde +_fd ];_gg =_fcba [_fae ];_da =_afg +_fd *4;if _c !=0&&(_fd +1)*4> _baf .RowStride {for _fca =_c ;_fca > 0;_fca --{_fcg =byte ((_gg >>uint (_fca *8))&0xff);_dg =_da +(_c -_fca );if _gd =_baf .SetByte (_dg ,_fcg );_gd !=nil {return _a .Wrapf (_gd ,_age ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_fca );};};}else if _gd =_baf .setFourBytes (_da ,_gg );_gd !=nil {return _a .Wrap (_gd ,_age ,"");};if _gd =_baf .setFourBytes (_afg +_fd *4,_fcba [_aea .Data [_gde +_fd ]]);_gd !=nil {return _a .Wrap (_gd ,_age ,"");};};for _fca =1;_fca < 4;_fca ++{for _fd =0;_fd < _df ;_fd ++{if _gd =_baf .SetByte (_afg +_fca *_df +_fd ,_baf .Data [_afg +_fd ]);_gd !=nil {return _a .Wrapf (_gd ,_age ,"\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",_fca ,_fd );};};};};return nil ;};func (_bafc *Points )AddPoint (x ,y float32 ){*_bafc =append (*_bafc ,Point {x ,y })};func (_afd *Bitmap )Equivalent (s *Bitmap )bool {return _afd .equivalent (s )};func (_gggg CombinationOperator )String ()string {var _bddd string ;switch _gggg {case CmbOpOr :_bddd ="\u004f\u0052";case CmbOpAnd :_bddd ="\u0041\u004e\u0044";case CmbOpXor :_bddd ="\u0058\u004f\u0052";case CmbOpXNor :_bddd ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_bddd ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_bddd ="\u004e\u004f\u0054";};return _bddd ;};func _gbgd (_bdcf ,_ceba byte ,_fbea CombinationOperator )byte {switch _fbea {case CmbOpOr :return _ceba |_bdcf ;case CmbOpAnd :return _ceba &_bdcf ;case CmbOpXor :return _ceba ^_bdcf ;case CmbOpXNor :return ^(_ceba ^_bdcf );case CmbOpNot :return ^(_ceba );default:return _ceba ;};};func init (){for _cag :=0;_cag < 256;_cag ++{_bfagd [_cag ]=uint8 (_cag &0x1)+(uint8 (_cag >>1)&0x1)+(uint8 (_cag >>2)&0x1)+(uint8 (_cag >>3)&0x1)+(uint8 (_cag >>4)&0x1)+(uint8 (_cag >>5)&0x1)+(uint8 (_cag >>6)&0x1)+(uint8 (_cag >>7)&0x1);};};func TstAddSymbol (t *_ad .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_fcdb :=_ff .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_fcdb );*x +=sym .Width +space ;};func (_gaac *Selection )setOrigin (_cedab ,_ddecd int ){_gaac .Cy ,_gaac .Cx =_cedab ,_ddecd };func (_gccb *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _gccb .addBorderGeneral (left ,right ,top ,bot ,val );};func _deeb ()(_add [256]uint16 ){for _fce :=0;_fce < 256;_fce ++{if _fce &0x01!=0{_add [_fce ]|=0x3;};if _fce &0x02!=0{_add [_fce ]|=0xc;};if _fce &0x04!=0{_add [_fce ]|=0x30;};if _fce &0x08!=0{_add [_fce ]|=0xc0;};if _fce &0x10!=0{_add [_fce ]|=0x300;};if _fce &0x20!=0{_add [_fce ]|=0xc00;};if _fce &0x40!=0{_add [_fce ]|=0x3000;};if _fce &0x80!=0{_add [_fce ]|=0xc000;};};return _add ;};func (_eff *Bitmap )GetBitOffset (x int )int {return x &0x07};func (_abf *byHeight )Len ()int {return len (_abf .Values )};func _dgee (_gaad ,_gcea *Bitmap ,_abcf ,_fdfb int )(_fadd error ){const _dfde ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_bgeac ,_ecdd ,_dddb ,_aegeca int ;_bcfc ,_afae ,_ddea ,_aggdf ,_edde ,_dacfa ,_dade ,_gdbe byte ;);for _bgeac =0;_bgeac < _abcf ;_bgeac ++{_dddb =_bgeac *_gaad .RowStride ;_aegeca =_bgeac *_gcea .RowStride ;for _ecdd =0;_ecdd < _fdfb ;_ecdd ++{if _bcfc ,_fadd =_gaad .GetByte (_dddb +_ecdd );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _afae ,_fadd =_gcea .GetByte (_aegeca +_ecdd );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _bgeac > 0{if _ddea ,_fadd =_gaad .GetByte (_dddb -_gaad .RowStride +_ecdd );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bcfc |=_ddea |(_ddea <<1)|(_ddea >>1);if _ecdd > 0{if _gdbe ,_fadd =_gaad .GetByte (_dddb -_gaad .RowStride +_ecdd -1);_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bcfc |=_gdbe <<7;};if _ecdd < _fdfb -1{if _gdbe ,_fadd =_gaad .GetByte (_dddb -_gaad .RowStride +_ecdd +1);_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_bcfc |=_gdbe >>7;};};if _ecdd > 0{if _aggdf ,_fadd =_gaad .GetByte (_dddb +_ecdd -1);_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u006a\u0020\u003e \u0030");};_bcfc |=_aggdf <<7;};_bcfc &=_afae ;if _bcfc ==0||^_bcfc ==0{if _fadd =_gaad .SetByte (_dddb +_ecdd ,_bcfc );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_dade =_bcfc ;_bcfc =(_bcfc |(_bcfc >>1)|(_bcfc <<1))&_afae ;if (_bcfc ^_dade )==0{if _fadd =_gaad .SetByte (_dddb +_ecdd ,_bcfc );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _bgeac =_abcf -1;_bgeac >=0;_bgeac --{_dddb =_bgeac *_gaad .RowStride ;_aegeca =_bgeac *_gcea .RowStride ;for _ecdd =_fdfb -1;_ecdd >=0;_ecdd --{if _bcfc ,_fadd =_gaad .GetByte (_dddb +_ecdd );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _afae ,_fadd =_gcea .GetByte (_aegeca +_ecdd );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bgeac < _abcf -1{if _edde ,_fadd =_gaad .GetByte (_dddb +_gaad .RowStride +_ecdd );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_bcfc |=_edde |(_edde <<1)|_edde >>1;if _ecdd > 0{if _gdbe ,_fadd =_gaad .GetByte (_dddb +_gaad .RowStride +_ecdd -1);_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\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");};_bcfc |=_gdbe <<7;};if _ecdd < _fdfb -1{if _gdbe ,_fadd =_gaad .GetByte (_dddb +_gaad .RowStride +_ecdd +1);_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\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");};_bcfc |=_gdbe >>7;};};if _ecdd < _fdfb -1{if _dacfa ,_fadd =_gaad .GetByte (_dddb +_ecdd +1);_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\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");};_bcfc |=_dacfa >>7;};_bcfc &=_afae ;if _bcfc ==0||(^_bcfc )==0{if _fadd =_gaad .SetByte (_dddb +_ecdd ,_bcfc );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_dade =_bcfc ;_bcfc =(_bcfc |(_bcfc >>1)|(_bcfc <<1))&_afae ;if (_bcfc ^_dade )==0{if _fadd =_gaad .SetByte (_dddb +_ecdd ,_bcfc );_fadd !=nil {return _a .Wrap (_fadd ,_dfde ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");};break ;};};};};return nil ;};func (_efc *Bitmap )GetChocolateData ()[]byte {if _efc .Color ==Vanilla {_efc .inverseData ();};return _efc .Data ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _bdd ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_aca :=_bafg (width ,height );_aca .Data =data ;if len (data )< height *_aca .RowStride {return nil ,_a .Errorf (_bdd ,"\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 *_aca .RowStride );};return _aca ,nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_dedg *Bitmap )Zero ()bool {_aeg :=_dedg .Width /8;_bfg :=_dedg .Width &7;var _dded byte ;if _bfg !=0{_dded =byte (0xff<<uint (8-_bfg ));};var _egg ,_gagf ,_bde int ;for _gagf =0;_gagf < _dedg .Height ;_gagf ++{_egg =_dedg .RowStride *_gagf ;for _bde =0;_bde < _aeg ;_bde ,_egg =_bde +1,_egg +1{if _dedg .Data [_egg ]!=0{return false ;};};if _bfg > 0{if _dedg .Data [_egg ]&_dded !=0{return false ;};};};return true ;};type fillSegment struct{_baecb int ;_ggcee int ;_bdbb int ;_acae int ;};func (_cda *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _cda .removeBorderGeneral (left ,right ,top ,bot );};func (_bafb *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _dbgd ="\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 >=_bafb .IntSlice .Size (){return 0,_a .Errorf (_dbgd ,"\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 (_bafb .XAtIndex (i )),nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _ebgb (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_bdce *Bitmap )addPadBits ()(_gagb error ){const _abac ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_dcfb :=_bdce .Width %8;if _dcfb ==0{return nil ;};_gbbc :=_bdce .Width /8;_affc :=_fbc .NewReader (_bdce .Data );_dadf :=make ([]byte ,_bdce .Height *_bdce .RowStride );_gec :=_fbc .NewWriterMSB (_dadf );_egaa :=make ([]byte ,_gbbc );var (_ddbb int ;_abbd uint64 ;);for _ddbb =0;_ddbb < _bdce .Height ;_ddbb ++{if _ ,_gagb =_affc .Read (_egaa );_gagb !=nil {return _a .Wrap (_gagb ,_abac ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_gagb =_gec .Write (_egaa );_gagb !=nil {return _a .Wrap (_gagb ,_abac ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _abbd ,_gagb =_affc .ReadBits (byte (_dcfb ));_gagb !=nil {return _a .Wrap (_gagb ,_abac ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _gagb =_gec .WriteByte (byte (_abbd )<<uint (8-_dcfb ));_gagb !=nil {return _a .Wrap (_gagb ,_abac ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_bdce .Data =_gec .Data ();return nil ;};func (_edab Points )YSorter ()func (_eba ,_fcgea int )bool {return func (_fecc ,_ffbcg int )bool {return _edab [_fecc ].Y < _edab [_ffbcg ].Y };};func (_affcf *BitmapsArray )AddBitmaps (bm *Bitmaps ){_affcf .Values =append (_affcf .Values ,bm )};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _aga ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_gaa :=_bafg (width ,height );_gaa .Data =data ;if _abb :=((width *height )+7)>>3;len (data )< _abb {return nil ,_a .Errorf (_aga ,"\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 ),_abb );};if _acf :=_gaa .addPadBits ();_acf !=nil {return nil ,_a .Wrap (_acf ,_aga ,"");};return _gaa ,nil ;};func Rect (x ,y ,w ,h int )(*_ff .Rectangle ,error ){const _facd ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_a .Errorf (_facd ,"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 ,_a .Error (_facd ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_fbe :=_ff .Rect (x ,y ,x +w ,y +h );return &_fbe ,nil ;};func _bgbc (_acebf ,_fefa *Bitmap ,_eebd ,_fdg ,_degg uint ,_edgf ,_abea int ,_ecgf bool ,_dfg ,_adca int )error {for _bdba :=_edgf ;_bdba < _abea ;_bdba ++{if _dfg +1< len (_acebf .Data ){_dcde :=_bdba +1==_abea ;_ddff ,_fcbf :=_acebf .GetByte (_dfg );if _fcbf !=nil {return _fcbf ;};_dfg ++;_ddff <<=_eebd ;_gedf ,_fcbf :=_acebf .GetByte (_dfg );if _fcbf !=nil {return _fcbf ;};_gedf >>=_fdg ;_cada :=_ddff |_gedf ;if _dcde &&!_ecgf {_cada =_ceb (_degg ,_cada );};_fcbf =_fefa .SetByte (_adca ,_cada );if _fcbf !=nil {return _fcbf ;};_adca ++;if _dcde &&_ecgf {_dgbce ,_gbd :=_acebf .GetByte (_dfg );if _gbd !=nil {return _gbd ;};_dgbce <<=_eebd ;_cada =_ceb (_degg ,_dgbce );if _gbd =_fefa .SetByte (_adca ,_cada );_gbd !=nil {return _gbd ;};};continue ;};_ffa ,_efbae :=_acebf .GetByte (_dfg );if _efbae !=nil {_bf .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",_dfg ,_efbae );return _efbae ;};_ffa <<=_eebd ;_dfg ++;_efbae =_fefa .SetByte (_adca ,_ffa );if _efbae !=nil {return _efbae ;};_adca ++;};return nil ;};func _gbac (_bfcb ,_beef int ,_dbbb string )*Selection {_ecebd :=&Selection {Height :_bfcb ,Width :_beef ,Name :_dbbb };_ecebd .Data =make ([][]SelectionValue ,_bfcb );for _gdbfa :=0;_gdbfa < _bfcb ;_gdbfa ++{_ecebd .Data [_gdbfa ]=make ([]SelectionValue ,_beef );};return _ecebd ;};func _acdbd (_bgag *Bitmap )(_dfaf *Bitmap ,_efeb int ,_eege error ){const _cdgc ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _bgag ==nil {return nil ,0,_a .Errorf (_cdgc ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _agd ,_ebdb *Bitmap ;if _agd ,_eege =_afa (nil ,_bgag );_eege !=nil {return nil ,0,_a .Wrap (_eege ,_cdgc ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_aaceg [13]int ;_caddc ,_afeg int ;);_gbcg :=12;_ebf :=_b .NewNumSlice (_gbcg +1);_fgbc :=_b .NewNumSlice (_gbcg +1);var _fbggc *Boxes ;for _bbcb :=0;_bbcb <=_gbcg ;_bbcb ++{if _bbcb ==0{if _ebdb ,_eege =_afa (nil ,_agd );_eege !=nil {return nil ,0,_a .Wrap (_eege ,_cdgc ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _ebdb ,_eege =_gceeb (_agd ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_eege !=nil {return nil ,0,_a .Wrap (_eege ,_cdgc ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _fbggc ,_eege =_ebdb .connComponentsBB (4);_eege !=nil {return nil ,0,_a .Wrap (_eege ,_cdgc ,"");};_aaceg [_bbcb ]=len (*_fbggc );_ebf .AddInt (_aaceg [_bbcb ]);switch _bbcb {case 0:_caddc =_aaceg [0];default:_afeg =_aaceg [_bbcb -1]-_aaceg [_bbcb ];_fgbc .AddInt (_afeg );};_agd =_ebdb ;};_bbbg :=true ;_fff :=2;var _dfca ,_ggac int ;for _gfff :=1;_gfff < len (*_fgbc );_gfff ++{if _dfca ,_eege =_ebf .GetInt (_gfff );_eege !=nil {return nil ,0,_a .Wrap (_eege ,_cdgc ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _bbbg &&_dfca < int (0.3*float32 (_caddc )){_fff =_gfff +1;_bbbg =false ;};if _afeg ,_eege =_fgbc .GetInt (_gfff );_eege !=nil {return nil ,0,_a .Wrap (_eege ,_cdgc ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _afeg > _ggac {_ggac =_afeg ;};};_bcee :=_bgag .XResolution ;if _bcee ==0{_bcee =150;};if _bcee > 110{_fff ++;};if _fff < 2{_bf .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");_fff =2;};_efeb =_fff +1;if _dfaf ,_eege =_dfec (nil ,_bgag ,_fff +1,1);_eege !=nil {return nil ,0,_a .Wrap (_eege ,_cdgc ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _dfaf ,_efeb ,nil ;};func New (width ,height int )*Bitmap {_gcc :=_bafg (width ,height );_gcc .Data =make ([]byte ,height *_gcc .RowStride );return _gcc ;};func _cdeca (_gcca *_b .Stack ,_eegg ,_fcgee ,_afbac ,_gabc ,_becd int ,_fdgc *_ff .Rectangle )(_befe error ){const _dgfb ="\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 _gcca ==nil {return _a .Error (_dgfb ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _fdgc ==nil {return _a .Error (_dgfb ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");};_fdgc .Min .X =_b .Min (_fdgc .Min .X ,_eegg );_fdgc .Max .X =_b .Max (_fdgc .Max .X ,_fcgee );_fdgc .Min .Y =_b .Min (_fdgc .Min .Y ,_afbac );_fdgc .Max .Y =_b .Max (_fdgc .Max .Y ,_afbac );if !(_afbac +_gabc >=0&&_afbac +_gabc <=_becd ){return nil ;};if _gcca .Aux ==nil {return _a .Error (_dgfb ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _gdba *fillSegment ;_afegc ,_gbbea :=_gcca .Aux .Pop ();if _gbbea {if _gdba ,_gbbea =_afegc .(*fillSegment );!_gbbea {return _a .Error (_dgfb ,"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 {_gdba =&fillSegment {};};_gdba ._baecb =_eegg ;_gdba ._ggcee =_fcgee ;_gdba ._bdbb =_afbac ;_gdba ._acae =_gabc ;_gcca .Push (_gdba );return nil ;};func _cgf ()(_ee [256]uint32 ){for _gc :=0;_gc < 256;_gc ++{if _gc &0x01!=0{_ee [_gc ]|=0xf;};if _gc &0x02!=0{_ee [_gc ]|=0xf0;};if _gc &0x04!=0{_ee [_gc ]|=0xf00;};if _gc &0x08!=0{_ee [_gc ]|=0xf000;};if _gc &0x10!=0{_ee [_gc ]|=0xf0000;};if _gc &0x20!=0{_ee [_gc ]|=0xf00000;};if _gc &0x40!=0{_ee [_gc ]|=0xf000000;};if _gc &0x80!=0{_ee [_gc ]|=0xf0000000;};};return _ee ;};func (_fcad *Bitmap )inverseData (){if _gdb :=_fcad .RasterOperation (0,0,_fcad .Width ,_fcad .Height ,PixNotDst ,nil ,0,0);_gdb !=nil {_bf .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_gdb );};if _fcad .Color ==Chocolate {_fcad .Color =Vanilla ;}else {_fcad .Color =Chocolate ;};};const _gaab =5000;func (_ffe *Bitmap )And (s *Bitmap )(_gba *Bitmap ,_bga error ){const _eced ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _ffe ==nil {return nil ,_a .Error (_eced ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_a .Error (_eced ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_ffe .SizesEqual (s ){_bf .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",_eced );};if _gba ,_bga =_afa (_gba ,_ffe );_bga !=nil {return nil ,_a .Wrap (_bga ,_eced ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bga =_gba .RasterOperation (0,0,_gba .Width ,_gba .Height ,PixSrcAndDst ,s ,0,0);_bga !=nil {return nil ,_a .Wrap (_bga ,_eced ,"");};return _gba ,nil ;};func _eafa (_dcfbd ,_gbdb *Bitmap ,_aag *Selection )(*Bitmap ,error ){const _cedf ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _cgbe ,_gfbg int ;if _gbdb ==nil {return nil ,_a .Error (_cedf ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _aag ==nil {return nil ,_a .Error (_cedf ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_cgbe =_aag .Width ;_gfbg =_aag .Height ;if _cgbe ==0||_gfbg ==0{return nil ,_a .Error (_cedf ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _dcfbd ==nil {return _gbdb .createTemplate (),nil ;};if _eebdf :=_dcfbd .resizeImageData (_gbdb );_eebdf !=nil {return nil ,_eebdf ;};return _dcfbd ,nil ;};func _gdc (_fcd *Bitmap ,_ccb ,_dde int )(*Bitmap ,error ){const _bdc ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _fcd ==nil {return nil ,_a .Error (_bdc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ccb <=0||_dde <=0{return nil ,_a .Error (_bdc ,"\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 _ccb ==_dde {if _ccb ==1{_cb ,_cga :=_afa (nil ,_fcd );if _cga !=nil {return nil ,_a .Wrap (_cga ,_bdc ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _cb ,nil ;};if _ccb ==2||_ccb ==4||_ccb ==8{_ddb ,_ce :=_bgcb (_fcd ,_ccb );if _ce !=nil {return nil ,_a .Wrap (_ce ,_bdc ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _ddb ,nil ;};};_dcf :=_ccb *_fcd .Width ;_dgd :=_dde *_fcd .Height ;_agb :=New (_dcf ,_dgd );_gf :=_agb .RowStride ;var (_ca ,_ffb ,_gef ,_bfe ,_ggbb int ;_ab byte ;_fgc error ;);for _ffb =0;_ffb < _fcd .Height ;_ffb ++{_ca =_dde *_ffb *_gf ;for _gef =0;_gef < _fcd .Width ;_gef ++{if _fdb :=_fcd .GetPixel (_gef ,_ffb );_fdb {_ggbb =_ccb *_gef ;for _bfe =0;_bfe < _ccb ;_bfe ++{_agb .setBit (_ca *8+_ggbb +_bfe );};};};for _bfe =1;_bfe < _dde ;_bfe ++{_ef :=_ca +_bfe *_gf ;for _baeg :=0;_baeg < _gf ;_baeg ++{if _ab ,_fgc =_agb .GetByte (_ca +_baeg );_fgc !=nil {return nil ,_a .Wrapf (_fgc ,_bdc ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_bfe );};if _fgc =_agb .SetByte (_ef +_baeg ,_ab );_fgc !=nil {return nil ,_a .Wrap (_fgc ,_bdc ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _agb ,nil ;};func (_edbd *Bitmap )setTwoBytes (_ffba int ,_gfef uint16 )error {if _ffba +1> len (_edbd .Data )-1{return _a .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",_ffba );};_edbd .Data [_ffba ]=byte ((_gfef &0xff00)>>8);_edbd .Data [_ffba +1]=byte (_gfef &0xff);return nil ;};func (_aggc *BitmapsArray )AddBox (box *_ff .Rectangle ){_aggc .Boxes =append (_aggc .Boxes ,box )};func _bgcb (_cgb *Bitmap ,_de int )(*Bitmap ,error ){const _bfa ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _cgb ==nil {return nil ,_a .Error (_bfa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _de ==1{return _afa (nil ,_cgb );};if _de !=2&&_de !=4&&_de !=8{return nil ,_a .Error (_bfa ,"\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");};_db :=_de *_cgb .Width ;_egb :=_de *_cgb .Height ;_ea :=New (_db ,_egb );var _ace error ;switch _de {case 2:_ace =_eg (_ea ,_cgb );case 4:_ace =_ege (_ea ,_cgb );case 8:_ace =_cf (_ea ,_cgb );};if _ace !=nil {return nil ,_a .Wrap (_ace ,_bfa ,"");};return _ea ,nil ;};func (_deed MorphProcess )verify (_ebbg int ,_fdbg ,_ggbe *int )error {const _bbdc ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _deed .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_deed .Arguments )!=2{return _a .Error (_bbdc ,"\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");};_cebb ,_bgddd :=_deed .getWidthHeight ();if _cebb <=0||_bgddd <=0{return _a .Error (_bbdc ,"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 :_agf :=len (_deed .Arguments );*_fdbg +=_agf ;if _agf < 1||_agf > 4{return _a .Error (_bbdc ,"\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 _fggf :=0;_fggf < _agf ;_fggf ++{if _deed .Arguments [_fggf ]< 1||_deed .Arguments [_fggf ]> 4{return _a .Error (_bbdc ,"\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 (_deed .Arguments )==0{return _a .Error (_bbdc ,"\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");};_eace :=_deed .Arguments [0];if _eace !=2&&_eace !=4&&_eace !=8{return _a .Error (_bbdc ,"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");};*_fdbg -=_bddg [_eace /4];case MopAddBorder :if len (_deed .Arguments )==0{return _a .Error (_bbdc ,"\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");};_cgfc :=_deed .Arguments [0];if _ebbg > 0{return _a .Error (_bbdc ,"\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 _cgfc < 1{return _a .Error (_bbdc ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_ggbe =_cgfc ;};return nil ;};type LocationFilter int ;func _acgf (_dcg int )int {if _dcg < 0{return -_dcg ;};return _dcg ;};func _adcab (_fda ,_gdgb *Bitmap ,_bbba ,_efcb int )(*Bitmap ,error ){const _gbgac ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _gdgb ==nil {return nil ,_a .Error (_gbgac ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bbba < 1||_efcb < 1{return nil ,_a .Error (_gbgac ,"\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 _bbba ==1&&_efcb ==1{_aefe ,_ffgf :=_afa (_fda ,_gdgb );if _ffgf !=nil {return nil ,_a .Wrap (_ffgf ,_gbgac ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _aefe ,nil ;};if _bbba ==1||_efcb ==1{_fcea :=SelCreateBrick (_efcb ,_bbba ,_efcb /2,_bbba /2,SelHit );_gecbd ,_bgf :=_gafa (_fda ,_gdgb ,_fcea );if _bgf !=nil {return nil ,_a .Wrap (_bgf ,_gbgac ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _gecbd ,nil ;};_eebf :=SelCreateBrick (1,_bbba ,0,_bbba /2,SelHit );_cabb :=SelCreateBrick (_efcb ,1,_efcb /2,0,SelHit );_gaea ,_gadd :=_gafa (nil ,_gdgb ,_eebf );if _gadd !=nil {return nil ,_a .Wrap (_gadd ,_gbgac ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_fda ,_gadd =_gafa (_fda ,_gaea ,_cabb );if _gadd !=nil {return nil ,_a .Wrap (_gadd ,_gbgac ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _fda ,nil ;};func _dgae (_bdga ,_gddb *Bitmap ,_bagef *Selection )(*Bitmap ,error ){const _cadf ="\u006f\u0070\u0065\u006e";var _gcdb error ;_bdga ,_gcdb =_eafa (_bdga ,_gddb ,_bagef );if _gcdb !=nil {return nil ,_a .Wrap (_gcdb ,_cadf ,"");};_aaee ,_gcdb :=_gafa (nil ,_gddb ,_bagef );if _gcdb !=nil {return nil ,_a .Wrap (_gcdb ,_cadf ,"");};_ ,_gcdb =_babaa (_bdga ,_aaee ,_bagef );if _gcdb !=nil {return nil ,_a .Wrap (_gcdb ,_cadf ,"");};return _bdga ,nil ;};func TstOSymbol (t *_ad .T ,scale ...int )*Bitmap {_fcadd ,_ecfef :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_fb .NoError (t ,_ecfef );return TstGetScaledSymbol (t ,_fcadd ,scale ...);};func (_ecad *Bitmap )connComponentsBB (_ggf int )(_bfgf *Boxes ,_aafg error ){const _baab ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _ggf !=4&&_ggf !=8{return nil ,_a .Error (_baab ,"\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 _ecad .Zero (){return &Boxes {},nil ;};_ecad .setPadBits (0);_fcgdg ,_aafg :=_afa (nil ,_ecad );if _aafg !=nil {return nil ,_a .Wrap (_aafg ,_baab ,"\u0062\u006d\u0031");};_aaeg :=&_b .Stack {};_aaeg .Aux =&_b .Stack {};_bfgf =&Boxes {};var (_bcbd ,_eafb int ;_eab _ff .Point ;_acec bool ;_ffcg *_ff .Rectangle ;);for {if _eab ,_acec ,_aafg =_fcgdg .nextOnPixel (_eafb ,_bcbd );_aafg !=nil {return nil ,_a .Wrap (_aafg ,_baab ,"");};if !_acec {break ;};if _ffcg ,_aafg =_egef (_fcgdg ,_aaeg ,_eab .X ,_eab .Y ,_ggf );_aafg !=nil {return nil ,_a .Wrap (_aafg ,_baab ,"");};if _aafg =_bfgf .Add (_ffcg );_aafg !=nil {return nil ,_a .Wrap (_aafg ,_baab ,"");};_eafb =_eab .X ;_bcbd =_eab .Y ;};return _bfgf ,nil ;};func (_agce *Bitmaps )selectByIndicator (_fccgg *_b .NumSlice )(_babbe *Bitmaps ,_bfec error ){const _bfcbe ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _agce ==nil {return nil ,_a .Error (_bfcbe ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _fccgg ==nil {return nil ,_a .Error (_bfcbe ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_agce .Values )==0{return _agce ,nil ;};if len (*_fccgg )!=len (_agce .Values ){return nil ,_a .Errorf (_bfcbe ,"\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 (*_fccgg ),len (_agce .Values ));};var _agbca ,_bfagb ,_dadg int ;for _bfagb =0;_bfagb < len (*_fccgg );_bfagb ++{if _agbca ,_bfec =_fccgg .GetInt (_bfagb );_bfec !=nil {return nil ,_a .Wrap (_bfec ,_bfcbe ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _agbca ==1{_dadg ++;};};if _dadg ==len (_agce .Values ){return _agce ,nil ;};_babbe =&Bitmaps {};_bfadc :=len (_agce .Values )==len (_agce .Boxes );for _bfagb =0;_bfagb < len (*_fccgg );_bfagb ++{if _agbca =int ((*_fccgg )[_bfagb ]);_agbca ==0{continue ;};_babbe .Values =append (_babbe .Values ,_agce .Values [_bfagb ]);if _bfadc {_babbe .Boxes =append (_babbe .Boxes ,_agce .Boxes [_bfagb ]);};};return _babbe ,nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _cgbg (d ,s ,hSize ,vSize )};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};type Color int ;var _ _ae .Interface =&ClassedPoints {};func (_gacd *ClassedPoints )Less (i ,j int )bool {return _gacd ._afbf (i ,j )};type shift int ;func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dgbee float64 ,_cgga error ){const _afca ="\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 _dgbee ,_a .Error (_afca ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _dgbee ,_a .Error (_afca ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if area1 ==0||area2 ==0{return _dgbee ,_a .Error (_afca ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_eac ,_ecd :=bm1 .Width ,bm1 .Height ;_fde ,_afeb :=bm2 .Width ,bm2 .Height ;if _acgf (_eac -_fde )> maxDiffW {return 0,nil ;};if _acgf (_ecd -_afeb )> maxDiffH {return 0,nil ;};var _dbad ,_bdge int ;if delX >=0{_dbad =int (delX +0.5);}else {_dbad =int (delX -0.5);};if delY >=0{_bdge =int (delY +0.5);}else {_bdge =int (delY -0.5);};_eebdd :=bm1 .createTemplate ();if _cgga =_eebdd .RasterOperation (_dbad ,_bdge ,_fde ,_afeb ,PixSrc ,bm2 ,0,0);_cgga !=nil {return _dgbee ,_a .Wrap (_cgga ,_afca ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _cgga =_eebdd .RasterOperation (0,0,_eac ,_ecd ,PixSrcAndDst ,bm1 ,0,0);_cgga !=nil {return _dgbee ,_a .Wrap (_cgga ,_afca ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_cadg :=_eebdd .countPixels ();_dgbee =float64 (_cadg )*float64 (_cadg )/(float64 (area1 )*float64 (area2 ));return _dgbee ,nil ;};func (_cbe *Bitmap )setEightBytes (_ecag int ,_dcaa uint64 )error {_abc :=_cbe .RowStride -(_ecag %_cbe .RowStride );if _cbe .RowStride !=_cbe .Width >>3{_abc --;};if _abc >=8{return _cbe .setEightFullBytes (_ecag ,_dcaa );};return _cbe .setEightPartlyBytes (_ecag ,_abc ,_dcaa );};func (_egfbg *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _ebgb (_egfbg ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_ddbbf MorphProcess )getWidthHeight ()(_dedgd ,_bgbcf int ){return _ddbbf .Arguments [0],_ddbbf .Arguments [1];};func _daac (_fea ,_dgec *Bitmap ,_efa int ,_cca []byte ,_fdf int )(_egc error ){const _bcb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_bbf ,_ecf ,_be ,_bge ,_cdb ,_cdf ,_ddbc ,_fbf int ;_fcgd ,_ega ,_gcg ,_fbfg uint32 ;_eef ,_fafe byte ;_ed uint16 ;);_bgd :=make ([]byte ,4);_egea :=make ([]byte ,4);for _be =0;_be < _fea .Height -1;_be ,_bge =_be +2,_bge +1{_bbf =_be *_fea .RowStride ;_ecf =_bge *_dgec .RowStride ;for _cdb ,_cdf =0,0;_cdb < _fdf ;_cdb ,_cdf =_cdb +4,_cdf +1{for _ddbc =0;_ddbc < 4;_ddbc ++{_fbf =_bbf +_cdb +_ddbc ;if _fbf <=len (_fea .Data )-1&&_fbf < _bbf +_fea .RowStride {_bgd [_ddbc ]=_fea .Data [_fbf ];}else {_bgd [_ddbc ]=0x00;};_fbf =_bbf +_fea .RowStride +_cdb +_ddbc ;if _fbf <=len (_fea .Data )-1&&_fbf < _bbf +(2*_fea .RowStride ){_egea [_ddbc ]=_fea .Data [_fbf ];}else {_egea [_ddbc ]=0x00;};};_fcgd =_ag .BigEndian .Uint32 (_bgd );_ega =_ag .BigEndian .Uint32 (_egea );_gcg =_fcgd &_ega ;_gcg |=_gcg <<1;_fbfg =_fcgd |_ega ;_fbfg &=_fbfg <<1;_ega =_gcg |_fbfg ;_ega &=0xaaaaaaaa;_fcgd =_ega |(_ega <<7);_eef =byte (_fcgd >>24);_fafe =byte ((_fcgd >>8)&0xff);_fbf =_ecf +_cdf ;if _fbf +1==len (_dgec .Data )-1||_fbf +1>=_ecf +_dgec .RowStride {if _egc =_dgec .SetByte (_fbf ,_cca [_eef ]);_egc !=nil {return _a .Wrapf (_egc ,_bcb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fbf );};}else {_ed =(uint16 (_cca [_eef ])<<8)|uint16 (_cca [_fafe ]);if _egc =_dgec .setTwoBytes (_fbf ,_ed );_egc !=nil {return _a .Wrapf (_egc ,_bcb ,"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",_fbf );};_cdf ++;};};};return nil ;};var _bddg =[5]int {1,2,3,0,4};func (_cadde Points )GetGeometry (i int )(_gbbe ,_gfcg float32 ,_gfgge error ){if i > len (_cadde )-1{return 0,0,_a .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 );};_fgeb :=_cadde [i ];return _fgeb .X ,_fgeb .Y ,nil ;};func _cabe (_bba ,_cdaf *Bitmap ,_gaee CombinationOperator )*Bitmap {_ccc :=New (_bba .Width ,_bba .Height );for _gagd :=0;_gagd < len (_ccc .Data );_gagd ++{_ccc .Data [_gagd ]=_gbgd (_bba .Data [_gagd ],_cdaf .Data [_gagd ],_gaee );};return _ccc ;};func (_ddaa *Bitmaps )HeightSorter ()func (_ebaf ,_ggbga int )bool {return func (_ffgec ,_dbbf int )bool {_geafc :=_ddaa .Values [_ffgec ].Height < _ddaa .Values [_dbbf ].Height ;_bf .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_ddaa .Values [_ffgec ].Height ,_ddaa .Values [_dbbf ].Height ,_geafc );return _geafc ;};};func _egef (_cbdd *Bitmap ,_ffag *_b .Stack ,_dcdee ,_dece ,_gacf int )(_edaf *_ff .Rectangle ,_bcag error ){const _agcf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _cbdd ==nil {return nil ,_a .Error (_agcf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ffag ==nil {return nil ,_a .Error (_agcf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _gacf {case 4:if _edaf ,_bcag =_cbfgf (_cbdd ,_ffag ,_dcdee ,_dece );_bcag !=nil {return nil ,_a .Wrap (_bcag ,_agcf ,"");};return _edaf ,nil ;case 8:if _edaf ,_bcag =_bfgce (_cbdd ,_ffag ,_dcdee ,_dece );_bcag !=nil {return nil ,_a .Wrap (_bcag ,_agcf ,"");};return _edaf ,nil ;default:return nil ,_a .Errorf (_agcf ,"\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",_gacf );};};type Points []Point ;func (_fgdd *Boxes )Add (box *_ff .Rectangle )error {if _fgdd ==nil {return _a .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");};*_fgdd =append (*_fgdd ,box );return nil ;};func _bgab (_eedc *Bitmap ,_bdbc ,_gbec ,_bcaa ,_adbd int ,_befc RasterOperator ,_gfbe *Bitmap ,_bbcf ,_acbg int )error {var (_cgad bool ;_cgfcb bool ;_adfc int ;_bcfa int ;_fccc int ;_eaaa bool ;_gedb byte ;_dgbb int ;_aade int ;_dfb int ;_cgbf ,_gfa int ;);_bfeg :=8-(_bdbc &7);_fdgf :=_ccda [_bfeg ];_dgdcb :=_eedc .RowStride *_gbec +(_bdbc >>3);_fbdg :=_gfbe .RowStride *_acbg +(_bbcf >>3);if _bcaa < _bfeg {_cgad =true ;_fdgf &=_cdfe [8-_bfeg +_bcaa ];};if !_cgad {_adfc =(_bcaa -_bfeg )>>3;if _adfc > 0{_cgfcb =true ;_bcfa =_dgdcb +1;_fccc =_fbdg +1;};};_dgbb =(_bdbc +_bcaa )&7;if !(_cgad ||_dgbb ==0){_eaaa =true ;_gedb =_cdfe [_dgbb ];_aade =_dgdcb +1+_adfc ;_dfb =_fbdg +1+_adfc ;};switch _befc {case PixSrc :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],_gfbe .Data [_fbdg ],_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]=_gfbe .Data [_fccc +_gfa ];};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],_gfbe .Data [_dfb ],_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixNotSrc :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],^_gfbe .Data [_fbdg ],_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]=^_gfbe .Data [_fccc +_gfa ];};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],^_gfbe .Data [_dfb ],_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixSrcOrDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],_gfbe .Data [_fbdg ]|_eedc .Data [_dgdcb ],_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]|=_gfbe .Data [_fccc +_gfa ];};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],_gfbe .Data [_dfb ]|_eedc .Data [_aade ],_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixSrcAndDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],_gfbe .Data [_fbdg ]&_eedc .Data [_dgdcb ],_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]&=_gfbe .Data [_fccc +_gfa ];};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],_gfbe .Data [_dfb ]&_eedc .Data [_aade ],_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixSrcXorDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],_gfbe .Data [_fbdg ]^_eedc .Data [_dgdcb ],_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]^=_gfbe .Data [_fccc +_gfa ];};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],_gfbe .Data [_dfb ]^_eedc .Data [_aade ],_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixNotSrcOrDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],^(_gfbe .Data [_fbdg ])|_eedc .Data [_dgdcb ],_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]|=^(_gfbe .Data [_fccc +_gfa ]);};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],^(_gfbe .Data [_dfb ])|_eedc .Data [_aade ],_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixNotSrcAndDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],^(_gfbe .Data [_fbdg ])&_eedc .Data [_dgdcb ],_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]&=^_gfbe .Data [_fccc +_gfa ];};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],^(_gfbe .Data [_dfb ])&_eedc .Data [_aade ],_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixSrcOrNotDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],_gfbe .Data [_fbdg ]|^(_eedc .Data [_dgdcb ]),_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]=_gfbe .Data [_fccc +_gfa ]|^(_eedc .Data [_bcfa +_gfa ]);};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],_gfbe .Data [_dfb ]|^(_eedc .Data [_aade ]),_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixSrcAndNotDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],_gfbe .Data [_fbdg ]&^(_eedc .Data [_dgdcb ]),_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]=_gfbe .Data [_fccc +_gfa ]&^(_eedc .Data [_bcfa +_gfa ]);};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],_gfbe .Data [_dfb ]&^(_eedc .Data [_aade ]),_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixNotPixSrcOrDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],^(_gfbe .Data [_fbdg ]|_eedc .Data [_dgdcb ]),_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]=^(_gfbe .Data [_fccc +_gfa ]|_eedc .Data [_bcfa +_gfa ]);};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],^(_gfbe .Data [_dfb ]|_eedc .Data [_aade ]),_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixNotPixSrcAndDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],^(_gfbe .Data [_fbdg ]&_eedc .Data [_dgdcb ]),_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]=^(_gfbe .Data [_fccc +_gfa ]&_eedc .Data [_bcfa +_gfa ]);};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],^(_gfbe .Data [_dfb ]&_eedc .Data [_aade ]),_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};case PixNotPixSrcXorDst :for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_dgdcb ]=_cdag (_eedc .Data [_dgdcb ],^(_gfbe .Data [_fbdg ]^_eedc .Data [_dgdcb ]),_fdgf );_dgdcb +=_eedc .RowStride ;_fbdg +=_gfbe .RowStride ;};if _cgfcb {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{for _gfa =0;_gfa < _adfc ;_gfa ++{_eedc .Data [_bcfa +_gfa ]=^(_gfbe .Data [_fccc +_gfa ]^_eedc .Data [_bcfa +_gfa ]);};_bcfa +=_eedc .RowStride ;_fccc +=_gfbe .RowStride ;};};if _eaaa {for _cgbf =0;_cgbf < _adbd ;_cgbf ++{_eedc .Data [_aade ]=_cdag (_eedc .Data [_aade ],^(_gfbe .Data [_dfb ]^_eedc .Data [_aade ]),_gedb );_aade +=_eedc .RowStride ;_dfb +=_gfbe .RowStride ;};};default:_bf .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",_befc );return _a .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");};return nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _gbgd (oldByte ,newByte ,op );};func _cbfgf (_cfge *Bitmap ,_gbbf *_b .Stack ,_cbdc ,_egdf int )(_dbaf *_ff .Rectangle ,_bgdgd error ){const _bbaa ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _cfge ==nil {return nil ,_a .Error (_bbaa ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _gbbf ==nil {return nil ,_a .Error (_bbaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_ffgeg ,_bbbgb :=_cfge .Width ,_cfge .Height ;_eadb :=_ffgeg -1;_cgbff :=_bbbgb -1;if _cbdc < 0||_cbdc > _eadb ||_egdf < 0||_egdf > _cgbff ||!_cfge .GetPixel (_cbdc ,_egdf ){return nil ,nil ;};var _bebg *_ff .Rectangle ;_bebg ,_bgdgd =Rect (100000,100000,0,0);if _bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"");};if _bgdgd =_cdeca (_gbbf ,_cbdc ,_cbdc ,_egdf ,1,_cgbff ,_bebg );_bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bgdgd =_cdeca (_gbbf ,_cbdc ,_cbdc ,_egdf +1,-1,_cgbff ,_bebg );_bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_bebg .Min .X ,_bebg .Max .X =_cbdc ,_cbdc ;_bebg .Min .Y ,_bebg .Max .Y =_egdf ,_egdf ;var (_ffce *fillSegment ;_efdf int ;);for _gbbf .Len ()> 0{if _ffce ,_bgdgd =_dgaf (_gbbf );_bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"");};_egdf =_ffce ._bdbb ;for _cbdc =_ffce ._baecb ;_cbdc >=0&&_cfge .GetPixel (_cbdc ,_egdf );_cbdc --{if _bgdgd =_cfge .SetPixel (_cbdc ,_egdf ,0);_bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"");};};if _cbdc >=_ffce ._baecb {for _cbdc ++;_cbdc <=_ffce ._ggcee &&_cbdc <=_eadb &&!_cfge .GetPixel (_cbdc ,_egdf );_cbdc ++{};_efdf =_cbdc ;if !(_cbdc <=_ffce ._ggcee &&_cbdc <=_eadb ){continue ;};}else {_efdf =_cbdc +1;if _efdf < _ffce ._baecb -1{if _bgdgd =_cdeca (_gbbf ,_efdf ,_ffce ._baecb -1,_ffce ._bdbb ,-_ffce ._acae ,_cgbff ,_bebg );_bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_cbdc =_ffce ._baecb +1;};for {for ;_cbdc <=_eadb &&_cfge .GetPixel (_cbdc ,_egdf );_cbdc ++{if _bgdgd =_cfge .SetPixel (_cbdc ,_egdf ,0);_bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bgdgd =_cdeca (_gbbf ,_efdf ,_cbdc -1,_ffce ._bdbb ,_ffce ._acae ,_cgbff ,_bebg );_bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cbdc > _ffce ._ggcee +1{if _bgdgd =_cdeca (_gbbf ,_ffce ._ggcee +1,_cbdc -1,_ffce ._bdbb ,-_ffce ._acae ,_cgbff ,_bebg );_bgdgd !=nil {return nil ,_a .Wrap (_bgdgd ,_bbaa ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _cbdc ++;_cbdc <=_ffce ._ggcee &&_cbdc <=_eadb &&!_cfge .GetPixel (_cbdc ,_egdf );_cbdc ++{};_efdf =_cbdc ;if !(_cbdc <=_ffce ._ggcee &&_cbdc <=_eadb ){break ;};};};_bebg .Max .X ++;_bebg .Max .Y ++;return _bebg ,nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_ff .Rectangle ;};func _cdag (_aadeb ,_ggcg ,_gcccd byte )byte {return (_aadeb &^(_gcccd ))|(_ggcg &_gcccd )};func _gbcc (_cbfa ,_dbade ,_aafe *Bitmap ,_gbba int )(*Bitmap ,error ){const _bfga ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _dbade ==nil {return nil ,_a .Error (_bfga ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _aafe ==nil {return nil ,_a .Error (_bfga ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gbba !=4&&_gbba !=8{return nil ,_a .Error (_bfga ,"\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 _cfbb error ;_cbfa ,_cfbb =_afa (_cbfa ,_dbade );if _cfbb !=nil {return nil ,_a .Wrap (_cfbb ,_bfga ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_decb :=_dbade .createTemplate ();_aafe .setPadBits (0);for _aeeb :=0;_aeeb < _gaab ;_aeeb ++{_decb ,_cfbb =_afa (_decb ,_cbfa );if _cfbb !=nil {return nil ,_a .Wrapf (_cfbb ,_bfga ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_aeeb );};if _cfbb =_bbge (_cbfa ,_aafe ,_gbba );_cfbb !=nil {return nil ,_a .Wrapf (_cfbb ,_bfga ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_aeeb );};if _decb .Equals (_cbfa ){break ;};};return _cbfa ,nil ;};func (_ggbd *Bitmap )nextOnPixelLow (_bcf ,_edd ,_acabe ,_aefa ,_fdd int )(_gdea _ff .Point ,_aacc bool ,_aeag error ){const _fafc ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_eddd int ;_egfd byte ;);_beac :=_fdd *_acabe ;_acca :=_beac +(_aefa /8);if _egfd ,_aeag =_ggbd .GetByte (_acca );_aeag !=nil {return _gdea ,false ,_a .Wrap (_aeag ,_fafc ,"\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 _egfd !=0{_ggc :=_aefa -(_aefa %8)+7;for _eddd =_aefa ;_eddd <=_ggc &&_eddd < _bcf ;_eddd ++{if _ggbd .GetPixel (_eddd ,_fdd ){_gdea .X =_eddd ;_gdea .Y =_fdd ;return _gdea ,true ,nil ;};};};_cbaa :=(_aefa /8)+1;_eddd =8*_cbaa ;var _gbe int ;for _acca =_beac +_cbaa ;_eddd < _bcf ;_acca ,_eddd =_acca +1,_eddd +8{if _egfd ,_aeag =_ggbd .GetByte (_acca );_aeag !=nil {return _gdea ,false ,_a .Wrap (_aeag ,_fafc ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _egfd ==0{continue ;};for _gbe =0;_gbe < 8&&_eddd < _bcf ;_gbe ,_eddd =_gbe +1,_eddd +1{if _ggbd .GetPixel (_eddd ,_fdd ){_gdea .X =_eddd ;_gdea .Y =_fdd ;return _gdea ,true ,nil ;};};};for _cgfe :=_fdd +1;_cgfe < _edd ;_cgfe ++{_beac =_cgfe *_acabe ;for _acca ,_eddd =_beac ,0;_eddd < _bcf ;_acca ,_eddd =_acca +1,_eddd +8{if _egfd ,_aeag =_ggbd .GetByte (_acca );_aeag !=nil {return _gdea ,false ,_a .Wrap (_aeag ,_fafc ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _egfd ==0{continue ;};for _gbe =0;_gbe < 8&&_eddd < _bcf ;_gbe ,_eddd =_gbe +1,_eddd +1{if _ggbd .GetPixel (_eddd ,_cgfe ){_gdea .X =_eddd ;_gdea .Y =_cgfe ;return _gdea ,true ,nil ;};};};};return _gdea ,false ,nil ;};func _ade (_dgb ,_dbc *Bitmap ,_efac int ,_dce []byte ,_ffbdc int )(_ddc error ){const _gbf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_ded ,_ecg ,_gbg ,_edg ,_gcbc ,_efe ,_acc ,_caae int ;_cef ,_aab uint32 ;_deg ,_bfd byte ;_gfe uint16 ;);_aef :=make ([]byte ,4);_faee :=make ([]byte ,4);for _gbg =0;_gbg < _dgb .Height -1;_gbg ,_edg =_gbg +2,_edg +1{_ded =_gbg *_dgb .RowStride ;_ecg =_edg *_dbc .RowStride ;for _gcbc ,_efe =0,0;_gcbc < _ffbdc ;_gcbc ,_efe =_gcbc +4,_efe +1{for _acc =0;_acc < 4;_acc ++{_caae =_ded +_gcbc +_acc ;if _caae <=len (_dgb .Data )-1&&_caae < _ded +_dgb .RowStride {_aef [_acc ]=_dgb .Data [_caae ];}else {_aef [_acc ]=0x00;};_caae =_ded +_dgb .RowStride +_gcbc +_acc ;if _caae <=len (_dgb .Data )-1&&_caae < _ded +(2*_dgb .RowStride ){_faee [_acc ]=_dgb .Data [_caae ];}else {_faee [_acc ]=0x00;};};_cef =_ag .BigEndian .Uint32 (_aef );_aab =_ag .BigEndian .Uint32 (_faee );_aab &=_cef ;_aab &=_aab <<1;_aab &=0xaaaaaaaa;_cef =_aab |(_aab <<7);_deg =byte (_cef >>24);_bfd =byte ((_cef >>8)&0xff);_caae =_ecg +_efe ;if _caae +1==len (_dbc .Data )-1||_caae +1>=_ecg +_dbc .RowStride {_dbc .Data [_caae ]=_dce [_deg ];if _ddc =_dbc .SetByte (_caae ,_dce [_deg ]);_ddc !=nil {return _a .Wrapf (_ddc ,_gbf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_caae );};}else {_gfe =(uint16 (_dce [_deg ])<<8)|uint16 (_dce [_bfd ]);if _ddc =_dbc .setTwoBytes (_caae ,_gfe );_ddc !=nil {return _a .Wrapf (_ddc ,_gbf ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_caae );};_efe ++;};};};return nil ;};func (_gcfd *ClassedPoints )xSortFunction ()func (_egbga int ,_cgdd int )bool {return func (_afbb ,_eaba int )bool {return _gcfd .XAtIndex (_afbb )< _gcfd .XAtIndex (_eaba )};};func (_cea *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _bead ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _cea ==nil {return nil ,_a .Error (_bead ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_a .Error (_bead ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_ebdad :=len (_cea .Values );_cfff :=&Bitmaps {Values :make ([]*Bitmap ,_ebdad ),Boxes :make ([]*_ff .Rectangle ,_ebdad )};var (_acfbg ,_bdgg *Bitmap ;_caaae *_ff .Rectangle ;_efbge error ;);for _aaeb :=0;_aaeb < _ebdad ;_aaeb ++{if _acfbg ,_efbge =_cea .GetBitmap (_aaeb );_efbge !=nil {return nil ,_a .Wrap (_efbge ,_bead ,"");};if _caaae ,_efbge =_cea .GetBox (_aaeb );_efbge !=nil {return nil ,_a .Wrap (_efbge ,_bead ,"");};if _bdgg ,_efbge =s .clipRectangle (_caaae ,nil );_efbge !=nil {return nil ,_a .Wrap (_efbge ,_bead ,"");};if _bdgg ,_efbge =_bdgg .And (_acfbg );_efbge !=nil {return nil ,_a .Wrap (_efbge ,_bead ,"");};_cfff .Values [_aaeb ]=_bdgg ;_cfff .Boxes [_aaeb ]=_caaae ;};return _cfff ,nil ;};func (_acd *Bitmap )SetDefaultPixel (){for _efee :=range _acd .Data {_acd .Data [_efee ]=byte (0xff);};};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func _caed (_bcda ,_bbade *Bitmap ,_bfce ,_fdgg int )(*Bitmap ,error ){const _feag ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _bbade ==nil {return nil ,_a .Error (_feag ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bfce < 1||_fdgg < 1{return nil ,_a .Error (_feag ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _bfce ==1&&_fdgg ==1{return _afa (_bcda ,_bbade );};if MorphBC ==SymmetricMorphBC {_ffcgd ,_ggfc :=_dfec (_bcda ,_bbade ,_bfce ,_fdgg );if _ggfc !=nil {return nil ,_a .Wrap (_ggfc ,_feag ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _ffcgd ,nil ;};_bdgef :=_baba (_bfce /2,_fdgg /2);_cged :=8*((_bdgef +7)/8);_gdgag ,_dcgg :=_bbade .AddBorder (_cged ,0);if _dcgg !=nil {return nil ,_a .Wrapf (_dcgg ,_feag ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_cged );};var _fdfc ,_afbga *Bitmap ;if _bfce ==1||_fdgg ==1{_egad :=SelCreateBrick (_fdgg ,_bfce ,_fdgg /2,_bfce /2,SelHit );_fdfc ,_dcgg =_bgedb (nil ,_gdgag ,_egad );if _dcgg !=nil {return nil ,_a .Wrap (_dcgg ,_feag ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_gdee :=SelCreateBrick (1,_bfce ,0,_bfce /2,SelHit );_gade ,_dabd :=_babaa (nil ,_gdgag ,_gdee );if _dabd !=nil {return nil ,_a .Wrap (_dabd ,_feag ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_ffbbc :=SelCreateBrick (_fdgg ,1,_fdgg /2,0,SelHit );_fdfc ,_dabd =_babaa (nil ,_gade ,_ffbbc );if _dabd !=nil {return nil ,_a .Wrap (_dabd ,_feag ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_dabd =_gafa (_gade ,_fdfc ,_gdee );_dabd !=nil {return nil ,_a .Wrap (_dabd ,_feag ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_dabd =_gafa (_fdfc ,_gade ,_ffbbc );_dabd !=nil {return nil ,_a .Wrap (_dabd ,_feag ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");};};if _afbga ,_dcgg =_fdfc .RemoveBorder (_cged );_dcgg !=nil {return nil ,_a .Wrap (_dcgg ,_feag ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _bcda ==nil {return _afbga ,nil ;};if _ ,_dcgg =_afa (_bcda ,_afbga );_dcgg !=nil {return nil ,_dcgg ;};return _bcda ,nil ;};func (_eafc *Bitmaps )CountPixels ()*_b .NumSlice {_ffde :=&_b .NumSlice {};for _ ,_cfcdc :=range _eafc .Values {_ffde .AddInt (_cfcdc .CountPixels ());};return _ffde ;};func _bbge (_gafd *Bitmap ,_eacff *Bitmap ,_dccb int )(_ecedg error ){const _ecfe ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_cgdg :=_ebcf (_gafd .Height ,_eacff .Height );_badg :=_ebcf (_gafd .RowStride ,_eacff .RowStride );switch _dccb {case 4:_ecedg =_fabf (_gafd ,_eacff ,_cgdg ,_badg );case 8:_ecedg =_dgee (_gafd ,_eacff ,_cgdg ,_badg );default:return _a .Errorf (_ecfe ,"\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",_dccb );};if _ecedg !=nil {return _a .Wrap (_ecedg ,_ecfe ,"");};return nil ;};func _gdedc ()[]int {_cefb :=make ([]int ,256);_cefb [0]=0;_cefb [1]=7;var _ebbbe int ;for _ebbbe =2;_ebbbe < 4;_ebbbe ++{_cefb [_ebbbe ]=_cefb [_ebbbe -2]+6;};for _ebbbe =4;_ebbbe < 8;_ebbbe ++{_cefb [_ebbbe ]=_cefb [_ebbbe -4]+5;};for _ebbbe =8;_ebbbe < 16;_ebbbe ++{_cefb [_ebbbe ]=_cefb [_ebbbe -8]+4;};for _ebbbe =16;_ebbbe < 32;_ebbbe ++{_cefb [_ebbbe ]=_cefb [_ebbbe -16]+3;};for _ebbbe =32;_ebbbe < 64;_ebbbe ++{_cefb [_ebbbe ]=_cefb [_ebbbe -32]+2;};for _ebbbe =64;_ebbbe < 128;_ebbbe ++{_cefb [_ebbbe ]=_cefb [_ebbbe -64]+1;};for _ebbbe =128;_ebbbe < 256;_ebbbe ++{_cefb [_ebbbe ]=_cefb [_ebbbe -128];};return _cefb ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_fbac bool ,_ffgc error ){const _ddd ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_dfac ,_dcfa :=p1 .Width ,p1 .Height ;_befd ,_ebbb :=p3 .Width ,p3 .Height ;if _b .Abs (_dfac -_befd )> maxDiffW {return false ,nil ;};if _b .Abs (_dcfa -_ebbb )> maxDiffH {return false ,nil ;};_dbag :=int (float32 (area1 )*(1.0-rank )+0.5);_gdga :=int (float32 (area3 )*(1.0-rank )+0.5);var _dcac ,_cegb int ;if delX >=0{_dcac =int (delX +0.5);}else {_dcac =int (delX -0.5);};if delY >=0{_cegb =int (delY +0.5);}else {_cegb =int (delY -0.5);};_fecf :=p1 .CreateTemplate ();if _ffgc =_fecf .RasterOperation (0,0,_dfac ,_dcfa ,PixSrc ,p1 ,0,0);_ffgc !=nil {return false ,_a .Wrap (_ffgc ,_ddd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ffgc =_fecf .RasterOperation (_dcac ,_cegb ,_dfac ,_dcfa ,PixNotSrcAndDst ,p4 ,0,0);_ffgc !=nil {return false ,_a .Wrap (_ffgc ,_ddd ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_fbac ,_ffgc =_fecf .ThresholdPixelSum (_dbag ,tab8 );if _ffgc !=nil {return false ,_a .Wrap (_ffgc ,_ddd ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _fbac {return false ,nil ;};if _ffgc =_fecf .RasterOperation (_dcac ,_cegb ,_befd ,_ebbb ,PixSrc ,p3 ,0,0);_ffgc !=nil {return false ,_a .Wrap (_ffgc ,_ddd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ffgc =_fecf .RasterOperation (0,0,_befd ,_ebbb ,PixNotSrcAndDst ,p2 ,0,0);_ffgc !=nil {return false ,_a .Wrap (_ffgc ,_ddd ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_fbac ,_ffgc =_fecf .ThresholdPixelSum (_gdga ,tab8 );if _ffgc !=nil {return false ,_a .Wrap (_ffgc ,_ddd ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_fbac ,nil ;};type byHeight Bitmaps ;func _gfcf (_adgc *Bitmap ,_gbdec ,_ecea ,_cegc ,_daae int ,_dfaa RasterOperator ,_cdda *Bitmap ,_eddc ,_adde int )error {var (_dbfb byte ;_ffdc int ;_eaaf int ;_gdcfg ,_bcdb int ;_dggd ,_cacd int ;);_cbfg :=_cegc >>3;_acge :=_cegc &7;if _acge > 0{_dbfb =_cdfe [_acge ];};_ffdc =_cdda .RowStride *_adde +(_eddc >>3);_eaaf =_adgc .RowStride *_ecea +(_gbdec >>3);switch _dfaa {case PixSrc :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]=_cdda .Data [_gdcfg ];_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],_cdda .Data [_gdcfg ],_dbfb );};};case PixNotSrc :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]=^(_cdda .Data [_gdcfg ]);_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],^_cdda .Data [_gdcfg ],_dbfb );};};case PixSrcOrDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]|=_cdda .Data [_gdcfg ];_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],_cdda .Data [_gdcfg ]|_adgc .Data [_bcdb ],_dbfb );};};case PixSrcAndDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]&=_cdda .Data [_gdcfg ];_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],_cdda .Data [_gdcfg ]&_adgc .Data [_bcdb ],_dbfb );};};case PixSrcXorDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]^=_cdda .Data [_gdcfg ];_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],_cdda .Data [_gdcfg ]^_adgc .Data [_bcdb ],_dbfb );};};case PixNotSrcOrDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]|=^(_cdda .Data [_gdcfg ]);_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],^(_cdda .Data [_gdcfg ])|_adgc .Data [_bcdb ],_dbfb );};};case PixNotSrcAndDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]&=^(_cdda .Data [_gdcfg ]);_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],^(_cdda .Data [_gdcfg ])&_adgc .Data [_bcdb ],_dbfb );};};case PixSrcOrNotDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]=_cdda .Data [_gdcfg ]|^(_adgc .Data [_bcdb ]);_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],_cdda .Data [_gdcfg ]|^(_adgc .Data [_bcdb ]),_dbfb );};};case PixSrcAndNotDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]=_cdda .Data [_gdcfg ]&^(_adgc .Data [_bcdb ]);_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],_cdda .Data [_gdcfg ]&^(_adgc .Data [_bcdb ]),_dbfb );};};case PixNotPixSrcOrDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]=^(_cdda .Data [_gdcfg ]|_adgc .Data [_bcdb ]);_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],^(_cdda .Data [_gdcfg ]|_adgc .Data [_bcdb ]),_dbfb );};};case PixNotPixSrcAndDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]=^(_cdda .Data [_gdcfg ]&_adgc .Data [_bcdb ]);_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],^(_cdda .Data [_gdcfg ]&_adgc .Data [_bcdb ]),_dbfb );};};case PixNotPixSrcXorDst :for _dggd =0;_dggd < _daae ;_dggd ++{_gdcfg =_ffdc +_dggd *_cdda .RowStride ;_bcdb =_eaaf +_dggd *_adgc .RowStride ;for _cacd =0;_cacd < _cbfg ;_cacd ++{_adgc .Data [_bcdb ]=^(_cdda .Data [_gdcfg ]^_adgc .Data [_bcdb ]);_bcdb ++;_gdcfg ++;};if _acge > 0{_adgc .Data [_bcdb ]=_cdag (_adgc .Data [_bcdb ],^(_cdda .Data [_gdcfg ]^_adgc .Data [_bcdb ]),_dbfb );};};default:_bf .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",_dfaa );return _a .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 _gbeee (_efge ,_adab *Bitmap ,_gdda ,_cccgb int )(*Bitmap ,error ){const _abg ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _adab ==nil {return nil ,_a .Error (_abg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gdda < 1&&_cccgb < 1{return nil ,_a .Error (_abg ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _gdda ==1&&_cccgb ==1{return _adab .Copy (),nil ;};if _gdda ==1||_cccgb ==1{var _gdbc error ;_bcba :=SelCreateBrick (_cccgb ,_gdda ,_cccgb /2,_gdda /2,SelHit );_efge ,_gdbc =_dgae (_efge ,_adab ,_bcba );if _gdbc !=nil {return nil ,_a .Wrap (_gdbc ,_abg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _efge ,nil ;};_feeg :=SelCreateBrick (1,_gdda ,0,_gdda /2,SelHit );_eedf :=SelCreateBrick (_cccgb ,1,_cccgb /2,0,SelHit );_gdffd ,_faeb :=_gafa (nil ,_adab ,_feeg );if _faeb !=nil {return nil ,_a .Wrap (_faeb ,_abg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_efge ,_faeb =_gafa (_efge ,_gdffd ,_eedf );if _faeb !=nil {return nil ,_a .Wrap (_faeb ,_abg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_faeb =_babaa (_gdffd ,_efge ,_feeg );if _faeb !=nil {return nil ,_a .Wrap (_faeb ,_abg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_ ,_faeb =_babaa (_efge ,_gdffd ,_eedf );if _faeb !=nil {return nil ,_a .Wrap (_faeb ,_abg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _efge ,nil ;};func (_gad *Bitmap )connComponentsBitmapsBB (_geb *Bitmaps ,_fbgd int )(_gdcd *Boxes ,_bdg error ){const _gded ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _fbgd !=4&&_fbgd !=8{return nil ,_a .Error (_gded ,"\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 _geb ==nil {return nil ,_a .Error (_gded ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_geb .Values )> 0{return nil ,_a .Error (_gded ,"\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 _gad .Zero (){return &Boxes {},nil ;};var (_fgb ,_egbg ,_debg ,_cfa *Bitmap ;);_gad .setPadBits (0);if _fgb ,_bdg =_afa (nil ,_gad );_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"\u0062\u006d\u0031");};if _egbg ,_bdg =_afa (nil ,_gad );_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"\u0062\u006d\u0032");};_gdfb :=&_b .Stack {};_gdfb .Aux =&_b .Stack {};_gdcd =&Boxes {};var (_dgeg ,_begd int ;_dbec _ff .Point ;_accd bool ;_aggd *_ff .Rectangle ;);for {if _dbec ,_accd ,_bdg =_fgb .nextOnPixel (_dgeg ,_begd );_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"");};if !_accd {break ;};if _aggd ,_bdg =_egef (_fgb ,_gdfb ,_dbec .X ,_dbec .Y ,_fbgd );_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"");};if _bdg =_gdcd .Add (_aggd );_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"");};if _debg ,_bdg =_fgb .clipRectangle (_aggd ,nil );_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"\u0062\u006d\u0033");};if _cfa ,_bdg =_egbg .clipRectangle (_aggd ,nil );_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"\u0062\u006d\u0034");};if _ ,_bdg =_gfbf (_debg ,_debg ,_cfa );_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _bdg =_egbg .RasterOperation (_aggd .Min .X ,_aggd .Min .Y ,_aggd .Dx (),_aggd .Dy (),PixSrcXorDst ,_debg ,0,0);_bdg !=nil {return nil ,_a .Wrap (_bdg ,_gded ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_geb .AddBitmap (_debg );_dgeg =_dbec .X ;_begd =_dbec .Y ;};_geb .Boxes =*_gdcd ;return _gdcd ,nil ;};func _eda ()(_cbb []byte ){_cbb =make ([]byte ,256);for _abe :=0;_abe < 256;_abe ++{_bgb :=byte (_abe );_cbb [_bgb ]=(_bgb &0x01)|((_bgb &0x04)>>1)|((_bgb &0x10)>>2)|((_bgb &0x40)>>3)|((_bgb &0x02)<<3)|((_bgb &0x08)<<2)|((_bgb &0x20)<<1)|(_bgb &0x80);};return _cbb ;};func (_dadff *Bitmap )resizeImageData (_fdbd *Bitmap )error {if _fdbd ==nil {return _a .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 _dadff .SizesEqual (_fdbd ){return nil ;};_dadff .Data =make ([]byte ,len (_fdbd .Data ));_dadff .Width =_fdbd .Width ;_dadff .Height =_fdbd .Height ;_dadff .RowStride =_fdbd .RowStride ;return nil ;};func _bgedb (_dgce ,_ddce *Bitmap ,_cgba *Selection )(*Bitmap ,error ){const _aabe ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _egfb error ;if _dgce ,_egfb =_eafa (_dgce ,_ddce ,_cgba );_egfb !=nil {return nil ,_egfb ;};_debc ,_egfb :=_babaa (nil ,_ddce ,_cgba );if _egfb !=nil {return nil ,_a .Wrap (_egfb ,_aabe ,"");};if _ ,_egfb =_gafa (_dgce ,_debc ,_cgba );_egfb !=nil {return nil ,_a .Wrap (_egfb ,_aabe ,"");};return _dgce ,nil ;};func _babaa (_bdeb *Bitmap ,_fgfde *Bitmap ,_aedg *Selection )(*Bitmap ,error ){var (_gdge *Bitmap ;_bgcg error ;);_bdeb ,_bgcg =_gddag (_bdeb ,_fgfde ,_aedg ,&_gdge );if _bgcg !=nil {return nil ,_bgcg ;};if _bgcg =_bdeb .clearAll ();_bgcg !=nil {return nil ,_bgcg ;};var _cfcb SelectionValue ;for _gfde :=0;_gfde < _aedg .Height ;_gfde ++{for _fdgd :=0;_fdgd < _aedg .Width ;_fdgd ++{_cfcb =_aedg .Data [_gfde ][_fdgd ];if _cfcb ==SelHit {if _bgcg =_bdeb .RasterOperation (_fdgd -_aedg .Cx ,_gfde -_aedg .Cy ,_fgfde .Width ,_fgfde .Height ,PixSrcOrDst ,_gdge ,0,0);_bgcg !=nil {return nil ,_bgcg ;};};};};return _bdeb ,nil ;};func _abdc (_egfc *Bitmap ,_ebdec ,_eceb int ,_dbagb ,_bcbc int ,_gea RasterOperator ){var (_dcfc int ;_cegcd byte ;_edgg ,_cfag int ;_cdgcd int ;);_ecdf :=_dbagb >>3;_efaeb :=_dbagb &7;if _efaeb > 0{_cegcd =_cdfe [_efaeb ];};_dcfc =_egfc .RowStride *_eceb +(_ebdec >>3);switch _gea {case PixClr :for _edgg =0;_edgg < _bcbc ;_edgg ++{_cdgcd =_dcfc +_edgg *_egfc .RowStride ;for _cfag =0;_cfag < _ecdf ;_cfag ++{_egfc .Data [_cdgcd ]=0x0;_cdgcd ++;};if _efaeb > 0{_egfc .Data [_cdgcd ]=_cdag (_egfc .Data [_cdgcd ],0x0,_cegcd );};};case PixSet :for _edgg =0;_edgg < _bcbc ;_edgg ++{_cdgcd =_dcfc +_edgg *_egfc .RowStride ;for _cfag =0;_cfag < _ecdf ;_cfag ++{_egfc .Data [_cdgcd ]=0xff;_cdgcd ++;};if _efaeb > 0{_egfc .Data [_cdgcd ]=_cdag (_egfc .Data [_cdgcd ],0xff,_cegcd );};};case PixNotDst :for _edgg =0;_edgg < _bcbc ;_edgg ++{_cdgcd =_dcfc +_edgg *_egfc .RowStride ;for _cfag =0;_cfag < _ecdf ;_cfag ++{_egfc .Data [_cdgcd ]=^_egfc .Data [_cdgcd ];_cdgcd ++;};if _efaeb > 0{_egfc .Data [_cdgcd ]=_cdag (_egfc .Data [_cdgcd ],^_egfc .Data [_cdgcd ],_cegcd );};};};};func TstGetScaledSymbol (t *_ad .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_efaa ,_ffbf :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_fb .NoError (t ,_ffbf );return _efaa ;};var _bfagd [256]uint8 ;type RasterOperator int ;func Extract (roi _ff .Rectangle ,src *Bitmap )(*Bitmap ,error ){_cggg :=New (roi .Dx (),roi .Dy ());_fcgdf :=roi .Min .X &0x07;_bce :=8-_fcgdf ;_dgbc :=uint (8-_cggg .Width &0x07);_fbb :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_fdfd :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_gbbca :=_cggg .RowStride ==_fdfd +1-_fbb ;var _beg int ;for _adcc :=roi .Min .Y ;_adcc < roi .Max .Y ;_adcc ++{_dga :=_fbb ;_edbc :=_beg ;switch {case _fbb ==_fdfd :_babf ,_gdd :=src .GetByte (_dga );if _gdd !=nil {return nil ,_gdd ;};_babf <<=uint (_fcgdf );_gdd =_cggg .SetByte (_edbc ,_ceb (_dgbc ,_babf ));if _gdd !=nil {return nil ,_gdd ;};case _fcgdf ==0:for _gcddg :=_fbb ;_gcddg <=_fdfd ;_gcddg ++{_bgdd ,_aae :=src .GetByte (_dga );if _aae !=nil {return nil ,_aae ;};_dga ++;if _gcddg ==_fdfd &&_gbbca {_bgdd =_ceb (_dgbc ,_bgdd );};_aae =_cggg .SetByte (_edbc ,_bgdd );if _aae !=nil {return nil ,_aae ;};_edbc ++;};default:_dbdc :=_bgbc (src ,_cggg ,uint (_fcgdf ),uint (_bce ),_dgbc ,_fbb ,_fdfd ,_gbbca ,_dga ,_edbc );if _dbdc !=nil {return nil ,_dbdc ;};};_fbb +=src .RowStride ;_fdfd +=src .RowStride ;_beg +=_cggg .RowStride ;};return _cggg ,nil ;};func (_cgca *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _cgca .Copy (),nil ;};_ccg ,_ead :=_cgca .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _ead !=nil {return nil ,_a .Wrap (_ead ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _ccg ,nil ;};func (_eee *Bitmap )GetByteIndex (x ,y int )int {return y *_eee .RowStride +(x >>3)};func TstImageBitmapData ()[]byte {return _fdaa .Data };func (_adcb *Bitmap )nextOnPixel (_fcbe ,_agbg int )(_gcaf _ff .Point ,_afcd bool ,_gacg error ){const _beb ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_gcaf ,_afcd ,_gacg =_adcb .nextOnPixelLow (_adcb .Width ,_adcb .Height ,_adcb .RowStride ,_fcbe ,_agbg );if _gacg !=nil {return _gcaf ,false ,_a .Wrap (_gacg ,_beb ,"");};return _gcaf ,_afcd ,nil ;};const (Vanilla Color =iota ;Chocolate ;);const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_bgeg *ClassedPoints )YAtIndex (i int )float32 {return (*_bgeg .Points )[_bgeg .IntSlice [i ]].Y };func TstESymbol (t *_ad .T ,scale ...int )*Bitmap {_bagb ,_fedb :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_fb .NoError (t ,_fedb );return TstGetScaledSymbol (t ,_bagb ,scale ...);};func (_ceda *Bitmap )thresholdPixelSum (_cgbc int )bool {var (_gdfg int ;_daaa uint8 ;_cgcg byte ;_acdb int ;);_baegb :=_ceda .RowStride ;_gga :=uint (_ceda .Width &0x07);if _gga !=0{_daaa =uint8 ((0xff<<(8-_gga ))&0xff);_baegb --;};for _daaaa :=0;_daaaa < _ceda .Height ;_daaaa ++{for _acdb =0;_acdb < _baegb ;_acdb ++{_cgcg =_ceda .Data [_daaaa *_ceda .RowStride +_acdb ];_gdfg +=int (_bfagd [_cgcg ]);};if _gga !=0{_cgcg =_ceda .Data [_daaaa *_ceda .RowStride +_acdb ]&_daaa ;_gdfg +=int (_bfagd [_cgcg ]);};if _gdfg > _cgbc {return true ;};};return false ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _gceeb (src ,sequence ...);};func (_bbfc *Bitmaps )SortByWidth (){_cbgb :=(*byWidth )(_bbfc );_ae .Sort (_cbgb )};func _gafa (_ggca ,_dabg *Bitmap ,_gcgd *Selection )(*Bitmap ,error ){const _cde ="\u0065\u0072\u006fd\u0065";var (_baed error ;_edaa *Bitmap ;);_ggca ,_baed =_gddag (_ggca ,_dabg ,_gcgd ,&_edaa );if _baed !=nil {return nil ,_a .Wrap (_baed ,_cde ,"");};if _baed =_ggca .setAll ();_baed !=nil {return nil ,_a .Wrap (_baed ,_cde ,"");};var _cegf SelectionValue ;for _gebf :=0;_gebf < _gcgd .Height ;_gebf ++{for _abda :=0;_abda < _gcgd .Width ;_abda ++{_cegf =_gcgd .Data [_gebf ][_abda ];if _cegf ==SelHit {_baed =_ebgb (_ggca ,_gcgd .Cx -_abda ,_gcgd .Cy -_gebf ,_dabg .Width ,_dabg .Height ,PixSrcAndDst ,_edaa ,0,0);if _baed !=nil {return nil ,_a .Wrap (_baed ,_cde ,"");};};};};if MorphBC ==SymmetricMorphBC {return _ggca ,nil ;};_cbgf ,_fcge ,_baag ,_caad :=_gcgd .findMaxTranslations ();if _cbgf > 0{if _baed =_ggca .RasterOperation (0,0,_cbgf ,_dabg .Height ,PixClr ,nil ,0,0);_baed !=nil {return nil ,_a .Wrap (_baed ,_cde ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _baag > 0{if _baed =_ggca .RasterOperation (_dabg .Width -_baag ,0,_baag ,_dabg .Height ,PixClr ,nil ,0,0);_baed !=nil {return nil ,_a .Wrap (_baed ,_cde ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _fcge > 0{if _baed =_ggca .RasterOperation (0,0,_dabg .Width ,_fcge ,PixClr ,nil ,0,0);_baed !=nil {return nil ,_a .Wrap (_baed ,_cde ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _caad > 0{if _baed =_ggca .RasterOperation (0,_dabg .Height -_caad ,_dabg .Width ,_caad ,PixClr ,nil ,0,0);_baed !=nil {return nil ,_a .Wrap (_baed ,_cde ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _ggca ,nil ;};func (_dcae *Boxes )selectWithIndicator (_feaa *_b .NumSlice )(_defb *Boxes ,_gbc error ){const _ccabb ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _dcae ==nil {return nil ,_a .Error (_ccabb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _feaa ==nil {return nil ,_a .Error (_ccabb ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_feaa )!=len (*_dcae ){return nil ,_a .Error (_ccabb ,"\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 _dcag ,_bca int ;for _bfcc :=0;_bfcc < len (*_feaa );_bfcc ++{if _dcag ,_gbc =_feaa .GetInt (_bfcc );_gbc !=nil {return nil ,_a .Wrap (_gbc ,_ccabb ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _dcag ==1{_bca ++;};};if _bca ==len (*_dcae ){return _dcae ,nil ;};_baegd :=Boxes {};for _bgad :=0;_bgad < len (*_feaa );_bgad ++{_dcag =int ((*_feaa )[_bgad ]);if _dcag ==0{continue ;};_baegd =append (_baegd ,(*_dcae )[_bgad ]);};_defb =&_baegd ;return _defb ,nil ;};func TstTSymbol (t *_ad .T ,scale ...int )*Bitmap {_bdcfb ,_ecc :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_fb .NoError (t ,_ecc );return TstGetScaledSymbol (t ,_bdcfb ,scale ...);};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 (_gdce *Bitmap )SetPadBits (value int ){_gdce .setPadBits (value )};func (_ebdg *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_efg *Bitmaps ,_dgga *Boxes ,_dac error ){const _cbce ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _ebdg ==nil {return nil ,nil ,_a .Error (_cbce ,"\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 ,_a .Error (_cbce ,"\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 _ebdg .Zero (){_dgga =&Boxes {};_efg =&Bitmaps {};return _efg ,_dgga ,nil ;};switch components {case ComponentConn :_efg =&Bitmaps {};if _dgga ,_dac =_ebdg .ConnComponents (_efg ,8);_dac !=nil {return nil ,nil ,_a .Wrap (_dac ,_cbce ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentCharacters :_ffg ,_ceg :=MorphSequence (_ebdg ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _ceg !=nil {return nil ,nil ,_a .Wrap (_ceg ,_cbce ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _bf .Log .IsLogLevel (_bf .LogLevelTrace ){_bf .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",_ffg .String ());};_cebac :=&Bitmaps {};_dgga ,_ceg =_ffg .ConnComponents (_cebac ,8);if _ceg !=nil {return nil ,nil ,_a .Wrap (_ceg ,_cbce ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _bf .Log .IsLogLevel (_bf .LogLevelTrace ){_bf .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",_cebac .String ());};if _efg ,_ceg =_cebac .ClipToBitmap (_ebdg );_ceg !=nil {return nil ,nil ,_a .Wrap (_ceg ,_cbce ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_gdbf :=1;var _bbfg *Bitmap ;switch {case _ebdg .XResolution <=200:_bbfg =_ebdg ;case _ebdg .XResolution <=400:_gdbf =2;_bbfg ,_dac =_fee (_ebdg ,1,0,0,0);if _dac !=nil {return nil ,nil ,_a .Wrap (_dac ,_cbce ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");};default:_gdbf =4;_bbfg ,_dac =_fee (_ebdg ,1,1,0,0);if _dac !=nil {return nil ,nil ,_a .Wrap (_dac ,_cbce ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");};};_bbdd ,_ ,_cacb :=_acdbd (_bbfg );if _cacb !=nil {return nil ,nil ,_a .Wrap (_cacb ,_cbce ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_fdcd ,_cacb :=_efad (_bbdd ,_gdbf );if _cacb !=nil {return nil ,nil ,_a .Wrap (_cacb ,_cbce ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_ccag :=&Bitmaps {};if _dgga ,_cacb =_fdcd .ConnComponents (_ccag ,4);_cacb !=nil {return nil ,nil ,_a .Wrap (_cacb ,_cbce ,"\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 _efg ,_cacb =_ccag .ClipToBitmap (_ebdg );_cacb !=nil {return nil ,nil ,_a .Wrap (_cacb ,_cbce ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_efg ,_dac =_efg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _dac !=nil {return nil ,nil ,_a .Wrap (_dac ,_cbce ,"");};_dgga ,_dac =_dgga .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _dac !=nil {return nil ,nil ,_a .Wrap (_dac ,_cbce ,"");};return _efg ,_dgga ,nil ;};func (_dff Points )Get (i int )(Point ,error ){if i > len (_dff )-1{return Point {},_a .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 _dff [i ],nil ;};type Component int ;func _feb (_dee *Bitmap ,_cc *Bitmap ,_fed int )(_ggb error ){const _bae ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _fed {case 2:_ggb =_eg (_dee ,_cc );case 4:_ggb =_ege (_dee ,_cc );case 8:_ggb =_cf (_dee ,_cc );default:return _a .Error (_bae ,"\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 _ggb !=nil {_ggb =_a .Wrap (_ggb ,_bae ,"");};return _ggb ;};func (_gccec Points )XSorter ()func (_fcee ,_baeeb int )bool {return func (_efbd ,_fgadd int )bool {return _gccec [_efbd ].X < _gccec [_fgadd ].X };};type CombinationOperator int ;func (_eggb *Boxes )Get (i int )(*_ff .Rectangle ,error ){const _cbg ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _eggb ==nil {return nil ,_a .Error (_cbg ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_eggb )-1{return nil ,_a .Errorf (_cbg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_eggb )[i ],nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _bdcb ,_dbe int ;_ffed :=src .RowStride -1;if x < 0{_dbe =-x ;x =0;}else if x +src .Width > dst .Width {_ffed -=src .Width +x -dst .Width ;};if y < 0{_bdcb =-y ;y =0;_dbe +=src .RowStride ;_ffed +=src .RowStride ;}else if y +src .Height > dst .Height {_bdcb =src .Height +y -dst .Height ;};var (_cgg int ;_dbcc error ;);_fgec :=x &0x07;_afgda :=8-_fgec ;_ged :=src .Width &0x07;_ddg :=_afgda -_ged ;_fcaa :=_afgda &0x07!=0;_fcf :=src .Width <=((_ffed -_dbe )<<3)+_afgda ;_gace :=dst .GetByteIndex (x ,y );_ebe :=_bdcb +dst .Height ;if src .Height > _ebe {_cgg =_ebe ;}else {_cgg =src .Height ;};switch {case !_fcaa :_dbcc =_ccfe (src ,dst ,_bdcb ,_cgg ,_gace ,_dbe ,_ffed ,op );case _fcf :_dbcc =_gaga (src ,dst ,_bdcb ,_cgg ,_gace ,_dbe ,_ffed ,_ddg ,_fgec ,_afgda ,op );default:_dbcc =_gagff (src ,dst ,_bdcb ,_cgg ,_gace ,_dbe ,_ffed ,_ddg ,_fgec ,_afgda ,op ,_ged );};return _dbcc ;};func (_gae *Bitmap )String ()string {var _aba ="\u000a";for _cab :=0;_cab < _gae .Height ;_cab ++{var _fec string ;for _baef :=0;_baef < _gae .Width ;_baef ++{_abdg :=_gae .GetPixel (_baef ,_cab );if _abdg {_fec +="\u0031";}else {_fec +="\u0030";};};_aba +=_fec +"\u000a";};return _aba ;};func _aaec ()[]int {_caaec :=make ([]int ,256);for _beed :=0;_beed <=0xff;_beed ++{_ebfe :=byte (_beed );_caaec [_ebfe ]=int (_ebfe &0x1)+(int (_ebfe >>1)&0x1)+(int (_ebfe >>2)&0x1)+(int (_ebfe >>3)&0x1)+(int (_ebfe >>4)&0x1)+(int (_ebfe >>5)&0x1)+(int (_ebfe >>6)&0x1)+(int (_ebfe >>7)&0x1);};return _caaec ;};func TstDSymbol (t *_ad .T ,scale ...int )*Bitmap {_gabfe ,_efebf :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_fb .NoError (t ,_efebf );return TstGetScaledSymbol (t ,_gabfe ,scale ...);};type SelectionValue int ;func _dfec (_degc ,_adeg *Bitmap ,_cedc ,_dacf int )(*Bitmap ,error ){const _bggb ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _adeg ==nil {return nil ,_a .Error (_bggb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cedc < 1||_dacf < 1{return nil ,_a .Error (_bggb ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _cedc ==1&&_dacf ==1{return _adeg .Copy (),nil ;};if _cedc ==1||_dacf ==1{_geff :=SelCreateBrick (_dacf ,_cedc ,_dacf /2,_cedc /2,SelHit );var _befg error ;_degc ,_befg =_bgedb (_degc ,_adeg ,_geff );if _befg !=nil {return nil ,_a .Wrap (_befg ,_bggb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _degc ,nil ;};_acdfa :=SelCreateBrick (1,_cedc ,0,_cedc /2,SelHit );_acfg :=SelCreateBrick (_dacf ,1,_dacf /2,0,SelHit );_acff ,_acbac :=_babaa (nil ,_adeg ,_acdfa );if _acbac !=nil {return nil ,_a .Wrap (_acbac ,_bggb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _degc ,_acbac =_babaa (_degc ,_acff ,_acfg );_acbac !=nil {return nil ,_a .Wrap (_acbac ,_bggb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_acbac =_gafa (_acff ,_degc ,_acdfa );_acbac !=nil {return nil ,_a .Wrap (_acbac ,_bggb ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};if _ ,_acbac =_gafa (_degc ,_acff ,_acfg );_acbac !=nil {return nil ,_a .Wrap (_acbac ,_bggb ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _degc ,nil ;};func _eeff (_dcfca *Bitmap ,_fcec ,_fefg int ,_aaed ,_eaad int ,_geaf RasterOperator ){var (_fcdcf bool ;_eaae bool ;_beec int ;_ccgd int ;_agfa int ;_cefae int ;_ecfc bool ;_afegb byte ;);_ebda :=8-(_fcec &7);_deff :=_ccda [_ebda ];_bdda :=_dcfca .RowStride *_fefg +(_fcec >>3);if _aaed < _ebda {_fcdcf =true ;_deff &=_cdfe [8-_ebda +_aaed ];};if !_fcdcf {_beec =(_aaed -_ebda )>>3;if _beec !=0{_eaae =true ;_ccgd =_bdda +1;};};_agfa =(_fcec +_aaed )&7;if !(_fcdcf ||_agfa ==0){_ecfc =true ;_afegb =_cdfe [_agfa ];_cefae =_bdda +1+_beec ;};var _bedc ,_edgb int ;switch _geaf {case PixClr :for _bedc =0;_bedc < _eaad ;_bedc ++{_dcfca .Data [_bdda ]=_cdag (_dcfca .Data [_bdda ],0x0,_deff );_bdda +=_dcfca .RowStride ;};if _eaae {for _bedc =0;_bedc < _eaad ;_bedc ++{for _edgb =0;_edgb < _beec ;_edgb ++{_dcfca .Data [_ccgd +_edgb ]=0x0;};_ccgd +=_dcfca .RowStride ;};};if _ecfc {for _bedc =0;_bedc < _eaad ;_bedc ++{_dcfca .Data [_cefae ]=_cdag (_dcfca .Data [_cefae ],0x0,_afegb );_cefae +=_dcfca .RowStride ;};};case PixSet :for _bedc =0;_bedc < _eaad ;_bedc ++{_dcfca .Data [_bdda ]=_cdag (_dcfca .Data [_bdda ],0xff,_deff );_bdda +=_dcfca .RowStride ;};if _eaae {for _bedc =0;_bedc < _eaad ;_bedc ++{for _edgb =0;_edgb < _beec ;_edgb ++{_dcfca .Data [_ccgd +_edgb ]=0xff;};_ccgd +=_dcfca .RowStride ;};};if _ecfc {for _bedc =0;_bedc < _eaad ;_bedc ++{_dcfca .Data [_cefae ]=_cdag (_dcfca .Data [_cefae ],0xff,_afegb );_cefae +=_dcfca .RowStride ;};};case PixNotDst :for _bedc =0;_bedc < _eaad ;_bedc ++{_dcfca .Data [_bdda ]=_cdag (_dcfca .Data [_bdda ],^_dcfca .Data [_bdda ],_deff );_bdda +=_dcfca .RowStride ;};if _eaae {for _bedc =0;_bedc < _eaad ;_bedc ++{for _edgb =0;_edgb < _beec ;_edgb ++{_dcfca .Data [_ccgd +_edgb ]=^(_dcfca .Data [_ccgd +_edgb ]);};_ccgd +=_dcfca .RowStride ;};};if _ecfc {for _bedc =0;_bedc < _eaad ;_bedc ++{_dcfca .Data [_cefae ]=_cdag (_dcfca .Data [_cefae ],^_dcfca .Data [_cefae ],_afegb );_cefae +=_dcfca .RowStride ;};};};};func (_aggg *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_bafce *Bitmaps ,_gebdd error ){const _efdg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _aggg ==nil {return nil ,_a .Error (_efdg ,"\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 ,_a .Errorf (_efdg ,"\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 ,_a .Errorf (_efdg ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );};_efdc ,_gebdd :=_aggg .makeSizeIndicator (width ,height ,tp ,relation );if _gebdd !=nil {return nil ,_a .Wrap (_gebdd ,_efdg ,"");};_bafce ,_gebdd =_aggg .selectByIndicator (_efdc );if _gebdd !=nil {return nil ,_a .Wrap (_gebdd ,_efdg ,"");};return _bafce ,nil ;};func (_aff *Bitmap )ToImage ()_ff .Image {_dad ,_ede :=_g .NewImage (_aff .Width ,_aff .Height ,1,1,_aff .Data ,nil ,nil );if _ede !=nil {_bf .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",_ede );};return _dad ;};func (_dgfc *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_cebe *Boxes ,_cggc error ){const _aecf ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _dgfc ==nil {return nil ,_a .Error (_aecf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_dgfc )==0{return _dgfc ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_aecf ,"\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 ,_a .Errorf (_aecf ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );};_bdca :=_dgfc .makeSizeIndicator (width ,height ,tp ,relation );_cdg ,_cggc :=_dgfc .selectWithIndicator (_bdca );if _cggc !=nil {return nil ,_a .Wrap (_cggc ,_aecf ,"");};return _cdg ,nil ;};func (_gfga *Bitmap )SetPixel (x ,y int ,pixel byte )error {_acb :=_gfga .GetByteIndex (x ,y );if _acb > len (_gfga .Data )-1{return _a .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",_acb );};_gdg :=_gfga .GetBitOffset (x );_feeb :=uint (7-_gdg );_afc :=_gfga .Data [_acb ];var _gcce byte ;if pixel ==1{_gcce =_afc |(pixel &0x01<<_feeb );}else {_gcce =_afc &^(1<<_feeb );};_gfga .Data [_acb ]=_gcce ;return nil ;};func _eg (_bd ,_d *Bitmap )(_bg error ){const _fe ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_af :=_d .RowStride ;_fa :=_bd .RowStride ;var (_bgc byte ;_ac uint16 ;_bbe ,_fc ,_eb ,_ba ,_aed int ;);for _eb =0;_eb < _d .Height ;_eb ++{_bbe =_eb *_af ;_fc =2*_eb *_fa ;for _ba =0;_ba < _af ;_ba ++{_bgc =_d .Data [_bbe +_ba ];_ac =_gbde [_bgc ];_aed =_fc +_ba *2;if _bd .RowStride !=_d .RowStride *2&&(_ba +1)*2> _bd .RowStride {_bg =_bd .SetByte (_aed ,byte (_ac >>8));}else {_bg =_bd .setTwoBytes (_aed ,_ac );};if _bg !=nil {return _a .Wrap (_bg ,_fe ,"");};};for _ba =0;_ba < _fa ;_ba ++{_aed =_fc +_fa +_ba ;_bgc =_bd .Data [_fc +_ba ];if _bg =_bd .SetByte (_aed ,_bgc );_bg !=nil {return _a .Wrapf (_bg ,_fe ,"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",_fc +_ba ,_fc +_fa +_ba );};};};return nil ;};func _ccd ()(_dgc [256]uint64 ){for _daab :=0;_daab < 256;_daab ++{if _daab &0x01!=0{_dgc [_daab ]|=0xff;};if _daab &0x02!=0{_dgc [_daab ]|=0xff00;};if _daab &0x04!=0{_dgc [_daab ]|=0xff0000;};if _daab &0x08!=0{_dgc [_daab ]|=0xff000000;};if _daab &0x10!=0{_dgc [_daab ]|=0xff00000000;};if _daab &0x20!=0{_dgc [_daab ]|=0xff0000000000;};if _daab &0x40!=0{_dgc [_daab ]|=0xff000000000000;};if _daab &0x80!=0{_dgc [_daab ]|=0xff00000000000000;};};return _dgc ;};func (_gdbd *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _dgcg ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _gdbd ==nil {return nil ,_a .Error (_dgcg ,"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 (_gdbd .Values )-1{return nil ,_a .Errorf (_dgcg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gdbd .Values [i ],nil ;};func (_gfgg *Bitmap )SetByte (index int ,v byte )error {if index > len (_gfgg .Data )-1||index < 0{return _a .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 );};_gfgg .Data [index ]=v ;return nil ;};func (_dedc *Bitmap )setFourBytes (_gegg int ,_fcag uint32 )error {if _gegg +3> len (_dedc .Data )-1{return _a .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",_gegg );};_dedc .Data [_gegg ]=byte ((_fcag &0xff000000)>>24);_dedc .Data [_gegg +1]=byte ((_fcag &0xff0000)>>16);_dedc .Data [_gegg +2]=byte ((_fcag &0xff00)>>8);_dedc .Data [_gegg +3]=byte (_fcag &0xff);return nil ;};func (_gcda *Bitmap )setAll ()error {_aeae :=_ebgb (_gcda ,0,0,_gcda .Width ,_gcda .Height ,PixSet ,nil ,0,0);if _aeae !=nil {return _a .Wrap (_aeae ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func (_fad Points )Size ()int {return len (_fad )};func (_dgg *Bitmap )Copy ()*Bitmap {_eag :=make ([]byte ,len (_dgg .Data ));copy (_eag ,_dgg .Data );return &Bitmap {Width :_dgg .Width ,Height :_dgg .Height ,RowStride :_dgg .RowStride ,Data :_eag ,Color :_dgg .Color ,Text :_dgg .Text ,BitmapNumber :_dgg .BitmapNumber ,Special :_dgg .Special };};func (_gfg *Bitmap )GetUnpaddedData ()([]byte ,error ){_afb :=uint (_gfg .Width &0x07);if _afb ==0{return _gfg .Data ,nil ;};_daaf :=_gfg .Width *_gfg .Height ;if _daaf %8!=0{_daaf >>=3;_daaf ++;}else {_daaf >>=3;};_aec :=make ([]byte ,_daaf );_bbc :=_fbc .NewWriterMSB (_aec );const _fcc ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _gfeg :=0;_gfeg < _gfg .Height ;_gfeg ++{for _dcd :=0;_dcd < _gfg .RowStride ;_dcd ++{_bdf :=_gfg .Data [_gfeg *_gfg .RowStride +_dcd ];if _dcd !=_gfg .RowStride -1{_bgbd :=_bbc .WriteByte (_bdf );if _bgbd !=nil {return nil ,_a .Wrap (_bgbd ,_fcc ,"");};continue ;};for _daeg :=uint (0);_daeg < _afb ;_daeg ++{_fbfgd :=_bbc .WriteBit (int (_bdf >>(7-_daeg )&0x01));if _fbfgd !=nil {return nil ,_a .Wrap (_fbfgd ,_fcc ,"");};};};};return _aec ,nil ;};type Boxes []*_ff .Rectangle ;func _baba (_ffbb ,_agac int )int {if _ffbb > _agac {return _ffbb ;};return _agac ;};func (_fdba *Bitmap )clipRectangle (_cfbac ,_ffc *_ff .Rectangle )(_fccg *Bitmap ,_cbaf error ){const _gcec ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _cfbac ==nil {return nil ,_a .Error (_gcec ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_acba ,_cadd :=_fdba .Width ,_fdba .Height ;_cgbb ,_cbaf :=ClipBoxToRectangle (_cfbac ,_acba ,_cadd );if _cbaf !=nil {_bf .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",_cbaf );return nil ,nil ;};_geeb ,_fafag :=_cgbb .Min .X ,_cgbb .Min .Y ;_bcd ,_ddcg :=_cgbb .Max .X -_cgbb .Min .X ,_cgbb .Max .Y -_cgbb .Min .Y ;_fccg =New (_bcd ,_ddcg );_fccg .Text =_fdba .Text ;if _cbaf =_fccg .RasterOperation (0,0,_bcd ,_ddcg ,PixSrc ,_fdba ,_geeb ,_fafag );_cbaf !=nil {return nil ,_a .Wrap (_cbaf ,_gcec ,"");};if _ffc !=nil {*_ffc =*_cgbb ;};return _fccg ,nil ;};func (_fge *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_fge .Width ,Height :_fge .Height ,RowStride :_fge .RowStride ,Color :_fge .Color ,Text :_fge .Text ,BitmapNumber :_fge .BitmapNumber ,Special :_fge .Special ,Data :make ([]byte ,len (_fge .Data ))};};func _afbd (_caf ,_ggcb ,_eaa *Bitmap )(*Bitmap ,error ){const _bdae ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _ggcb ==nil {return nil ,_a .Error (_bdae ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _eaa ==nil {return nil ,_a .Error (_bdae ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _ccab error ;switch {case _caf ==_ggcb :if _ccab =_caf .RasterOperation (0,0,_ggcb .Width ,_ggcb .Height ,PixNotSrcAndDst ,_eaa ,0,0);_ccab !=nil {return nil ,_a .Wrap (_ccab ,_bdae ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _caf ==_eaa :if _ccab =_caf .RasterOperation (0,0,_ggcb .Width ,_ggcb .Height ,PixNotSrcAndDst ,_ggcb ,0,0);_ccab !=nil {return nil ,_a .Wrap (_ccab ,_bdae ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_caf ,_ccab =_afa (_caf ,_ggcb );if _ccab !=nil {return nil ,_a .Wrap (_ccab ,_bdae ,"");};if _ccab =_caf .RasterOperation (0,0,_ggcb .Width ,_ggcb .Height ,PixNotSrcAndDst ,_eaa ,0,0);_ccab !=nil {return nil ,_a .Wrap (_ccab ,_bdae ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _caf ,nil ;};func (_ccbbc *Bitmaps )selectByIndexes (_feac []int )(*Bitmaps ,error ){_eegd :=&Bitmaps {};for _ ,_ffaf :=range _feac {_beacf ,_egae :=_ccbbc .GetBitmap (_ffaf );if _egae !=nil {return nil ,_a .Wrap (_egae ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_eegd .AddBitmap (_beacf );};return _eegd ,nil ;};func (_aabf *Bitmaps )WidthSorter ()func (_afgb ,_cfffc int )bool {return func (_dbbg ,_fdec int )bool {return _aabf .Values [_dbbg ].Width < _aabf .Values [_fdec ].Width };};func (_fbbf *byHeight )Less (i ,j int )bool {return _fbbf .Values [i ].Height < _fbbf .Values [j ].Height };func (_ebbe *Bitmap )setPadBits (_afgga int ){_dbf :=8-_ebbe .Width %8;if _dbf ==8{return ;};_eedd :=_ebbe .Width /8;_ccad :=_ccda [_dbf ];if _afgga ==0{_ccad ^=_ccad ;};var _ggg int ;for _dbff :=0;_dbff < _ebbe .Height ;_dbff ++{_ggg =_dbff *_ebbe .RowStride +_eedd ;if _afgga ==0{_ebbe .Data [_ggg ]&=_ccad ;}else {_ebbe .Data [_ggg ]|=_ccad ;};};};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func _cf (_ec ,_afgc *Bitmap )(_egd error ){const _dd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_dc :=_afgc .RowStride ;_fg :=_ec .RowStride ;var _ece ,_ga ,_feg ,_daa ,_cg int ;for _feg =0;_feg < _afgc .Height ;_feg ++{_ece =_feg *_dc ;_ga =8*_feg *_fg ;for _daa =0;_daa < _dc ;_daa ++{if _egd =_ec .setEightBytes (_ga +_daa *8,_ebbc [_afgc .Data [_ece +_daa ]]);_egd !=nil {return _a .Wrap (_egd ,_dd ,"");};};for _cg =1;_cg < 8;_cg ++{for _daa =0;_daa < _fg ;_daa ++{if _egd =_ec .SetByte (_ga +_cg *_fg +_daa ,_ec .Data [_ga +_daa ]);_egd !=nil {return _a .Wrap (_egd ,_dd ,"");};};};};return nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_ff .Rectangle ;};func (_acfc Points )GetIntX (i int )(int ,error ){if i >=len (_acfc ){return 0,_a .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 (_acfc [i ].X ),nil ;};func (_bfge *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _fbge ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _cccc :=_bfge .validateIntSlice ();_cccc !=nil {return nil ,_a .Wrap (_cccc ,_fbge ,"");};if _bfge .IntSlice .Size ()==0{return nil ,_a .Error (_fbge ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_bfge .SortByY ();var (_bgbe []*ClassedPoints ;_dede int ;);_aggda :=-1;var _cabg *ClassedPoints ;for _bbddg :=0;_bbddg < len (_bfge .IntSlice );_bbddg ++{_dede =int (_bfge .YAtIndex (_bbddg ));if _dede !=_aggda {_cabg =&ClassedPoints {Points :_bfge .Points };_aggda =_dede ;_bgbe =append (_bgbe ,_cabg );};_cabg .IntSlice =append (_cabg .IntSlice ,_bfge .IntSlice [_bbddg ]);};for _ ,_gdfe :=range _bgbe {_gdfe .SortByX ();};return _bgbe ,nil ;};func (_gcgb *BitmapsArray )GetBox (i int )(*_ff .Rectangle ,error ){const _dccc ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _gcgb ==nil {return nil ,_a .Error (_dccc ,"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 (_gcgb .Boxes )-1{return nil ,_a .Errorf (_dccc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gcgb .Boxes [i ],nil ;};func TstRSymbol (t *_ad .T ,scale ...int )*Bitmap {_cbaea ,_dbfba :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_fb .NoError (t ,_dbfba );return TstGetScaledSymbol (t ,_cbaea ,scale ...);};type Point struct{X ,Y float32 ;};func _faf (_aa *Bitmap ,_ddf int ,_fdc []byte )(_eeg *Bitmap ,_gce error ){const _cac ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _aa ==nil {return nil ,_a .Error (_cac ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _ddf < 1||_ddf > 4{return nil ,_a .Error (_cac ,"\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 _aa .Height <=1{return nil ,_a .Errorf (_cac ,"\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",_aa .Height );};_eeg =New (_aa .Width /2,_aa .Height /2);if _fdc ==nil {_fdc =_eda ();};_gfd :=_ebcf (_aa .RowStride ,2*_eeg .RowStride );switch _ddf {case 1:_gce =_deee (_aa ,_eeg ,_ddf ,_fdc ,_gfd );case 2:_gce =_daac (_aa ,_eeg ,_ddf ,_fdc ,_gfd );case 3:_gce =_aac (_aa ,_eeg ,_ddf ,_fdc ,_gfd );case 4:_gce =_ade (_aa ,_eeg ,_ddf ,_fdc ,_gfd );};if _gce !=nil {return nil ,_gce ;};return _eeg ,nil ;};func (_baee *Bitmap )CountPixels ()int {return _baee .countPixels ()};type MorphOperation int ;func _ebgb (_cdec *Bitmap ,_eggga ,_gecg ,_gabf ,_bfcf int ,_cdcc RasterOperator ,_fcdc *Bitmap ,_cdbg ,_dedcg int )error {const _dbcd ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _cdec ==nil {return _a .Error (_dbcd ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _cdcc ==PixDst {return nil ;};switch _cdcc {case PixClr ,PixSet ,PixNotDst :_dfbc (_cdec ,_eggga ,_gecg ,_gabf ,_bfcf ,_cdcc );return nil ;};if _fcdc ==nil {_bf .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 _a .Error (_dbcd ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dffd :=_ddeg (_cdec ,_eggga ,_gecg ,_gabf ,_bfcf ,_cdcc ,_fcdc ,_cdbg ,_dedcg );_dffd !=nil {return _a .Wrap (_dffd ,_dbcd ,"");};return nil ;};func _gddag (_ebed *Bitmap ,_fdcgg *Bitmap ,_dcbeb *Selection ,_dgad **Bitmap )(*Bitmap ,error ){const _dbgg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _fdcgg ==nil {return nil ,_a .Error (_dbgg ,"\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 _dcbeb ==nil {return nil ,_a .Error (_dbgg ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_bgccd ,_ggdfc :=_dcbeb .Height ,_dcbeb .Width ;if _bgccd ==0||_ggdfc ==0{return nil ,_a .Error (_dbgg ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _ebed ==nil {_ebed =_fdcgg .createTemplate ();*_dgad =_fdcgg ;return _ebed ,nil ;};_ebed .Width =_fdcgg .Width ;_ebed .Height =_fdcgg .Height ;_ebed .RowStride =_fdcgg .RowStride ;_ebed .Color =_fdcgg .Color ;_ebed .Data =make ([]byte ,_fdcgg .RowStride *_fdcgg .Height );if _ebed ==_fdcgg {*_dgad =_fdcgg .Copy ();}else {*_dgad =_fdcgg ;};return _ebed ,nil ;};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func _aac (_gca ,_bgda *Bitmap ,_ffbd int ,_eaf []byte ,_fegc int )(_bgdb error ){const _gfdg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_adg ,_cgd ,_cdc ,_eca ,_gcee ,_cad ,_bdb ,_bged int ;_ggba ,_fcgb ,_fbgf ,_gcga uint32 ;_adf ,_bec byte ;_gdf uint16 ;);_edb :=make ([]byte ,4);_gee :=make ([]byte ,4);for _cdc =0;_cdc < _gca .Height -1;_cdc ,_eca =_cdc +2,_eca +1{_adg =_cdc *_gca .RowStride ;_cgd =_eca *_bgda .RowStride ;for _gcee ,_cad =0,0;_gcee < _fegc ;_gcee ,_cad =_gcee +4,_cad +1{for _bdb =0;_bdb < 4;_bdb ++{_bged =_adg +_gcee +_bdb ;if _bged <=len (_gca .Data )-1&&_bged < _adg +_gca .RowStride {_edb [_bdb ]=_gca .Data [_bged ];}else {_edb [_bdb ]=0x00;};_bged =_adg +_gca .RowStride +_gcee +_bdb ;if _bged <=len (_gca .Data )-1&&_bged < _adg +(2*_gca .RowStride ){_gee [_bdb ]=_gca .Data [_bged ];}else {_gee [_bdb ]=0x00;};};_ggba =_ag .BigEndian .Uint32 (_edb );_fcgb =_ag .BigEndian .Uint32 (_gee );_fbgf =_ggba &_fcgb ;_fbgf |=_fbgf <<1;_gcga =_ggba |_fcgb ;_gcga &=_gcga <<1;_fcgb =_fbgf &_gcga ;_fcgb &=0xaaaaaaaa;_ggba =_fcgb |(_fcgb <<7);_adf =byte (_ggba >>24);_bec =byte ((_ggba >>8)&0xff);_bged =_cgd +_cad ;if _bged +1==len (_bgda .Data )-1||_bged +1>=_cgd +_bgda .RowStride {if _bgdb =_bgda .SetByte (_bged ,_eaf [_adf ]);_bgdb !=nil {return _a .Wrapf (_bgdb ,_gfdg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bged );};}else {_gdf =(uint16 (_eaf [_adf ])<<8)|uint16 (_eaf [_bec ]);if _bgdb =_bgda .setTwoBytes (_bged ,_gdf );_bgdb !=nil {return _a .Wrapf (_bgdb ,_gfdg ,"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",_bged );};_cad ++;};};};return nil ;};func TstCSymbol (t *_ad .T )*Bitmap {t .Helper ();_ccac :=New (6,6);_fb .NoError (t ,_ccac .SetPixel (1,0,1));_fb .NoError (t ,_ccac .SetPixel (2,0,1));_fb .NoError (t ,_ccac .SetPixel (3,0,1));_fb .NoError (t ,_ccac .SetPixel (4,0,1));_fb .NoError (t ,_ccac .SetPixel (0,1,1));_fb .NoError (t ,_ccac .SetPixel (5,1,1));_fb .NoError (t ,_ccac .SetPixel (0,2,1));_fb .NoError (t ,_ccac .SetPixel (0,3,1));_fb .NoError (t ,_ccac .SetPixel (0,4,1));_fb .NoError (t ,_ccac .SetPixel (5,4,1));_fb .NoError (t ,_ccac .SetPixel (1,5,1));_fb .NoError (t ,_ccac .SetPixel (2,5,1));_fb .NoError (t ,_ccac .SetPixel (3,5,1));_fb .NoError (t ,_ccac .SetPixel (4,5,1));return _ccac ;};type Getter interface{GetBitmap ()*Bitmap ;};func TstWordBitmap (t *_ad .T ,scale ...int )*Bitmap {_cbae :=1;if len (scale )> 0{_cbae =scale [0];};_dbdg :=3;_ddadc :=9+7+15+2*_dbdg ;_gbgf :=5+_dbdg +5;_fbdd :=New (_ddadc *_cbae ,_gbgf *_cbae );_bgcbcf :=&Bitmaps {};var _cgfcg *int ;_dbdg *=_cbae ;_ccdag :=0;_cgfcg =&_ccdag ;_dabb :=0;_fbcg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,_dbdg );_fbcg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,_dbdg );_fbcg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,0);*_cgfcg =0;_dabb =5*_cbae +_dbdg ;_fbcg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,_dbdg );_fbcg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,1*_cbae );_fbcg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bgcbcf ,_fbcg ,_cgfcg ,_dabb ,0);TstWriteSymbols (t ,_bgcbcf ,_fbdd );return _fbdd ;};type byWidth Bitmaps ;func _bfgce (_gcde *Bitmap ,_bcdd *_b .Stack ,_cceb ,_bbdf int )(_afeba *_ff .Rectangle ,_aaad error ){const _ffac ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _gcde ==nil {return nil ,_a .Error (_ffac ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _bcdd ==nil {return nil ,_a .Error (_ffac ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_addc ,_adec :=_gcde .Width ,_gcde .Height ;_eface :=_addc -1;_eeaa :=_adec -1;if _cceb < 0||_cceb > _eface ||_bbdf < 0||_bbdf > _eeaa ||!_gcde .GetPixel (_cceb ,_bbdf ){return nil ,nil ;};_cadfb :=_ff .Rect (100000,100000,0,0);if _aaad =_cdeca (_bcdd ,_cceb ,_cceb ,_bbdf ,1,_eeaa ,&_cadfb );_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _aaad =_cdeca (_bcdd ,_cceb ,_cceb ,_bbdf +1,-1,_eeaa ,&_cadfb );_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_cadfb .Min .X ,_cadfb .Max .X =_cceb ,_cceb ;_cadfb .Min .Y ,_cadfb .Max .Y =_bbdf ,_bbdf ;var (_bfagdg *fillSegment ;_dggg int ;);for _bcdd .Len ()> 0{if _bfagdg ,_aaad =_dgaf (_bcdd );_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"");};_bbdf =_bfagdg ._bdbb ;for _cceb =_bfagdg ._baecb -1;_cceb >=0&&_gcde .GetPixel (_cceb ,_bbdf );_cceb --{if _aaad =_gcde .SetPixel (_cceb ,_bbdf ,0);_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _cceb >=_bfagdg ._baecb -1{for {for _cceb ++;_cceb <=_bfagdg ._ggcee +1&&_cceb <=_eface &&!_gcde .GetPixel (_cceb ,_bbdf );_cceb ++{};_dggg =_cceb ;if !(_cceb <=_bfagdg ._ggcee +1&&_cceb <=_eface ){break ;};for ;_cceb <=_eface &&_gcde .GetPixel (_cceb ,_bbdf );_cceb ++{if _aaad =_gcde .SetPixel (_cceb ,_bbdf ,0);_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _aaad =_cdeca (_bcdd ,_dggg ,_cceb -1,_bfagdg ._bdbb ,_bfagdg ._acae ,_eeaa ,&_cadfb );_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cceb > _bfagdg ._ggcee {if _aaad =_cdeca (_bcdd ,_bfagdg ._ggcee +1,_cceb -1,_bfagdg ._bdbb ,-_bfagdg ._acae ,_eeaa ,&_cadfb );_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_dggg =_cceb +1;if _dggg < _bfagdg ._baecb {if _aaad =_cdeca (_bcdd ,_dggg ,_bfagdg ._baecb -1,_bfagdg ._bdbb ,-_bfagdg ._acae ,_eeaa ,&_cadfb );_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_cceb =_bfagdg ._baecb ;for {for ;_cceb <=_eface &&_gcde .GetPixel (_cceb ,_bbdf );_cceb ++{if _aaad =_gcde .SetPixel (_cceb ,_bbdf ,0);_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _aaad =_cdeca (_bcdd ,_dggg ,_cceb -1,_bfagdg ._bdbb ,_bfagdg ._acae ,_eeaa ,&_cadfb );_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cceb > _bfagdg ._ggcee {if _aaad =_cdeca (_bcdd ,_bfagdg ._ggcee +1,_cceb -1,_bfagdg ._bdbb ,-_bfagdg ._acae ,_eeaa ,&_cadfb );_aaad !=nil {return nil ,_a .Wrap (_aaad ,_ffac ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _cceb ++;_cceb <=_bfagdg ._ggcee +1&&_cceb <=_eface &&!_gcde .GetPixel (_cceb ,_bbdf );_cceb ++{};_dggg =_cceb ;if !(_cceb <=_bfagdg ._ggcee +1&&_cceb <=_eface ){break ;};};};_cadfb .Max .X ++;_cadfb .Max .Y ++;return &_cadfb ,nil ;};type BoundaryCondition int ;func TstWordBitmapWithSpaces (t *_ad .T ,scale ...int )*Bitmap {_fgafb :=1;if len (scale )> 0{_fgafb =scale [0];};_bgaa :=3;_befcc :=9+7+15+2*_bgaa +2*_bgaa ;_efgd :=5+_bgaa +5+2*_bgaa ;_abcc :=New (_befcc *_fgafb ,_efgd *_fgafb );_bfbg :=&Bitmaps {};var _gffe *int ;_bgaa *=_fgafb ;_bfgg :=_bgaa ;_gffe =&_bfgg ;_aafa :=_bgaa ;_fecfc :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,_bgaa );_fecfc =TstISymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,_bgaa );_fecfc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,0);*_gffe =_bgaa ;_aafa =5*_fgafb +_bgaa ;_fecfc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,_bgaa );_fecfc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,1*_fgafb );_fecfc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bfbg ,_fecfc ,_gffe ,_aafa ,0);TstWriteSymbols (t ,_bfbg ,_abcc );return _abcc ;};type ClassedPoints struct{*Points ;_b .IntSlice ;_afbf func (_gdfd ,_eega int )bool ;};func MakePixelCentroidTab8 ()[]int {return _gdedc ()};func (_gacdg *ClassedPoints )Swap (i ,j int ){_gacdg .IntSlice [i ],_gacdg .IntSlice [j ]=_gacdg .IntSlice [j ],_gacdg .IntSlice [i ];};func _afa (_dgff ,_ddec *Bitmap )(*Bitmap ,error ){if _ddec ==nil {return nil ,_a .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 _ddec ==_dgff {return _dgff ,nil ;};if _dgff ==nil {_dgff =_ddec .createTemplate ();copy (_dgff .Data ,_ddec .Data );return _dgff ,nil ;};_ffda :=_dgff .resizeImageData (_ddec );if _ffda !=nil {return nil ,_a .Wrap (_ffda ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");};_dgff .Text =_ddec .Text ;copy (_dgff .Data ,_ddec .Data );return _dgff ,nil ;};func (_bbfgg *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _eefa ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_bbfgg .Values )==0{return nil ,_a .Error (_eefa ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_ffad :=&BitmapsArray {};_bbfgg .SortByWidth ();_aggde :=-1;_gbcca :=-1;for _baae :=0;_baae < len (_bbfgg .Values );_baae ++{_fagb :=_bbfgg .Values [_baae ].Width ;if _fagb > _aggde {_aggde =_fagb ;_gbcca ++;_ffad .Values =append (_ffad .Values ,&Bitmaps {});};_ffad .Values [_gbcca ].AddBitmap (_bbfgg .Values [_baae ]);};return _ffad ,nil ;};func NewClassedPoints (points *Points ,classes _b .IntSlice )(*ClassedPoints ,error ){const _babb ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_a .Error (_babb ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_a .Error (_babb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_dcfgb :=&ClassedPoints {Points :points ,IntSlice :classes };if _ccbb :=_dcfgb .validateIntSlice ();_ccbb !=nil {return nil ,_a .Wrap (_ccbb ,_babb ,"");};return _dcfgb ,nil ;};func (_agef *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_affd *Boxes ,_edf error ){const _fgg ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _agef ==nil {return nil ,_a .Error (_fgg ,"\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 ,_a .Error (_fgg ,"\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 _affd ,_edf =_agef .connComponentsBB (connectivity );_edf !=nil {return nil ,_a .Wrap (_edf ,_fgg ,"");};}else {if _affd ,_edf =_agef .connComponentsBitmapsBB (bms ,connectivity );_edf !=nil {return nil ,_a .Wrap (_edf ,_fgg ,"");};};return _affd ,nil ;};func TstVSymbol (t *_ad .T ,scale ...int )*Bitmap {_dgaed ,_gffc :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_fb .NoError (t ,_gffc );return TstGetScaledSymbol (t ,_dgaed ,scale ...);};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _afa (d ,s )};func TstWriteSymbols (t *_ad .T ,bms *Bitmaps ,src *Bitmap ){for _fedc :=0;_fedc < bms .Size ();_fedc ++{_cdgf :=bms .Values [_fedc ];_defc :=bms .Boxes [_fedc ];_dgegd :=src .RasterOperation (_defc .Min .X ,_defc .Min .Y ,_cdgf .Width ,_cdgf .Height ,PixSrc ,_cdgf ,0,0);_fb .NoError (t ,_dgegd );};};func (_bdcbf *Bitmaps )Size ()int {return len (_bdcbf .Values )};func (_eebda *byWidth )Swap (i ,j int ){_eebda .Values [i ],_eebda .Values [j ]=_eebda .Values [j ],_eebda .Values [i ];if _eebda .Boxes !=nil {_eebda .Boxes [i ],_eebda .Boxes [j ]=_eebda .Boxes [j ],_eebda .Boxes [i ];};};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func (_dca *Bitmap )SizesEqual (s *Bitmap )bool {if _dca ==s {return true ;};if _dca .Width !=s .Width ||_dca .Height !=s .Height {return false ;};return true ;};func (_agbd *Bitmap )equivalent (_addf *Bitmap )bool {if _agbd ==_addf {return true ;};if !_agbd .SizesEqual (_addf ){return false ;};_gdgg :=_cabe (_agbd ,_addf ,CmbOpXor );_cgcc :=_agbd .countPixels ();_gac :=int (0.25*float32 (_cgcc ));if _gdgg .thresholdPixelSum (_gac ){return false ;};var (_egab [9][9]int ;_bdde [18][9]int ;_acab [9][18]int ;_gfcd int ;_ecbb int ;);_cbfe :=9;_dbb :=_agbd .Height /_cbfe ;_aacf :=_agbd .Width /_cbfe ;_daf ,_gdcf :=_dbb /2,_aacf /2;if _dbb < _aacf {_daf =_aacf /2;_gdcf =_dbb /2;};_cdbd :=float64 (_daf )*float64 (_gdcf )*_bb .Pi ;_cgcd :=int (float64 (_dbb *_aacf /2)*0.9);_gcgc :=int (float64 (_aacf *_dbb /2)*0.9);for _afdf :=0;_afdf < _cbfe ;_afdf ++{_cdfc :=_aacf *_afdf +_gfcd ;var _afgd int ;if _afdf ==_cbfe -1{_gfcd =0;_afgd =_agbd .Width ;}else {_afgd =_cdfc +_aacf ;if ((_agbd .Width -_gfcd )%_cbfe )> 0{_gfcd ++;_afgd ++;};};for _dbda :=0;_dbda < _cbfe ;_dbda ++{_aace :=_dbb *_dbda +_ecbb ;var _ced int ;if _dbda ==_cbfe -1{_ecbb =0;_ced =_agbd .Height ;}else {_ced =_aace +_dbb ;if (_agbd .Height -_ecbb )%_cbfe > 0{_ecbb ++;_ced ++;};};var _bed ,_cfbf ,_dafd ,_ggdf int ;_bgdaa :=(_cdfc +_afgd )/2;_fcca :=(_aace +_ced )/2;for _ada :=_cdfc ;_ada < _afgd ;_ada ++{for _cbd :=_aace ;_cbd < _ced ;_cbd ++{if _gdgg .GetPixel (_ada ,_cbd ){if _ada < _bgdaa {_bed ++;}else {_cfbf ++;};if _cbd < _fcca {_ggdf ++;}else {_dafd ++;};};};};_egab [_afdf ][_dbda ]=_bed +_cfbf ;_bdde [_afdf *2][_dbda ]=_bed ;_bdde [_afdf *2+1][_dbda ]=_cfbf ;_acab [_afdf ][_dbda *2]=_ggdf ;_acab [_afdf ][_dbda *2+1]=_dafd ;};};for _fcda :=0;_fcda < _cbfe *2-1;_fcda ++{for _faeg :=0;_faeg < (_cbfe -1);_faeg ++{var _dbg int ;for _dafg :=0;_dafg < 2;_dafg ++{for _adb :=0;_adb < 2;_adb ++{_dbg +=_bdde [_fcda +_dafg ][_faeg +_adb ];};};if _dbg > _gcgc {return false ;};};};for _egcg :=0;_egcg < (_cbfe -1);_egcg ++{for _dgdf :=0;_dgdf < ((_cbfe *2)-1);_dgdf ++{var _dedf int ;for _bgcf :=0;_bgcf < 2;_bgcf ++{for _ebb :=0;_ebb < 2;_ebb ++{_dedf +=_acab [_egcg +_bgcf ][_dgdf +_ebb ];};};if _dedf > _cgcd {return false ;};};};for _egbd :=0;_egbd < (_cbfe -2);_egbd ++{for _baeeg :=0;_baeeg < (_cbfe -2);_baeeg ++{var _addfd ,_egee int ;for _dgfd :=0;_dgfd < 3;_dgfd ++{for _dfa :=0;_dfa < 3;_dfa ++{if _dgfd ==_dfa {_addfd +=_egab [_egbd +_dgfd ][_baeeg +_dfa ];};if (2-_dgfd )==_dfa {_egee +=_egab [_egbd +_dgfd ][_baeeg +_dfa ];};};};if _addfd > _gcgc ||_egee > _gcgc {return false ;};};};for _eea :=0;_eea < (_cbfe -1);_eea ++{for _daea :=0;_daea < (_cbfe -1);_daea ++{var _feaf int ;for _dfc :=0;_dfc < 2;_dfc ++{for _aeca :=0;_aeca < 2;_aeca ++{_feaf +=_egab [_eea +_dfc ][_daea +_aeca ];};};if float64 (_feaf )> _cdbd {return false ;};};};return true ;};var _baea =[]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 MakePixelSumTab8 ()[]int {return _aaec ()};func (_fbd Points )GetIntY (i int )(int ,error ){if i >=len (_fbd ){return 0,_a .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 (_fbd [i ].Y ),nil ;};func _gceeb (_gecbdb *Bitmap ,_cfcd ...MorphProcess )(_abbb *Bitmap ,_bdcbe error ){const _gaba ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _gecbdb ==nil {return nil ,_a .Error (_gaba ,"\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 (_cfcd )==0{return nil ,_a .Error (_gaba ,"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 _bdcbe =_bcbf (_cfcd ...);_bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"");};var _ggfd ,_dfcb ,_degd int ;_abbb =_gecbdb .Copy ();for _ ,_cee :=range _cfcd {switch _cee .Operation {case MopDilation :_ggfd ,_dfcb =_cee .getWidthHeight ();_abbb ,_bdcbe =DilateBrick (nil ,_abbb ,_ggfd ,_dfcb );if _bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"");};case MopErosion :_ggfd ,_dfcb =_cee .getWidthHeight ();_abbb ,_bdcbe =_adcab (nil ,_abbb ,_ggfd ,_dfcb );if _bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"");};case MopOpening :_ggfd ,_dfcb =_cee .getWidthHeight ();_abbb ,_bdcbe =_gbeee (nil ,_abbb ,_ggfd ,_dfcb );if _bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"");};case MopClosing :_ggfd ,_dfcb =_cee .getWidthHeight ();_abbb ,_bdcbe =_caed (nil ,_abbb ,_ggfd ,_dfcb );if _bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"");};case MopRankBinaryReduction :_abbb ,_bdcbe =_fee (_abbb ,_cee .Arguments ...);if _bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"");};case MopReplicativeBinaryExpansion :_abbb ,_bdcbe =_efad (_abbb ,_cee .Arguments [0]);if _bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"");};case MopAddBorder :_degd =_cee .Arguments [0];_abbb ,_bdcbe =_abbb .AddBorder (_degd ,0);if _bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"");};default:return nil ,_a .Error (_gaba ,"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 _degd > 0{_abbb ,_bdcbe =_abbb .RemoveBorder (_degd );if _bdcbe !=nil {return nil ,_a .Wrap (_bdcbe ,_gaba ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _abbb ,nil ;};var MorphBC BoundaryCondition ;const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_gead *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _ggbbc ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _gead ==nil {return nil ,_a .Error (_ggbbc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_gead .Values )-1{return nil ,_a .Errorf (_ggbbc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gead .Values [i ],nil ;};func (_ggdg *ClassedPoints )Len ()int {return _ggdg .IntSlice .Size ()};func TstImageBitmap ()*Bitmap {return _fdaa .Copy ()};func (_fedf *Bitmap )GetPixel (x ,y int )bool {_gab :=_fedf .GetByteIndex (x ,y );_cba :=_fedf .GetBitOffset (x );_dae :=uint (7-_cba );if _gab > len (_fedf .Data )-1{_bf .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 ,_fedf );return false ;};if (_fedf .Data [_gab ]>>_dae )&0x01>=1{return true ;};return false ;};type SizeSelection int ;func (_bda *Bitmap )ClipRectangle (box *_ff .Rectangle )(_bea *Bitmap ,_egdd *_ff .Rectangle ,_ccf error ){const _fcgba ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_a .Error (_fcgba ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_egdg ,_cfe :=_bda .Width ,_bda .Height ;_dfd :=_ff .Rect (0,0,_egdg ,_cfe );if !box .Overlaps (_dfd ){return nil ,nil ,_a .Error (_fcgba ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_fac :=box .Intersect (_dfd );_gegd ,_cfba :=_fac .Min .X ,_fac .Min .Y ;_fgf ,_gdff :=_fac .Dx (),_fac .Dy ();_bea =New (_fgf ,_gdff );_bea .Text =_bda .Text ;if _ccf =_bea .RasterOperation (0,0,_fgf ,_gdff ,PixSrc ,_bda ,_gegd ,_cfba );_ccf !=nil {return nil ,nil ,_a .Wrap (_ccf ,_fcgba ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");};_egdd =&_fac ;return _bea ,_egdd ,nil ;};func _dgaf (_gged *_b .Stack )(_gdcb *fillSegment ,_cgbbb error ){const _cdcd ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _gged ==nil {return nil ,_a .Error (_cdcd ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _gged .Aux ==nil {return nil ,_a .Error (_cdcd ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_ccgdb ,_ggfcb :=_gged .Pop ();if !_ggfcb {return nil ,nil ;};_gccf ,_ggfcb :=_ccgdb .(*fillSegment );if !_ggfcb {return nil ,_a .Error (_cdcd ,"\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");};_gdcb =&fillSegment {_gccf ._baecb ,_gccf ._ggcee ,_gccf ._bdbb +_gccf ._acae ,_gccf ._acae };_gged .Aux .Push (_gccf );return _gdcb ,nil ;};func _efad (_egfg *Bitmap ,_fabe int )(*Bitmap ,error ){const _ffgce ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _egfg ==nil {return nil ,_a .Error (_ffgce ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fabe <=0{return nil ,_a .Error (_ffgce ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _fabe ==1{_bgec ,_ebee :=_afa (nil ,_egfg );if _ebee !=nil {return nil ,_a .Wrap (_ebee ,_ffgce ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _bgec ,nil ;};_gfce ,_cccd :=_gdc (_egfg ,_fabe ,_fabe );if _cccd !=nil {return nil ,_a .Wrap (_cccd ,_ffgce ,"");};return _gfce ,nil ;};func (_babc *Bitmaps )AddBox (box *_ff .Rectangle ){_babc .Boxes =append (_babc .Boxes ,box )};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func ClipBoxToRectangle (box *_ff .Rectangle ,wi ,hi int )(_dab *_ff .Rectangle ,_gdcc error ){const _ggag ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_a .Error (_ggag ,"\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 ,_a .Error (_ggag ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_dab =&(*box );if _dab .Min .X < 0{_dab .Max .X +=_dab .Min .X ;_dab .Min .X =0;};if _dab .Min .Y < 0{_dab .Max .Y +=_dab .Min .Y ;_dab .Min .Y =0;};if _dab .Max .X > wi {_dab .Max .X =wi ;};if _dab .Max .Y > hi {_dab .Max .Y =hi ;};return _dab ,nil ;};func _fabf (_cbdg ,_gcfa *Bitmap ,_dedd ,_fdeb int )(_cddb error ){const _fdce ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_gfcfb ,_begg ,_cacc ,_afggf int ;_ccba ,_eabg ,_dcgf ,_gbfa ,_gcbce ,_gbfc ,_gfgae byte ;);for _gfcfb =0;_gfcfb < _dedd ;_gfcfb ++{_cacc =_gfcfb *_cbdg .RowStride ;_afggf =_gfcfb *_gcfa .RowStride ;for _begg =0;_begg < _fdeb ;_begg ++{_ccba ,_cddb =_cbdg .GetByte (_cacc +_begg );if _cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_eabg ,_cddb =_gcfa .GetByte (_afggf +_begg );if _cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _gfcfb > 0{_dcgf ,_cddb =_cbdg .GetByte (_cacc -_cbdg .RowStride +_begg );if _cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u0069\u0020\u003e \u0030");};_ccba |=_dcgf ;};if _begg > 0{_gbfa ,_cddb =_cbdg .GetByte (_cacc +_begg -1);if _cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u006a\u0020\u003e \u0030");};_ccba |=_gbfa <<7;};_ccba &=_eabg ;if _ccba ==0||(^_ccba )==0{if _cddb =_cbdg .SetByte (_cacc +_begg ,_ccba );_cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_gfgae =_ccba ;_ccba =(_ccba |(_ccba >>1)|(_ccba <<1))&_eabg ;if (_ccba ^_gfgae )==0{if _cddb =_cbdg .SetByte (_cacc +_begg ,_ccba );_cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _gfcfb =_dedd -1;_gfcfb >=0;_gfcfb --{_cacc =_gfcfb *_cbdg .RowStride ;_afggf =_gfcfb *_gcfa .RowStride ;for _begg =_fdeb -1;_begg >=0;_begg --{if _ccba ,_cddb =_cbdg .GetByte (_cacc +_begg );_cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _eabg ,_cddb =_gcfa .GetByte (_afggf +_begg );_cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _gfcfb < _dedd -1{if _gcbce ,_cddb =_cbdg .GetByte (_cacc +_cbdg .RowStride +_begg );_cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_ccba |=_gcbce ;};if _begg < _fdeb -1{if _gbfc ,_cddb =_cbdg .GetByte (_cacc +_begg +1);_cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_ccba |=_gbfc >>7;};_ccba &=_eabg ;if _ccba ==0||(^_ccba )==0{if _cddb =_cbdg .SetByte (_cacc +_begg ,_ccba );_cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\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 {_gfgae =_ccba ;_ccba =(_ccba |(_ccba >>1)|(_ccba <<1))&_eabg ;if (_ccba ^_gfgae )==0{if _cddb =_cbdg .SetByte (_cacc +_begg ,_ccba );_cddb !=nil {return _a .Wrap (_cddb ,_fdce ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");};break ;};};};};return nil ;};func _dfbc (_dfdad *Bitmap ,_bcab ,_cbag ,_abed ,_caaee int ,_aage RasterOperator ){if _bcab < 0{_abed +=_bcab ;_bcab =0;};_ffabb :=_bcab +_abed -_dfdad .Width ;if _ffabb > 0{_abed -=_ffabb ;};if _cbag < 0{_caaee +=_cbag ;_cbag =0;};_febe :=_cbag +_caaee -_dfdad .Height ;if _febe > 0{_caaee -=_febe ;};if _abed <=0||_caaee <=0{return ;};if (_bcab &7)==0{_abdc (_dfdad ,_bcab ,_cbag ,_abed ,_caaee ,_aage );}else {_eeff (_dfdad ,_bcab ,_cbag ,_abed ,_caaee ,_aage );};};func (_caba *Bitmaps )makeSizeIndicator (_aefg ,_dbed int ,_defff LocationFilter ,_cfbc SizeComparison )(_ffcge *_b .NumSlice ,_eafdf error ){const _cgaf ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _caba ==nil {return nil ,_a .Error (_cgaf ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _defff {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_cgaf ,"\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",_defff );};switch _cfbc {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_a .Errorf (_cgaf ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_cfbc );};_ffcge =&_b .NumSlice {};var (_gceee ,_aedb ,_gefb int ;_aeebg *Bitmap ;);for _ ,_aeebg =range _caba .Values {_gceee =0;_aedb ,_gefb =_aeebg .Width ,_aeebg .Height ;switch _defff {case LocSelectWidth :if (_cfbc ==SizeSelectIfLT &&_aedb < _aefg )||(_cfbc ==SizeSelectIfGT &&_aedb > _aefg )||(_cfbc ==SizeSelectIfLTE &&_aedb <=_aefg )||(_cfbc ==SizeSelectIfGTE &&_aedb >=_aefg )||(_cfbc ==SizeSelectIfEQ &&_aedb ==_aefg ){_gceee =1;};case LocSelectHeight :if (_cfbc ==SizeSelectIfLT &&_gefb < _dbed )||(_cfbc ==SizeSelectIfGT &&_gefb > _dbed )||(_cfbc ==SizeSelectIfLTE &&_gefb <=_dbed )||(_cfbc ==SizeSelectIfGTE &&_gefb >=_dbed )||(_cfbc ==SizeSelectIfEQ &&_gefb ==_dbed ){_gceee =1;};case LocSelectIfEither :if (_cfbc ==SizeSelectIfLT &&(_aedb < _aefg ||_gefb < _dbed ))||(_cfbc ==SizeSelectIfGT &&(_aedb > _aefg ||_gefb > _dbed ))||(_cfbc ==SizeSelectIfLTE &&(_aedb <=_aefg ||_gefb <=_dbed ))||(_cfbc ==SizeSelectIfGTE &&(_aedb >=_aefg ||_gefb >=_dbed ))||(_cfbc ==SizeSelectIfEQ &&(_aedb ==_aefg ||_gefb ==_dbed )){_gceee =1;};case LocSelectIfBoth :if (_cfbc ==SizeSelectIfLT &&(_aedb < _aefg &&_gefb < _dbed ))||(_cfbc ==SizeSelectIfGT &&(_aedb > _aefg &&_gefb > _dbed ))||(_cfbc ==SizeSelectIfLTE &&(_aedb <=_aefg &&_gefb <=_dbed ))||(_cfbc ==SizeSelectIfGTE &&(_aedb >=_aefg &&_gefb >=_dbed ))||(_cfbc ==SizeSelectIfEQ &&(_aedb ==_aefg &&_gefb ==_dbed )){_gceee =1;};};_ffcge .AddInt (_gceee );};return _ffcge ,nil ;};func (_bcdc *ClassedPoints )SortByX (){_bcdc ._afbf =_bcdc .xSortFunction ();_ae .Sort (_bcdc )};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _babaa (d ,s ,sel )};var (_gbde =_deeb ();_fcba =_cgf ();_ebbc =_ccd (););func _ccfe (_fgcg ,_ddgb *Bitmap ,_bdea ,_gfee ,_gcgcg ,_dbce ,_adce int ,_dadc CombinationOperator )error {var _fef int ;_efba :=func (){_fef ++;_gcgcg +=_ddgb .RowStride ;_dbce +=_fgcg .RowStride ;_adce +=_fgcg .RowStride };for _fef =_bdea ;_fef < _gfee ;_efba (){_cce :=_gcgcg ;for _dba :=_dbce ;_dba <=_adce ;_dba ++{_gbee ,_aceb :=_ddgb .GetByte (_cce );if _aceb !=nil {return _aceb ;};_dcbe ,_aceb :=_fgcg .GetByte (_dba );if _aceb !=nil {return _aceb ;};if _aceb =_ddgb .SetByte (_cce ,_gbgd (_gbee ,_dcbe ,_dadc ));_aceb !=nil {return _aceb ;};_cce ++;};};return nil ;};func _bcbf (_aeec ...MorphProcess )(_fbee error ){const _cgdf ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _aacd ,_effa int ;for _gccc ,_dcagb :=range _aeec {if _fbee =_dcagb .verify (_gccc ,&_aacd ,&_effa );_fbee !=nil {return _a .Wrap (_fbee ,_cgdf ,"");};};if _effa !=0&&_aacd !=0{return _a .Error (_cgdf ,"\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 (_cfc *Bitmap )setEightPartlyBytes (_ecaa ,_eec int ,_edga uint64 )(_bfac error ){var (_geed byte ;_effg int ;);const _bbd ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _aaf :=1;_aaf <=_eec ;_aaf ++{_effg =64-_aaf *8;_geed =byte (_edga >>uint (_effg )&0xff);_bf .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",_geed ,_ecaa ,_ecaa +_aaf -1,_eec ,_effg );if _bfac =_cfc .SetByte (_ecaa +_aaf -1,_geed );_bfac !=nil {return _a .Wrap (_bfac ,_bbd ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_geec :=_cfc .RowStride *8-_cfc .Width ;if _geec ==0{return nil ;};_effg -=8;_geed =byte (_edga >>uint (_effg )&0xff)<<uint (_geec );if _bfac =_cfc .SetByte (_ecaa +_eec ,_geed );_bfac !=nil {return _a .Wrap (_bfac ,_bbd ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_accc *Bitmap )setBit (_aaa int ){_accc .Data [(_aaa >>3)]|=0x80>>uint (_aaa &7)};func _ebcf (_baa ,_agba int )int {if _baa < _agba {return _baa ;};return _agba ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_bggf :=_gbac (h ,w ,"");_bggf .setOrigin (cy ,cx );var _cfgb ,_ecba int ;for _cfgb =0;_cfgb < h ;_cfgb ++{for _ecba =0;_ecba < w ;_ecba ++{_bggf .Data [_cfgb ][_ecba ]=tp ;};};return _bggf ;};func Centroids (bms []*Bitmap )(*Points ,error ){_bbga :=make ([]Point ,len (bms ));_eae :=_gdedc ();_bfgc :=_aaec ();var _bede error ;for _dgdc ,_egcf :=range bms {_bbga [_dgdc ],_bede =_egcf .centroid (_eae ,_bfgc );if _bede !=nil {return nil ,_bede ;};};_eaeb :=Points (_bbga );return &_eaeb ,nil ;};func (_gfcgc *Bitmaps )GetBox (i int )(*_ff .Rectangle ,error ){const _decd ="\u0047\u0065\u0074\u0042\u006f\u0078";if _gfcgc ==nil {return nil ,_a .Error (_decd ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_gfcgc .Boxes )-1{return nil ,_a .Errorf (_decd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gfcgc .Boxes [i ],nil ;};func (_adff *Boxes )makeSizeIndicator (_ebcg ,_gaaf int ,_dgbe LocationFilter ,_dged SizeComparison )*_b .NumSlice {_bbb :=&_b .NumSlice {};var _efed ,_fegg ,_ggce int ;for _ ,_cbc :=range *_adff {_efed =0;_fegg ,_ggce =_cbc .Dx (),_cbc .Dy ();switch _dgbe {case LocSelectWidth :if (_dged ==SizeSelectIfLT &&_fegg < _ebcg )||(_dged ==SizeSelectIfGT &&_fegg > _ebcg )||(_dged ==SizeSelectIfLTE &&_fegg <=_ebcg )||(_dged ==SizeSelectIfGTE &&_fegg >=_ebcg ){_efed =1;};case LocSelectHeight :if (_dged ==SizeSelectIfLT &&_ggce < _gaaf )||(_dged ==SizeSelectIfGT &&_ggce > _gaaf )||(_dged ==SizeSelectIfLTE &&_ggce <=_gaaf )||(_dged ==SizeSelectIfGTE &&_ggce >=_gaaf ){_efed =1;};case LocSelectIfEither :if (_dged ==SizeSelectIfLT &&(_ggce < _gaaf ||_fegg < _ebcg ))||(_dged ==SizeSelectIfGT &&(_ggce > _gaaf ||_fegg > _ebcg ))||(_dged ==SizeSelectIfLTE &&(_ggce <=_gaaf ||_fegg <=_ebcg ))||(_dged ==SizeSelectIfGTE &&(_ggce >=_gaaf ||_fegg >=_ebcg )){_efed =1;};case LocSelectIfBoth :if (_dged ==SizeSelectIfLT &&(_ggce < _gaaf &&_fegg < _ebcg ))||(_dged ==SizeSelectIfGT &&(_ggce > _gaaf &&_fegg > _ebcg ))||(_dged ==SizeSelectIfLTE &&(_ggce <=_gaaf &&_fegg <=_ebcg ))||(_dged ==SizeSelectIfGTE &&(_ggce >=_gaaf &&_fegg >=_ebcg )){_efed =1;};};_bbb .AddInt (_efed );};return _bbb ;};func (_fdcf *ClassedPoints )ySortFunction ()func (_befb int ,_bbea int )bool {return func (_aad ,_dgea int )bool {return _fdcf .YAtIndex (_aad )< _fdcf .YAtIndex (_dgea )};};func (_edag *Bitmaps )String ()string {_ceca :=_e .Builder {};for _ ,_bcfge :=range _edag .Values {_ceca .WriteString (_bcfge .String ());_ceca .WriteRune ('\n');};return _ceca .String ();};func (_dbab *byWidth )Len ()int {return len (_dbab .Values )};func (_bdcef *Bitmaps )AddBitmap (bm *Bitmap ){_bdcef .Values =append (_bdcef .Values ,bm )};var (_dcdf *Bitmap ;_fdaa *Bitmap ;);func (_ecfb *Bitmap )centroid (_edff ,_afac []int )(Point ,error ){_bfgd :=Point {};_ecfb .setPadBits (0);if len (_edff )==0{_edff =_gdedc ();};if len (_afac )==0{_afac =_aaec ();};var _bgedd ,_ccgc ,_dfafa ,_gbga ,_acbag ,_fbfa int ;var _abcd byte ;for _acbag =0;_acbag < _ecfb .Height ;_acbag ++{_dedfg :=_ecfb .RowStride *_acbag ;_gbga =0;for _fbfa =0;_fbfa < _ecfb .RowStride ;_fbfa ++{_abcd =_ecfb .Data [_dedfg +_fbfa ];if _abcd !=0{_gbga +=_afac [_abcd ];_bgedd +=_edff [_abcd ]+_fbfa *8*_afac [_abcd ];};};_dfafa +=_gbga ;_ccgc +=_gbga *_acbag ;};if _dfafa !=0{_bfgd .X =float32 (_bgedd )/float32 (_dfafa );_bfgd .Y =float32 (_ccgc )/float32 (_dfafa );};return _bfgd ,nil ;};func (_cace *Bitmap )InverseData (){_cace .inverseData ()};func (_ffd *Bitmap )removeBorderGeneral (_eggg ,_gfbc ,_fgfd ,_bab int )(*Bitmap ,error ){const _ddbf ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _eggg < 0||_gfbc < 0||_fgfd < 0||_bab < 0{return nil ,_a .Error (_ddbf ,"\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");};_cdd ,_eafd :=_ffd .Width ,_ffd .Height ;_eefde :=_cdd -_eggg -_gfbc ;_agc :=_eafd -_fgfd -_bab ;if _eefde <=0{return nil ,_a .Errorf (_ddbf ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_eefde );};if _agc <=0{return nil ,_a .Errorf (_ddbf ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_agc );};_eeb :=New (_eefde ,_agc );_eeb .Color =_ffd .Color ;_dfda :=_eeb .RasterOperation (0,0,_eefde ,_agc ,PixSrc ,_ffd ,_eggg ,_fgfd );if _dfda !=nil {return nil ,_a .Wrap (_dfda ,_ddbf ,"");};return _eeb ,nil ;};func (_dcbg *Selection )findMaxTranslations ()(_ccaa ,_bfb ,_ggaa ,_dcce int ){for _dadcd :=0;_dadcd < _dcbg .Height ;_dadcd ++{for _daef :=0;_daef < _dcbg .Width ;_daef ++{if _dcbg .Data [_dadcd ][_daef ]==SelHit {_ccaa =_baba (_ccaa ,_dcbg .Cx -_daef );_bfb =_baba (_bfb ,_dcbg .Cy -_dadcd );_ggaa =_baba (_ggaa ,_daef -_dcbg .Cx );_dcce =_baba (_dcce ,_dadcd -_dcbg .Cy );};};};return _ccaa ,_bfb ,_ggaa ,_dcce ;};func _gfbf (_effe ,_bcg ,_feed *Bitmap )(*Bitmap ,error ){const _bgdg ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _bcg ==nil {return nil ,_a .Error (_bgdg ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _feed ==nil {return nil ,_a .Error (_bgdg ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _effe ==_feed {return nil ,_a .Error (_bgdg ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_bcg .SizesEqual (_feed ){_bf .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",_bgdg );};var _gbae error ;if _effe ,_gbae =_afa (_effe ,_bcg );_gbae !=nil {return nil ,_a .Wrap (_gbae ,_bgdg ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _gbae =_effe .RasterOperation (0,0,_effe .Width ,_effe .Height ,PixSrcXorDst ,_feed ,0,0);_gbae !=nil {return nil ,_a .Wrap (_gbae ,_bgdg ,"");};return _effe ,nil ;};func (_dege *ClassedPoints )validateIntSlice ()error {const _gcfb ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_afebd :=range _dege .IntSlice {if _afebd >=(_dege .Points .Size ()){return _a .Errorf (_gcfb ,"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",_afebd ,_dege .Points .Size ());};};return nil ;};func (_bafd *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _gfeeg ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_bgga ,_gaec :=_bafd .selectByIndexes (idx );if _gaec !=nil {return nil ,_a .Wrap (_gaec ,_gfeeg ,"");};return _bgga ,nil ;};func (_aeda *ClassedPoints )XAtIndex (i int )float32 {return (*_aeda .Points )[_aeda .IntSlice [i ]].X };func (_agad *Bitmap )setEightFullBytes (_beag int ,_deda uint64 )error {if _beag +7> len (_agad .Data )-1{return _a .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");};_agad .Data [_beag ]=byte ((_deda &0xff00000000000000)>>56);_agad .Data [_beag +1]=byte ((_deda &0xff000000000000)>>48);_agad .Data [_beag +2]=byte ((_deda &0xff0000000000)>>40);_agad .Data [_beag +3]=byte ((_deda &0xff00000000)>>32);_agad .Data [_beag +4]=byte ((_deda &0xff000000)>>24);_agad .Data [_beag +5]=byte ((_deda &0xff0000)>>16);_agad .Data [_beag +6]=byte ((_deda &0xff00)>>8);_agad .Data [_beag +7]=byte (_deda &0xff);return nil ;};const (_dfgd shift =iota ;_abaf ;);func (_dcb *Bitmap )countPixels ()int {var (_egdgd int ;_gcdd uint8 ;_bgea byte ;_ebc int ;);_ebg :=_dcb .RowStride ;_bgcc :=uint (_dcb .Width &0x07);if _bgcc !=0{_gcdd =uint8 ((0xff<<(8-_bgcc ))&0xff);_ebg --;};for _gcfc :=0;_gcfc < _dcb .Height ;_gcfc ++{for _ebc =0;_ebc < _ebg ;_ebc ++{_bgea =_dcb .Data [_gcfc *_dcb .RowStride +_ebc ];_egdgd +=int (_bfagd [_bgea ]);};if _bgcc !=0{_egdgd +=int (_bfagd [_dcb .Data [_gcfc *_dcb .RowStride +_ebc ]&_gcdd ]);};};return _egdgd ;};func _gagff (_ddad ,_fece *Bitmap ,_deb ,_cff ,_ddfc ,_cdcb ,_gdffe ,_bgg ,_bdff ,_caab int ,_bee CombinationOperator ,_aacca int )error {var _fege int ;_fbgg :=func (){_fege ++;_ddfc +=_fece .RowStride ;_cdcb +=_ddad .RowStride ;_gdffe +=_ddad .RowStride };for _fege =_deb ;_fege < _cff ;_fbgg (){var _afe uint16 ;_egff :=_ddfc ;for _bag :=_cdcb ;_bag <=_gdffe ;_bag ++{_cfcf ,_egda :=_fece .GetByte (_egff );if _egda !=nil {return _egda ;};_gdgd ,_egda :=_ddad .GetByte (_bag );if _egda !=nil {return _egda ;};_afe =(_afe |(uint16 (_gdgd )&0xff))<<uint (_caab );_gdgd =byte (_afe >>8);if _egda =_fece .SetByte (_egff ,_gbgd (_cfcf ,_gdgd ,_bee ));_egda !=nil {return _egda ;};_egff ++;_afe <<=uint (_bdff );if _bag ==_gdffe {_gdgd =byte (_afe >>(8-uint8 (_caab )));if _aacca !=0{_gdgd =_ceb (uint (8+_bgg ),_gdgd );};_cfcf ,_egda =_fece .GetByte (_egff );if _egda !=nil {return _egda ;};if _egda =_fece .SetByte (_egff ,_gbgd (_cfcf ,_gdgd ,_bee ));_egda !=nil {return _egda ;};};};};return nil ;};func _gaga (_bgbg ,_cdfca *Bitmap ,_gege ,_bdaeb ,_eagd ,_ggbg ,_ddcc ,_fddf ,_dec ,_aegec int ,_affe CombinationOperator )error {var _bad int ;_ebeg :=func (){_bad ++;_eagd +=_cdfca .RowStride ;_ggbg +=_bgbg .RowStride ;_ddcc +=_bgbg .RowStride };for _bad =_gege ;_bad < _bdaeb ;_ebeg (){var _febdd uint16 ;_gaf :=_eagd ;for _fbfe :=_ggbg ;_fbfe <=_ddcc ;_fbfe ++{_gfbcg ,_afbg :=_cdfca .GetByte (_gaf );if _afbg !=nil {return _afbg ;};_fefe ,_afbg :=_bgbg .GetByte (_fbfe );if _afbg !=nil {return _afbg ;};_febdd =(_febdd |uint16 (_fefe ))<<uint (_aegec );_fefe =byte (_febdd >>8);if _fbfe ==_ddcc {_fefe =_ceb (uint (_fddf ),_fefe );};if _afbg =_cdfca .SetByte (_gaf ,_gbgd (_gfbcg ,_fefe ,_affe ));_afbg !=nil {return _afbg ;};_gaf ++;_febdd <<=uint (_dec );};};return nil ;};func (_egcb *ClassedPoints )SortByY (){_egcb ._afbf =_egcb .ySortFunction ();_ae .Sort (_egcb )};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func TstASymbol (t *_ad .T )*Bitmap {t .Helper ();_bbacd :=New (6,6);_fb .NoError (t ,_bbacd .SetPixel (1,0,1));_fb .NoError (t ,_bbacd .SetPixel (2,0,1));_fb .NoError (t ,_bbacd .SetPixel (3,0,1));_fb .NoError (t ,_bbacd .SetPixel (4,0,1));_fb .NoError (t ,_bbacd .SetPixel (5,1,1));_fb .NoError (t ,_bbacd .SetPixel (1,2,1));_fb .NoError (t ,_bbacd .SetPixel (2,2,1));_fb .NoError (t ,_bbacd .SetPixel (3,2,1));_fb .NoError (t ,_bbacd .SetPixel (4,2,1));_fb .NoError (t ,_bbacd .SetPixel (5,2,1));_fb .NoError (t ,_bbacd .SetPixel (0,3,1));_fb .NoError (t ,_bbacd .SetPixel (5,3,1));_fb .NoError (t ,_bbacd .SetPixel (0,4,1));_fb .NoError (t ,_bbacd .SetPixel (5,4,1));_fb .NoError (t ,_bbacd .SetPixel (1,5,1));_fb .NoError (t ,_bbacd .SetPixel (2,5,1));_fb .NoError (t ,_bbacd .SetPixel (3,5,1));_fb .NoError (t ,_bbacd .SetPixel (4,5,1));_fb .NoError (t ,_bbacd .SetPixel (5,5,1));return _bbacd ;};func init (){const _ebbd ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_dcdf =New (50,40);var _effeb error ;_dcdf ,_effeb =_dcdf .AddBorder (2,1);if _effeb !=nil {panic (_a .Wrap (_effeb ,_ebbd ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_fdaa ,_effeb =NewWithData (50,22,_baea );if _effeb !=nil {panic (_a .Wrap (_effeb ,_ebbd ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};var (_cdfe =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_ccda =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func TstPSymbol (t *_ad .T )*Bitmap {t .Helper ();_cdfec :=New (5,8);_fb .NoError (t ,_cdfec .SetPixel (0,0,1));_fb .NoError (t ,_cdfec .SetPixel (1,0,1));_fb .NoError (t ,_cdfec .SetPixel (2,0,1));_fb .NoError (t ,_cdfec .SetPixel (3,0,1));_fb .NoError (t ,_cdfec .SetPixel (4,1,1));_fb .NoError (t ,_cdfec .SetPixel (0,1,1));_fb .NoError (t ,_cdfec .SetPixel (4,2,1));_fb .NoError (t ,_cdfec .SetPixel (0,2,1));_fb .NoError (t ,_cdfec .SetPixel (4,3,1));_fb .NoError (t ,_cdfec .SetPixel (0,3,1));_fb .NoError (t ,_cdfec .SetPixel (0,4,1));_fb .NoError (t ,_cdfec .SetPixel (1,4,1));_fb .NoError (t ,_cdfec .SetPixel (2,4,1));_fb .NoError (t ,_cdfec .SetPixel (3,4,1));_fb .NoError (t ,_cdfec .SetPixel (0,5,1));_fb .NoError (t ,_cdfec .SetPixel (0,6,1));_fb .NoError (t ,_cdfec .SetPixel (0,7,1));return _cdfec ;};func (_agbf *byHeight )Swap (i ,j int ){_agbf .Values [i ],_agbf .Values [j ]=_agbf .Values [j ],_agbf .Values [i ];if _agbf .Boxes !=nil {_agbf .Boxes [i ],_agbf .Boxes [j ]=_agbf .Boxes [j ],_agbf .Boxes [i ];};};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_afgg *Bitmap )Equals (s *Bitmap )bool {if len (_afgg .Data )!=len (s .Data )||_afgg .Width !=s .Width ||_afgg .Height !=s .Height {return false ;};for _ecb :=0;_ecb < _afgg .Height ;_ecb ++{_bfc :=_ecb *_afgg .RowStride ;for _dbd :=0;_dbd < _afgg .RowStride ;_dbd ++{if _afgg .Data [_bfc +_dbd ]!=s .Data [_bfc +_dbd ]{return false ;};};};return true ;};func (_aeb *Bitmap )addBorderGeneral (_bgdc ,_gfc ,_fab ,_edac int ,_cbf int )(*Bitmap ,error ){const _becf ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _bgdc < 0||_gfc < 0||_fab < 0||_edac < 0{return nil ,_a .Error (_becf ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_acef ,_fafa :=_aeb .Width ,_aeb .Height ;_bef :=_acef +_bgdc +_gfc ;_cge :=_fafa +_fab +_edac ;_bafgf :=New (_bef ,_cge );_bafgf .Color =_aeb .Color ;_edacd :=PixClr ;if _cbf > 0{_edacd =PixSet ;};_fgad :=_bafgf .RasterOperation (0,0,_bgdc ,_cge ,_edacd ,nil ,0,0);if _fgad !=nil {return nil ,_a .Wrap (_fgad ,_becf ,"\u006c\u0065\u0066\u0074");};_fgad =_bafgf .RasterOperation (_bef -_gfc ,0,_gfc ,_cge ,_edacd ,nil ,0,0);if _fgad !=nil {return nil ,_a .Wrap (_fgad ,_becf ,"\u0072\u0069\u0067h\u0074");};_fgad =_bafgf .RasterOperation (0,0,_bef ,_fab ,_edacd ,nil ,0,0);if _fgad !=nil {return nil ,_a .Wrap (_fgad ,_becf ,"\u0074\u006f\u0070");};_fgad =_bafgf .RasterOperation (0,_cge -_edac ,_bef ,_edac ,_edacd ,nil ,0,0);if _fgad !=nil {return nil ,_a .Wrap (_fgad ,_becf ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_fgad =_bafgf .RasterOperation (_bgdc ,_fab ,_acef ,_fafa ,PixSrc ,_aeb ,0,0);if _fgad !=nil {return nil ,_a .Wrap (_fgad ,_becf ,"\u0063\u006f\u0070\u0079");};return _bafgf ,nil ;};func _deab (_geedg *Bitmap ,_fddd ,_feedf ,_cgfa ,_cfg int ,_bff RasterOperator ,_dbfc *Bitmap ,_cafd ,_fdef int )error {var (_aggb bool ;_dcfd bool ;_ffab byte ;_adbdd int ;_becg int ;_edbce int ;_cggb int ;_egba bool ;_cedg int ;_bdeg int ;_acdd int ;_eaaac bool ;_acfb byte ;_cdaa int ;_bbbb int ;_cgbd int ;_bdgc byte ;_eead int ;_gcba int ;_feca uint ;_efda uint ;_acdde byte ;_cadb shift ;_gbag bool ;_bfgfe bool ;_ccaba ,_cec int ;);if _cafd &7!=0{_gcba =8-(_cafd &7);};if _fddd &7!=0{_becg =8-(_fddd &7);};if _gcba ==0&&_becg ==0{_acdde =_ccda [0];}else {if _becg > _gcba {_feca =uint (_becg -_gcba );}else {_feca =uint (8-(_gcba -_becg ));};_efda =8-_feca ;_acdde =_ccda [_feca ];};if (_fddd &7)!=0{_aggb =true ;_adbdd =8-(_fddd &7);_ffab =_ccda [_adbdd ];_edbce =_geedg .RowStride *_feedf +(_fddd >>3);_cggb =_dbfc .RowStride *_fdef +(_cafd >>3);_eead =8-(_cafd &7);if _adbdd > _eead {_cadb =_dfgd ;if _cgfa >=_gcba {_gbag =true ;};}else {_cadb =_abaf ;};};if _cgfa < _adbdd {_dcfd =true ;_ffab &=_cdfe [8-_adbdd +_cgfa ];};if !_dcfd {_cedg =(_cgfa -_adbdd )>>3;if _cedg !=0{_egba =true ;_bdeg =_geedg .RowStride *_feedf +((_fddd +_becg )>>3);_acdd =_dbfc .RowStride *_fdef +((_cafd +_becg )>>3);};};_cdaa =(_fddd +_cgfa )&7;if !(_dcfd ||_cdaa ==0){_eaaac =true ;_acfb =_cdfe [_cdaa ];_bbbb =_geedg .RowStride *_feedf +((_fddd +_becg )>>3)+_cedg ;_cgbd =_dbfc .RowStride *_fdef +((_cafd +_becg )>>3)+_cedg ;if _cdaa > int (_efda ){_bfgfe =true ;};};switch _bff {case PixSrc :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],_bdgc ,_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]=_bdgc ;};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],_bdgc ,_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixNotSrc :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],^_bdgc ,_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]=^_bdgc ;};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],^_bdgc ,_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixSrcOrDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],_bdgc |_geedg .Data [_edbce ],_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]|=_bdgc ;};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],_bdgc |_geedg .Data [_bbbb ],_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixSrcAndDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],_bdgc &_geedg .Data [_edbce ],_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]&=_bdgc ;};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],_bdgc &_geedg .Data [_bbbb ],_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixSrcXorDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],_bdgc ^_geedg .Data [_edbce ],_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]^=_bdgc ;};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],_bdgc ^_geedg .Data [_bbbb ],_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixNotSrcOrDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],^_bdgc |_geedg .Data [_edbce ],_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]|=^_bdgc ;};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],^_bdgc |_geedg .Data [_bbbb ],_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixNotSrcAndDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],^_bdgc &_geedg .Data [_edbce ],_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]&=^_bdgc ;};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],^_bdgc &_geedg .Data [_bbbb ],_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixSrcOrNotDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],_bdgc |^_geedg .Data [_edbce ],_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]=_bdgc |^_geedg .Data [_bdeg +_cec ];};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],_bdgc |^_geedg .Data [_bbbb ],_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixSrcAndNotDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],_bdgc &^_geedg .Data [_edbce ],_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]=_bdgc &^_geedg .Data [_bdeg +_cec ];};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],_bdgc &^_geedg .Data [_bbbb ],_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixNotPixSrcOrDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],^(_bdgc |_geedg .Data [_edbce ]),_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]=^(_bdgc |_geedg .Data [_bdeg +_cec ]);};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],^(_bdgc |_geedg .Data [_bbbb ]),_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixNotPixSrcAndDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],^(_bdgc &_geedg .Data [_edbce ]),_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]=^(_bdgc &_geedg .Data [_bdeg +_cec ]);};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],^(_bdgc &_geedg .Data [_bbbb ]),_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};case PixNotPixSrcXorDst :if _aggb {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{if _cadb ==_dfgd {_bdgc =_dbfc .Data [_cggb ]<<_feca ;if _gbag {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cggb +1]>>_efda ,_acdde );};}else {_bdgc =_dbfc .Data [_cggb ]>>_efda ;};_geedg .Data [_edbce ]=_cdag (_geedg .Data [_edbce ],^(_bdgc ^_geedg .Data [_edbce ]),_ffab );_edbce +=_geedg .RowStride ;_cggb +=_dbfc .RowStride ;};};if _egba {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{for _cec =0;_cec < _cedg ;_cec ++{_bdgc =_cdag (_dbfc .Data [_acdd +_cec ]<<_feca ,_dbfc .Data [_acdd +_cec +1]>>_efda ,_acdde );_geedg .Data [_bdeg +_cec ]=^(_bdgc ^_geedg .Data [_bdeg +_cec ]);};_bdeg +=_geedg .RowStride ;_acdd +=_dbfc .RowStride ;};};if _eaaac {for _ccaba =0;_ccaba < _cfg ;_ccaba ++{_bdgc =_dbfc .Data [_cgbd ]<<_feca ;if _bfgfe {_bdgc =_cdag (_bdgc ,_dbfc .Data [_cgbd +1]>>_efda ,_acdde );};_geedg .Data [_bbbb ]=_cdag (_geedg .Data [_bbbb ],^(_bdgc ^_geedg .Data [_bbbb ]),_acfb );_bbbb +=_geedg .RowStride ;_cgbd +=_dbfc .RowStride ;};};default:_bf .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",_bff );return _a .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 TstFrameBitmap ()*Bitmap {return _dcdf .Copy ()};func (_abd *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _abd .Copy (),nil ;};_eefd ,_bcc :=_abd .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _bcc !=nil {return nil ,_a .Wrap (_bcc ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _eefd ,nil ;};func (_cdbc *Bitmap )GetByte (index int )(byte ,error ){if index > len (_cdbc .Data )-1||index < 0{return 0,_a .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 _cdbc .Data [index ],nil ;};func _ceb (_gff uint ,_def byte )byte {return _def >>_gff <<_gff };func _fee (_fgd *Bitmap ,_fbcf ...int )(_cfb *Bitmap ,_cae error ){const _dgdg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _fgd ==nil {return nil ,_a .Error (_dgdg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_fbcf )==0||len (_fbcf )> 4{return nil ,_a .Error (_dgdg ,"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 _fbcf [0]<=0{_bf .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");_cfb ,_cae =_afa (nil ,_fgd );if _cae !=nil {return nil ,_a .Wrap (_cae ,_dgdg ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");};return _cfb ,nil ;};_caa :=_eda ();_cfb =_fgd ;for _dgf ,_caaa :=range _fbcf {if _caaa <=0{break ;};_cfb ,_cae =_faf (_cfb ,_caaa ,_caa );if _cae !=nil {return nil ,_a .Wrapf (_cae ,_dgdg ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_dgf );};};return _cfb ,nil ;};func (_gfb *Bitmap )clearAll ()error {return _gfb .RasterOperation (0,0,_gfb .Width ,_gfb .Height ,PixClr ,nil ,0,0);};func _deee (_acg ,_aee *Bitmap ,_bc int ,_fag []byte ,_ggd int )(_dge error ){const _ecef ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_fbg ,_gcd ,_gb ,_febg ,_adc ,_fga ,_gbb ,_ebd int ;_efb ,_egf uint32 ;_bfag ,_gcb byte ;_bfeb uint16 ;);_geg :=make ([]byte ,4);_dfe :=make ([]byte ,4);for _gb =0;_gb < _acg .Height -1;_gb ,_febg =_gb +2,_febg +1{_fbg =_gb *_acg .RowStride ;_gcd =_febg *_aee .RowStride ;for _adc ,_fga =0,0;_adc < _ggd ;_adc ,_fga =_adc +4,_fga +1{for _gbb =0;_gbb < 4;_gbb ++{_ebd =_fbg +_adc +_gbb ;if _ebd <=len (_acg .Data )-1&&_ebd < _fbg +_acg .RowStride {_geg [_gbb ]=_acg .Data [_ebd ];}else {_geg [_gbb ]=0x00;};_ebd =_fbg +_acg .RowStride +_adc +_gbb ;if _ebd <=len (_acg .Data )-1&&_ebd < _fbg +(2*_acg .RowStride ){_dfe [_gbb ]=_acg .Data [_ebd ];}else {_dfe [_gbb ]=0x00;};};_efb =_ag .BigEndian .Uint32 (_geg );_egf =_ag .BigEndian .Uint32 (_dfe );_egf |=_efb ;_egf |=_egf <<1;_egf &=0xaaaaaaaa;_efb =_egf |(_egf <<7);_bfag =byte (_efb >>24);_gcb =byte ((_efb >>8)&0xff);_ebd =_gcd +_fga ;if _ebd +1==len (_aee .Data )-1||_ebd +1>=_gcd +_aee .RowStride {_aee .Data [_ebd ]=_fag [_bfag ];}else {_bfeb =(uint16 (_fag [_bfag ])<<8)|uint16 (_fag [_gcb ]);if _dge =_aee .setTwoBytes (_ebd ,_bfeb );_dge !=nil {return _a .Wrapf (_dge ,_ecef ,"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",_ebd );};_fga ++;};};};return nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _ddadd ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_bfgb ,_dbee :=p1 .Width ,p1 .Height ;_cfae ,_fggc :=p3 .Width ,p3 .Height ;if _b .Abs (_bfgb -_cfae )> maxDiffW {return false ,nil ;};if _b .Abs (_dbee -_fggc )> maxDiffH {return false ,nil ;};_bdee :=int (delX +_b .Sign (delX )*0.5);_ebdf :=int (delY +_b .Sign (delY )*0.5);var _badb error ;_fgaf :=p1 .CreateTemplate ();if _badb =_fgaf .RasterOperation (0,0,_bfgb ,_dbee ,PixSrc ,p1 ,0,0);_badb !=nil {return false ,_a .Wrap (_badb ,_ddadd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _badb =_fgaf .RasterOperation (_bdee ,_ebdf ,_bfgb ,_dbee ,PixNotSrcAndDst ,p4 ,0,0);_badb !=nil {return false ,_a .Wrap (_badb ,_ddadd ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _fgaf .Zero (){return false ,nil ;};if _badb =_fgaf .RasterOperation (_bdee ,_ebdf ,_cfae ,_fggc ,PixSrc ,p3 ,0,0);_badb !=nil {return false ,_a .Wrap (_badb ,_ddadd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _badb =_fgaf .RasterOperation (0,0,_cfae ,_fggc ,PixNotSrcAndDst ,p2 ,0,0);_badb !=nil {return false ,_a .Wrap (_badb ,_ddadd ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _fgaf .Zero (),nil ;};func TstNSymbol (t *_ad .T ,scale ...int )*Bitmap {_cagag ,_dfecb :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_fb .NoError (t ,_dfecb );return TstGetScaledSymbol (t ,_cagag ,scale ...);};func (_fabg *Points )Add (pt *Points )error {const _acdfg ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _fabg ==nil {return _a .Error (_acdfg ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _a .Error (_acdfg ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_fabg =append (*_fabg ,*pt ...);return nil ;};func _ddeg (_deca *Bitmap ,_cbcb ,_baaad int ,_cggf ,_gfdb int ,_ggcd RasterOperator ,_cfcfg *Bitmap ,_addfc ,_gge int )error {var _bgbdf ,_eegb ,_dggac ,_cadc int ;if _cbcb < 0{_addfc -=_cbcb ;_cggf +=_cbcb ;_cbcb =0;};if _addfc < 0{_cbcb -=_addfc ;_cggf +=_addfc ;_addfc =0;};_bgbdf =_cbcb +_cggf -_deca .Width ;if _bgbdf > 0{_cggf -=_bgbdf ;};_eegb =_addfc +_cggf -_cfcfg .Width ;if _eegb > 0{_cggf -=_eegb ;};if _baaad < 0{_gge -=_baaad ;_gfdb +=_baaad ;_baaad =0;};if _gge < 0{_baaad -=_gge ;_gfdb +=_gge ;_gge =0;};_dggac =_baaad +_gfdb -_deca .Height ;if _dggac > 0{_gfdb -=_dggac ;};_cadc =_gge +_gfdb -_cfcfg .Height ;if _cadc > 0{_gfdb -=_cadc ;};if _cggf <=0||_gfdb <=0{return nil ;};var _cafa error ;switch {case _cbcb &7==0&&_addfc &7==0:_cafa =_gfcf (_deca ,_cbcb ,_baaad ,_cggf ,_gfdb ,_ggcd ,_cfcfg ,_addfc ,_gge );case _cbcb &7==_addfc &7:_cafa =_bgab (_deca ,_cbcb ,_baaad ,_cggf ,_gfdb ,_ggcd ,_cfcfg ,_addfc ,_gge );default:_cafa =_deab (_deca ,_cbcb ,_baaad ,_cggf ,_gfdb ,_ggcd ,_cfcfg ,_addfc ,_gge );};if _cafa !=nil {return _a .Wrap (_cafa ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func (_adge *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _efbad ="\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 >=_adge .IntSlice .Size (){return 0,_a .Errorf (_efbad ,"\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 (_adge .YAtIndex (i )),nil ;};func TstFrameBitmapData ()[]byte {return _dcdf .Data };func TstISymbol (t *_ad .T ,scale ...int )*Bitmap {_gfaa ,_edaaa :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_fb .NoError (t ,_edaaa );return TstGetScaledSymbol (t ,_gfaa ,scale ...);};