mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-27 13:48:51 +08:00
12 lines
196 KiB
Go
12 lines
196 KiB
Go
//
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// This is a commercial product and requires a license to operate.
|
|
// A trial license can be obtained at https://unidoc.io
|
|
//
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
//
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
package bitmap ;import (_f "encoding/binary";_a "github.com/stretchr/testify/require";_b "github.com/unidoc/unipdf/v3/common";_df "github.com/unidoc/unipdf/v3/internal/bitwise";_gf "github.com/unidoc/unipdf/v3/internal/imageutil";_d "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_cb "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_de "image";_ea "math";_e "sort";_cg "strings";_g "testing";);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 (_fadg *Points )Add (pt *Points )error {const _gebd ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _fadg ==nil {return _cb .Error (_gebd ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _cb .Error (_gebd ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_fadg =append (*_fadg ,*pt ...);return nil ;};func _aeaef (_daad ,_cgce *Bitmap ,_edaa *Selection )(*Bitmap ,error ){const _adeda ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _gfce ,_efdf int ;if _cgce ==nil {return nil ,_cb .Error (_adeda ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _edaa ==nil {return nil ,_cb .Error (_adeda ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_gfce =_edaa .Width ;_efdf =_edaa .Height ;if _gfce ==0||_efdf ==0{return nil ,_cb .Error (_adeda ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _daad ==nil {return _cgce .createTemplate (),nil ;};if _ffga :=_daad .resizeImageData (_cgce );_ffga !=nil {return nil ,_ffga ;};return _daad ,nil ;};type Getter interface{GetBitmap ()*Bitmap ;};func TstImageBitmap ()*Bitmap {return _bgec .Copy ()};func (_cdfae CombinationOperator )String ()string {var _dbfa string ;switch _cdfae {case CmbOpOr :_dbfa ="\u004f\u0052";case CmbOpAnd :_dbfa ="\u0041\u004e\u0044";case CmbOpXor :_dbfa ="\u0058\u004f\u0052";case CmbOpXNor :_dbfa ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_dbfa ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_dbfa ="\u004e\u004f\u0054";};return _dbfa ;};var (_eeeg =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gfbgf =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);type CombinationOperator int ;func _aaea (_gbga ,_aeed *Bitmap ,_fdbfe ,_aadgf int )(_gecfc error ){const _fagd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_aaba ,_ecga ,_eage ,_fefb int ;_fedc ,_facee ,_dage ,_ddgffa ,_fdedc ,_afece ,_eeag byte ;);for _aaba =0;_aaba < _fdbfe ;_aaba ++{_eage =_aaba *_gbga .RowStride ;_fefb =_aaba *_aeed .RowStride ;for _ecga =0;_ecga < _aadgf ;_ecga ++{_fedc ,_gecfc =_gbga .GetByte (_eage +_ecga );if _gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_facee ,_gecfc =_aeed .GetByte (_fefb +_ecga );if _gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _aaba > 0{_dage ,_gecfc =_gbga .GetByte (_eage -_gbga .RowStride +_ecga );if _gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u0069\u0020\u003e \u0030");};_fedc |=_dage ;};if _ecga > 0{_ddgffa ,_gecfc =_gbga .GetByte (_eage +_ecga -1);if _gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u006a\u0020\u003e \u0030");};_fedc |=_ddgffa <<7;};_fedc &=_facee ;if _fedc ==0||(^_fedc )==0{if _gecfc =_gbga .SetByte (_eage +_ecga ,_fedc );_gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_eeag =_fedc ;_fedc =(_fedc |(_fedc >>1)|(_fedc <<1))&_facee ;if (_fedc ^_eeag )==0{if _gecfc =_gbga .SetByte (_eage +_ecga ,_fedc );_gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _aaba =_fdbfe -1;_aaba >=0;_aaba --{_eage =_aaba *_gbga .RowStride ;_fefb =_aaba *_aeed .RowStride ;for _ecga =_aadgf -1;_ecga >=0;_ecga --{if _fedc ,_gecfc =_gbga .GetByte (_eage +_ecga );_gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _facee ,_gecfc =_aeed .GetByte (_fefb +_ecga );_gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _aaba < _fdbfe -1{if _fdedc ,_gecfc =_gbga .GetByte (_eage +_gbga .RowStride +_ecga );_gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_fedc |=_fdedc ;};if _ecga < _aadgf -1{if _afece ,_gecfc =_gbga .GetByte (_eage +_ecga +1);_gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_fedc |=_afece >>7;};_fedc &=_facee ;if _fedc ==0||(^_fedc )==0{if _gecfc =_gbga .SetByte (_eage +_ecga ,_fedc );_gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\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 {_eeag =_fedc ;_fedc =(_fedc |(_fedc >>1)|(_fedc <<1))&_facee ;if (_fedc ^_eeag )==0{if _gecfc =_gbga .SetByte (_eage +_ecga ,_fedc );_gecfc !=nil {return _cb .Wrap (_gecfc ,_fagd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");};break ;};};};};return nil ;};func (_fdf *Bitmap )Zero ()bool {_egd :=_fdf .Width /8;_ebb :=_fdf .Width &7;var _befe byte ;if _ebb !=0{_befe =byte (0xff<<uint (8-_ebb ));};var _dcda ,_cca ,_aecc int ;for _cca =0;_cca < _fdf .Height ;_cca ++{_dcda =_fdf .RowStride *_cca ;for _aecc =0;_aecc < _egd ;_aecc ,_dcda =_aecc +1,_dcda +1{if _fdf .Data [_dcda ]!=0{return false ;};};if _ebb > 0{if _fdf .Data [_dcda ]&_befe !=0{return false ;};};};return true ;};func (_ebc *Bitmap )ToImage ()_de .Image {_eeac ,_bbb :=_gf .NewImage (_ebc .Width ,_ebc .Height ,1,1,_ebc .Data ,nil ,nil );if _bbb !=nil {_b .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",_bbb );};return _eeac ;};func _dfdg (_defe ,_dbdcg byte ,_dfed CombinationOperator )byte {switch _dfed {case CmbOpOr :return _dbdcg |_defe ;case CmbOpAnd :return _dbdcg &_defe ;case CmbOpXor :return _dbdcg ^_defe ;case CmbOpXNor :return ^(_dbdcg ^_defe );case CmbOpNot :return ^(_dbdcg );default:return _dbdcg ;};};func Rect (x ,y ,w ,h int )(*_de .Rectangle ,error ){const _dcdc ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_cb .Errorf (_dcdc ,"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 ,_cb .Error (_dcdc ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_bedc :=_de .Rect (x ,y ,x +w ,y +h );return &_bedc ,nil ;};func (_cdgd *byWidth )Len ()int {return len (_cdgd .Values )};func (_dccfe *ClassedPoints )XAtIndex (i int )float32 {return (*_dccfe .Points )[_dccfe .IntSlice [i ]].X };func (_cfbd *ClassedPoints )Len ()int {return _cfbd .IntSlice .Size ()};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func init (){for _gbd :=0;_gbd < 256;_gbd ++{_edb [_gbd ]=uint8 (_gbd &0x1)+(uint8 (_gbd >>1)&0x1)+(uint8 (_gbd >>2)&0x1)+(uint8 (_gbd >>3)&0x1)+(uint8 (_gbd >>4)&0x1)+(uint8 (_gbd >>5)&0x1)+(uint8 (_gbd >>6)&0x1)+(uint8 (_gbd >>7)&0x1);};};func (_ccda *Bitmap )addBorderGeneral (_bbgd ,_ddbc ,_cada ,_dge int ,_dfb int )(*Bitmap ,error ){const _bcg ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _bbgd < 0||_ddbc < 0||_cada < 0||_dge < 0{return nil ,_cb .Error (_bcg ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_gfec ,_efgg :=_ccda .Width ,_ccda .Height ;_aded :=_gfec +_bbgd +_ddbc ;_efad :=_efgg +_cada +_dge ;_dfe :=New (_aded ,_efad );_dfe .Color =_ccda .Color ;_dgc :=PixClr ;if _dfb > 0{_dgc =PixSet ;};_ggd :=_dfe .RasterOperation (0,0,_bbgd ,_efad ,_dgc ,nil ,0,0);if _ggd !=nil {return nil ,_cb .Wrap (_ggd ,_bcg ,"\u006c\u0065\u0066\u0074");};_ggd =_dfe .RasterOperation (_aded -_ddbc ,0,_ddbc ,_efad ,_dgc ,nil ,0,0);if _ggd !=nil {return nil ,_cb .Wrap (_ggd ,_bcg ,"\u0072\u0069\u0067h\u0074");};_ggd =_dfe .RasterOperation (0,0,_aded ,_cada ,_dgc ,nil ,0,0);if _ggd !=nil {return nil ,_cb .Wrap (_ggd ,_bcg ,"\u0074\u006f\u0070");};_ggd =_dfe .RasterOperation (0,_efad -_dge ,_aded ,_dge ,_dgc ,nil ,0,0);if _ggd !=nil {return nil ,_cb .Wrap (_ggd ,_bcg ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_ggd =_dfe .RasterOperation (_bbgd ,_cada ,_gfec ,_efgg ,PixSrc ,_ccda ,0,0);if _ggd !=nil {return nil ,_cb .Wrap (_ggd ,_bcg ,"\u0063\u006f\u0070\u0079");};return _dfe ,nil ;};type MorphOperation int ;type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func (_ebdgg *byHeight )Swap (i ,j int ){_ebdgg .Values [i ],_ebdgg .Values [j ]=_ebdgg .Values [j ],_ebdgg .Values [i ];if _ebdgg .Boxes !=nil {_ebdgg .Boxes [i ],_ebdgg .Boxes [j ]=_ebdgg .Boxes [j ],_ebdgg .Boxes [i ];};};func (_eadg *Bitmap )GetByte (index int )(byte ,error ){if index > len (_eadg .Data )-1||index < 0{return 0,_cb .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 _eadg .Data [index ],nil ;};func _bc (_ae ,_gb *Bitmap )(_af error ){const _ga ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_ag :=_gb .RowStride ;_dc :=_ae .RowStride ;_cd :=_gb .RowStride *4-_ae .RowStride ;var (_gag ,_aeb byte ;_ef uint32 ;_ead ,_aec ,_ab ,_fb ,_ded ,_dd ,_gaf int ;);for _ab =0;_ab < _gb .Height ;_ab ++{_ead =_ab *_ag ;_aec =4*_ab *_dc ;for _fb =0;_fb < _ag ;_fb ++{_gag =_gb .Data [_ead +_fb ];_ef =_gdbab [_gag ];_dd =_aec +_fb *4;if _cd !=0&&(_fb +1)*4> _ae .RowStride {for _ded =_cd ;_ded > 0;_ded --{_aeb =byte ((_ef >>uint (_ded *8))&0xff);_gaf =_dd +(_cd -_ded );if _af =_ae .SetByte (_gaf ,_aeb );_af !=nil {return _cb .Wrapf (_af ,_ga ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ded );};};}else if _af =_ae .setFourBytes (_dd ,_ef );_af !=nil {return _cb .Wrap (_af ,_ga ,"");};if _af =_ae .setFourBytes (_aec +_fb *4,_gdbab [_gb .Data [_ead +_fb ]]);_af !=nil {return _cb .Wrap (_af ,_ga ,"");};};for _ded =1;_ded < 4;_ded ++{for _fb =0;_fb < _dc ;_fb ++{if _af =_ae .SetByte (_aec +_ded *_dc +_fb ,_ae .Data [_aec +_fb ]);_af !=nil {return _cb .Wrapf (_af ,_ga ,"\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",_ded ,_fb );};};};};return nil ;};func (_efd *Bitmap )nextOnPixelLow (_bfde ,_gcab ,_cac ,_dadc ,_edd int )(_bec _de .Point ,_dcca bool ,_gaaa error ){const _fgbf ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_fbfd int ;_dbcc byte ;);_dacd :=_edd *_cac ;_cdea :=_dacd +(_dadc /8);if _dbcc ,_gaaa =_efd .GetByte (_cdea );_gaaa !=nil {return _bec ,false ,_cb .Wrap (_gaaa ,_fgbf ,"\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 _dbcc !=0{_aeg :=_dadc -(_dadc %8)+7;for _fbfd =_dadc ;_fbfd <=_aeg &&_fbfd < _bfde ;_fbfd ++{if _efd .GetPixel (_fbfd ,_edd ){_bec .X =_fbfd ;_bec .Y =_edd ;return _bec ,true ,nil ;};};};_adef :=(_dadc /8)+1;_fbfd =8*_adef ;var _gee int ;for _cdea =_dacd +_adef ;_fbfd < _bfde ;_cdea ,_fbfd =_cdea +1,_fbfd +8{if _dbcc ,_gaaa =_efd .GetByte (_cdea );_gaaa !=nil {return _bec ,false ,_cb .Wrap (_gaaa ,_fgbf ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _dbcc ==0{continue ;};for _gee =0;_gee < 8&&_fbfd < _bfde ;_gee ,_fbfd =_gee +1,_fbfd +1{if _efd .GetPixel (_fbfd ,_edd ){_bec .X =_fbfd ;_bec .Y =_edd ;return _bec ,true ,nil ;};};};for _bbc :=_edd +1;_bbc < _gcab ;_bbc ++{_dacd =_bbc *_cac ;for _cdea ,_fbfd =_dacd ,0;_fbfd < _bfde ;_cdea ,_fbfd =_cdea +1,_fbfd +8{if _dbcc ,_gaaa =_efd .GetByte (_cdea );_gaaa !=nil {return _bec ,false ,_cb .Wrap (_gaaa ,_fgbf ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _dbcc ==0{continue ;};for _gee =0;_gee < 8&&_fbfd < _bfde ;_gee ,_fbfd =_gee +1,_fbfd +1{if _efd .GetPixel (_fbfd ,_bbc ){_bec .X =_fbfd ;_bec .Y =_bbc ;return _bec ,true ,nil ;};};};};return _bec ,false ,nil ;};func (_abfge MorphProcess )getWidthHeight ()(_acfe ,_egg int ){return _abfge .Arguments [0],_abfge .Arguments [1];};func (_fefd *Bitmap )GetByteIndex (x ,y int )int {return y *_fefd .RowStride +(x >>3)};func _ccd (_bgd ,_dcf *Bitmap ,_gbf int ,_bba []byte ,_ebf int )(_gcf error ){const _ce ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_gafg ,_geb ,_eaf ,_dcee ,_fee ,_gafgc ,_gbac ,_gffb int ;_caeg ,_aba uint32 ;_cgd ,_gcc byte ;_cfg uint16 ;);_ffe :=make ([]byte ,4);_ageb :=make ([]byte ,4);for _eaf =0;_eaf < _bgd .Height -1;_eaf ,_dcee =_eaf +2,_dcee +1{_gafg =_eaf *_bgd .RowStride ;_geb =_dcee *_dcf .RowStride ;for _fee ,_gafgc =0,0;_fee < _ebf ;_fee ,_gafgc =_fee +4,_gafgc +1{for _gbac =0;_gbac < 4;_gbac ++{_gffb =_gafg +_fee +_gbac ;if _gffb <=len (_bgd .Data )-1&&_gffb < _gafg +_bgd .RowStride {_ffe [_gbac ]=_bgd .Data [_gffb ];}else {_ffe [_gbac ]=0x00;};_gffb =_gafg +_bgd .RowStride +_fee +_gbac ;if _gffb <=len (_bgd .Data )-1&&_gffb < _gafg +(2*_bgd .RowStride ){_ageb [_gbac ]=_bgd .Data [_gffb ];}else {_ageb [_gbac ]=0x00;};};_caeg =_f .BigEndian .Uint32 (_ffe );_aba =_f .BigEndian .Uint32 (_ageb );_aba |=_caeg ;_aba |=_aba <<1;_aba &=0xaaaaaaaa;_caeg =_aba |(_aba <<7);_cgd =byte (_caeg >>24);_gcc =byte ((_caeg >>8)&0xff);_gffb =_geb +_gafgc ;if _gffb +1==len (_dcf .Data )-1||_gffb +1>=_geb +_dcf .RowStride {_dcf .Data [_gffb ]=_bba [_cgd ];}else {_cfg =(uint16 (_bba [_cgd ])<<8)|uint16 (_bba [_gcc ]);if _gcf =_dcf .setTwoBytes (_gffb ,_cfg );_gcf !=nil {return _cb .Wrapf (_gcf ,_ce ,"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",_gffb );};_gafgc ++;};};};return nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_deee float64 ,_edge error ){const _aefaf ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_cb .Error (_aefaf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_cb .Error (_aefaf ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_cb .Error (_aefaf ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_dccg ,_dddf :=bm1 .Width ,bm1 .Height ;_gfda ,_bbgb :=bm2 .Width ,bm2 .Height ;_ebgd :=_eccd (_dccg -_gfda );if _ebgd > maxDiffW {return 0,nil ;};_acff :=_eccd (_dddf -_bbgb );if _acff > maxDiffH {return 0,nil ;};var _bbaga ,_gecf int ;if delX >=0{_bbaga =int (delX +0.5);}else {_bbaga =int (delX -0.5);};if delY >=0{_gecf =int (delY +0.5);}else {_gecf =int (delY -0.5);};_ecbd :=_fbeb (_gecf ,0);_ddcf :=_cgffg (_bbgb +_gecf ,_dddf );_dgdcb :=bm1 .RowStride *_ecbd ;_bbe :=bm2 .RowStride *(_ecbd -_gecf );_adbdf :=_fbeb (_bbaga ,0);_gbfe :=_cgffg (_gfda +_bbaga ,_dccg );_gbad :=bm2 .RowStride ;var _egac ,_bcgcg int ;if _bbaga >=8{_egac =_bbaga >>3;_dgdcb +=_egac ;_adbdf -=_egac <<3;_gbfe -=_egac <<3;_bbaga &=7;}else if _bbaga <=-8{_bcgcg =-((_bbaga +7)>>3);_bbe +=_bcgcg ;_gbad -=_bcgcg ;_bbaga +=_bcgcg <<3;};if _adbdf >=_gbfe ||_ecbd >=_ddcf {return 0,nil ;};_dcg :=(_gbfe +7)>>3;var (_fced ,_ddbg ,_bdbgf byte ;_aaegd ,_fcff ,_bgfe int ;);switch {case _bbaga ==0:for _bgfe =_ecbd ;_bgfe < _ddcf ;_bgfe ,_dgdcb ,_bbe =_bgfe +1,_dgdcb +bm1 .RowStride ,_bbe +bm2 .RowStride {for _fcff =0;_fcff < _dcg ;_fcff ++{_bdbgf =bm1 .Data [_dgdcb +_fcff ]&bm2 .Data [_bbe +_fcff ];_aaegd +=tab [_bdbgf ];};};case _bbaga > 0:if _gbad < _dcg {for _bgfe =_ecbd ;_bgfe < _ddcf ;_bgfe ,_dgdcb ,_bbe =_bgfe +1,_dgdcb +bm1 .RowStride ,_bbe +bm2 .RowStride {_fced ,_ddbg =bm1 .Data [_dgdcb ],bm2 .Data [_bbe ]>>uint (_bbaga );_bdbgf =_fced &_ddbg ;_aaegd +=tab [_bdbgf ];for _fcff =1;_fcff < _gbad ;_fcff ++{_fced ,_ddbg =bm1 .Data [_dgdcb +_fcff ],(bm2 .Data [_bbe +_fcff ]>>uint (_bbaga ))|(bm2 .Data [_bbe +_fcff -1]<<uint (8-_bbaga ));_bdbgf =_fced &_ddbg ;_aaegd +=tab [_bdbgf ];};_fced =bm1 .Data [_dgdcb +_fcff ];_ddbg =bm2 .Data [_bbe +_fcff -1]<<uint (8-_bbaga );_bdbgf =_fced &_ddbg ;_aaegd +=tab [_bdbgf ];};}else {for _bgfe =_ecbd ;_bgfe < _ddcf ;_bgfe ,_dgdcb ,_bbe =_bgfe +1,_dgdcb +bm1 .RowStride ,_bbe +bm2 .RowStride {_fced ,_ddbg =bm1 .Data [_dgdcb ],bm2 .Data [_bbe ]>>uint (_bbaga );_bdbgf =_fced &_ddbg ;_aaegd +=tab [_bdbgf ];for _fcff =1;_fcff < _dcg ;_fcff ++{_fced =bm1 .Data [_dgdcb +_fcff ];_ddbg =(bm2 .Data [_bbe +_fcff ]>>uint (_bbaga ))|(bm2 .Data [_bbe +_fcff -1]<<uint (8-_bbaga ));_bdbgf =_fced &_ddbg ;_aaegd +=tab [_bdbgf ];};};};default:if _dcg < _gbad {for _bgfe =_ecbd ;_bgfe < _ddcf ;_bgfe ,_dgdcb ,_bbe =_bgfe +1,_dgdcb +bm1 .RowStride ,_bbe +bm2 .RowStride {for _fcff =0;_fcff < _dcg ;_fcff ++{_fced =bm1 .Data [_dgdcb +_fcff ];_ddbg =bm2 .Data [_bbe +_fcff ]<<uint (-_bbaga );_ddbg |=bm2 .Data [_bbe +_fcff +1]>>uint (8+_bbaga );_bdbgf =_fced &_ddbg ;_aaegd +=tab [_bdbgf ];};};}else {for _bgfe =_ecbd ;_bgfe < _ddcf ;_bgfe ,_dgdcb ,_bbe =_bgfe +1,_dgdcb +bm1 .RowStride ,_bbe +bm2 .RowStride {for _fcff =0;_fcff < _dcg -1;_fcff ++{_fced =bm1 .Data [_dgdcb +_fcff ];_ddbg =bm2 .Data [_bbe +_fcff ]<<uint (-_bbaga );_ddbg |=bm2 .Data [_bbe +_fcff +1]>>uint (8+_bbaga );_bdbgf =_fced &_ddbg ;_aaegd +=tab [_bdbgf ];};_fced =bm1 .Data [_dgdcb +_fcff ];_ddbg =bm2 .Data [_bbe +_fcff ]<<uint (-_bbaga );_bdbgf =_fced &_ddbg ;_aaegd +=tab [_bdbgf ];};};};_deee =float64 (_aaegd )*float64 (_aaegd )/(float64 (area1 )*float64 (area2 ));return _deee ,nil ;};func (_eaea *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_aeeg *Boxes ,_gebg error ){const _bbba ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _eaea ==nil {return nil ,_cb .Error (_bbba ,"\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 ,_cb .Error (_bbba ,"\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 _aeeg ,_gebg =_eaea .connComponentsBB (connectivity );_gebg !=nil {return nil ,_cb .Wrap (_gebg ,_bbba ,"");};}else {if _aeeg ,_gebg =_eaea .connComponentsBitmapsBB (bms ,connectivity );_gebg !=nil {return nil ,_cb .Wrap (_gebg ,_bbba ,"");};};return _aeeg ,nil ;};func _cgba (_agbg ,_gacg *Bitmap ,_acad ,_bcca int )(*Bitmap ,error ){const _cdcb ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _gacg ==nil {return nil ,_cb .Error (_cdcb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _acad < 1||_bcca < 1{return nil ,_cb .Error (_cdcb ,"\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 _acad ==1&&_bcca ==1{_fadd ,_afag :=_dabb (_agbg ,_gacg );if _afag !=nil {return nil ,_cb .Wrap (_afag ,_cdcb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fadd ,nil ;};if _acad ==1||_bcca ==1{_facdb :=SelCreateBrick (_bcca ,_acad ,_bcca /2,_acad /2,SelHit );_dabfa ,_ddec :=_ccf (_agbg ,_gacg ,_facdb );if _ddec !=nil {return nil ,_cb .Wrap (_ddec ,_cdcb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _dabfa ,nil ;};_egag :=SelCreateBrick (1,_acad ,0,_acad /2,SelHit );_cab :=SelCreateBrick (_bcca ,1,_bcca /2,0,SelHit );_acdee ,_cabg :=_ccf (nil ,_gacg ,_egag );if _cabg !=nil {return nil ,_cb .Wrap (_cabg ,_cdcb ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_agbg ,_cabg =_ccf (_agbg ,_acdee ,_cab );if _cabg !=nil {return nil ,_cb .Wrap (_cabg ,_cdcb ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _agbg ,nil ;};func _add (_ebcg ,_fcdd *Bitmap ,_fgad *Selection )(*Bitmap ,error ){const _dacf ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _cbcd error ;if _ebcg ,_cbcd =_aeaef (_ebcg ,_fcdd ,_fgad );_cbcd !=nil {return nil ,_cbcd ;};_gaed ,_cbcd :=_daee (nil ,_fcdd ,_fgad );if _cbcd !=nil {return nil ,_cb .Wrap (_cbcd ,_dacf ,"");};if _ ,_cbcd =_ccf (_ebcg ,_gaed ,_fgad );_cbcd !=nil {return nil ,_cb .Wrap (_cbcd ,_dacf ,"");};return _ebcg ,nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _dabb (d ,s )};func TstCSymbol (t *_g .T )*Bitmap {t .Helper ();_abgc :=New (6,6);_a .NoError (t ,_abgc .SetPixel (1,0,1));_a .NoError (t ,_abgc .SetPixel (2,0,1));_a .NoError (t ,_abgc .SetPixel (3,0,1));_a .NoError (t ,_abgc .SetPixel (4,0,1));_a .NoError (t ,_abgc .SetPixel (0,1,1));_a .NoError (t ,_abgc .SetPixel (5,1,1));_a .NoError (t ,_abgc .SetPixel (0,2,1));_a .NoError (t ,_abgc .SetPixel (0,3,1));_a .NoError (t ,_abgc .SetPixel (0,4,1));_a .NoError (t ,_abgc .SetPixel (5,4,1));_a .NoError (t ,_abgc .SetPixel (1,5,1));_a .NoError (t ,_abgc .SetPixel (2,5,1));_a .NoError (t ,_abgc .SetPixel (3,5,1));_a .NoError (t ,_abgc .SetPixel (4,5,1));return _abgc ;};func _daee (_aadg *Bitmap ,_gacc *Bitmap ,_fgc *Selection )(*Bitmap ,error ){var (_efdae *Bitmap ;_faed error ;);_aadg ,_faed =_fage (_aadg ,_gacc ,_fgc ,&_efdae );if _faed !=nil {return nil ,_faed ;};if _faed =_aadg .clearAll ();_faed !=nil {return nil ,_faed ;};var _bfbf SelectionValue ;for _dadf :=0;_dadf < _fgc .Height ;_dadf ++{for _ecg :=0;_ecg < _fgc .Width ;_ecg ++{_bfbf =_fgc .Data [_dadf ][_ecg ];if _bfbf ==SelHit {if _faed =_aadg .RasterOperation (_ecg -_fgc .Cx ,_dadf -_fgc .Cy ,_gacc .Width ,_gacc .Height ,PixSrcOrDst ,_efdae ,0,0);_faed !=nil {return nil ,_faed ;};};};};return _aadg ,nil ;};func (_cbddc *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_dbdbb *Bitmaps ,_gdcd *Boxes ,_cceb error ){const _begb ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _cbddc ==nil {return nil ,nil ,_cb .Error (_begb ,"\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 ,_cb .Error (_begb ,"\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 _cbddc .Zero (){_gdcd =&Boxes {};_dbdbb =&Bitmaps {};return _dbdbb ,_gdcd ,nil ;};switch components {case ComponentConn :_dbdbb =&Bitmaps {};if _gdcd ,_cceb =_cbddc .ConnComponents (_dbdbb ,8);_cceb !=nil {return nil ,nil ,_cb .Wrap (_cceb ,_begb ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentCharacters :_debgf ,_gafce :=MorphSequence (_cbddc ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _gafce !=nil {return nil ,nil ,_cb .Wrap (_gafce ,_begb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _b .Log .IsLogLevel (_b .LogLevelTrace ){_b .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",_debgf .String ());};_fecg :=&Bitmaps {};_gdcd ,_gafce =_debgf .ConnComponents (_fecg ,8);if _gafce !=nil {return nil ,nil ,_cb .Wrap (_gafce ,_begb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _b .Log .IsLogLevel (_b .LogLevelTrace ){_b .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",_fecg .String ());};if _dbdbb ,_gafce =_fecg .ClipToBitmap (_cbddc );_gafce !=nil {return nil ,nil ,_cb .Wrap (_gafce ,_begb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_afb :=1;var _gcaa *Bitmap ;switch {case _cbddc .XResolution <=200:_gcaa =_cbddc ;case _cbddc .XResolution <=400:_afb =2;_gcaa ,_cceb =_def (_cbddc ,1,0,0,0);if _cceb !=nil {return nil ,nil ,_cb .Wrap (_cceb ,_begb ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");};default:_afb =4;_gcaa ,_cceb =_def (_cbddc ,1,1,0,0);if _cceb !=nil {return nil ,nil ,_cb .Wrap (_cceb ,_begb ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");};};_ede ,_ ,_egfee :=_dbec (_gcaa );if _egfee !=nil {return nil ,nil ,_cb .Wrap (_egfee ,_begb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_bdga ,_egfee :=_fdfa (_ede ,_afb );if _egfee !=nil {return nil ,nil ,_cb .Wrap (_egfee ,_begb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_cbfa :=&Bitmaps {};if _gdcd ,_egfee =_bdga .ConnComponents (_cbfa ,4);_egfee !=nil {return nil ,nil ,_cb .Wrap (_egfee ,_begb ,"\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 _dbdbb ,_egfee =_cbfa .ClipToBitmap (_cbddc );_egfee !=nil {return nil ,nil ,_cb .Wrap (_egfee ,_begb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_dbdbb ,_cceb =_dbdbb .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _cceb !=nil {return nil ,nil ,_cb .Wrap (_cceb ,_begb ,"");};_gdcd ,_cceb =_gdcd .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _cceb !=nil {return nil ,nil ,_cb .Wrap (_cceb ,_begb ,"");};return _dbdbb ,_gdcd ,nil ;};func TstOSymbol (t *_g .T ,scale ...int )*Bitmap {_bbbd ,_fgeab :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_a .NoError (t ,_fgeab );return TstGetScaledSymbol (t ,_bbbd ,scale ...);};func (_dda Points )YSorter ()func (_agfb ,_gcfbf int )bool {return func (_bda ,_ccfg int )bool {return _dda [_bda ].Y < _dda [_ccfg ].Y };};func MakePixelCentroidTab8 ()[]int {return _cade ()};func (_bbcb *Bitmaps )AddBitmap (bm *Bitmap ){_bbcb .Values =append (_bbcb .Values ,bm )};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_aacf Points )GetIntY (i int )(int ,error ){if i >=len (_aacf ){return 0,_cb .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 (_aacf [i ].Y ),nil ;};func (_agege *Bitmaps )SortByHeight (){_eccce :=(*byHeight )(_agege );_e .Sort (_eccce )};func _dabb (_bfdbe ,_fbe *Bitmap )(*Bitmap ,error ){if _fbe ==nil {return nil ,_cb .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 _fbe ==_bfdbe {return _bfdbe ,nil ;};if _bfdbe ==nil {_bfdbe =_fbe .createTemplate ();copy (_bfdbe .Data ,_fbe .Data );return _bfdbe ,nil ;};_efc :=_bfdbe .resizeImageData (_fbe );if _efc !=nil {return nil ,_cb .Wrap (_efc ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");};_bfdbe .Text =_fbe .Text ;copy (_bfdbe .Data ,_fbe .Data );return _bfdbe ,nil ;};func (_aadff *Bitmaps )selectByIndicator (_cbab *_d .NumSlice )(_afbg *Bitmaps ,_fcgf error ){const _ddce ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _aadff ==nil {return nil ,_cb .Error (_ddce ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _cbab ==nil {return nil ,_cb .Error (_ddce ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_aadff .Values )==0{return _aadff ,nil ;};if len (*_cbab )!=len (_aadff .Values ){return nil ,_cb .Errorf (_ddce ,"\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 (*_cbab ),len (_aadff .Values ));};var _cfgb ,_ddgffc ,_adfac int ;for _ddgffc =0;_ddgffc < len (*_cbab );_ddgffc ++{if _cfgb ,_fcgf =_cbab .GetInt (_ddgffc );_fcgf !=nil {return nil ,_cb .Wrap (_fcgf ,_ddce ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _cfgb ==1{_adfac ++;};};if _adfac ==len (_aadff .Values ){return _aadff ,nil ;};_afbg =&Bitmaps {};_gagce :=len (_aadff .Values )==len (_aadff .Boxes );for _ddgffc =0;_ddgffc < len (*_cbab );_ddgffc ++{if _cfgb =int ((*_cbab )[_ddgffc ]);_cfgb ==0{continue ;};_afbg .Values =append (_afbg .Values ,_aadff .Values [_ddgffc ]);if _gagce {_afbg .Boxes =append (_afbg .Boxes ,_aadff .Boxes [_ddgffc ]);};};return _afbg ,nil ;};func _begc (_ffca ,_fbbb *Bitmap ,_bdcf ,_bgf ,_eecf uint ,_fcdb ,_dgbe int ,_gecd bool ,_ddf ,_fada int )error {for _cgffe :=_fcdb ;_cgffe < _dgbe ;_cgffe ++{if _ddf +1< len (_ffca .Data ){_abag :=_cgffe +1==_dgbe ;_dcfc ,_bcbf :=_ffca .GetByte (_ddf );if _bcbf !=nil {return _bcbf ;};_ddf ++;_dcfc <<=_bdcf ;_bbbb ,_bcbf :=_ffca .GetByte (_ddf );if _bcbf !=nil {return _bcbf ;};_bbbb >>=_bgf ;_baef :=_dcfc |_bbbb ;if _abag &&!_gecd {_baef =_ggbd (_eecf ,_baef );};_bcbf =_fbbb .SetByte (_fada ,_baef );if _bcbf !=nil {return _bcbf ;};_fada ++;if _abag &&_gecd {_gegg ,_ebabc :=_ffca .GetByte (_ddf );if _ebabc !=nil {return _ebabc ;};_gegg <<=_bdcf ;_baef =_ggbd (_eecf ,_gegg );if _ebabc =_fbbb .SetByte (_fada ,_baef );_ebabc !=nil {return _ebabc ;};};continue ;};_edc ,_bgdg :=_ffca .GetByte (_ddf );if _bgdg !=nil {_b .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",_ddf ,_bgdg );return _bgdg ;};_edc <<=_bdcf ;_ddf ++;_bgdg =_fbbb .SetByte (_fada ,_edc );if _bgdg !=nil {return _bgdg ;};_fada ++;};return nil ;};func (_aac *Bitmap )equivalent (_fafd *Bitmap )bool {if _aac ==_fafd {return true ;};if !_aac .SizesEqual (_fafd ){return false ;};_befg :=_acfb (_aac ,_fafd ,CmbOpXor );_bcec :=_aac .countPixels ();_deea :=int (0.25*float32 (_bcec ));if _befg .thresholdPixelSum (_deea ){return false ;};var (_bdee [9][9]int ;_bdc [18][9]int ;_deda [9][18]int ;_efbc int ;_agfg int ;);_edg :=9;_bad :=_aac .Height /_edg ;_ceb :=_aac .Width /_edg ;_efe ,_bcfg :=_bad /2,_ceb /2;if _bad < _ceb {_efe =_ceb /2;_bcfg =_bad /2;};_ffac :=float64 (_efe )*float64 (_bcfg )*_ea .Pi ;_ebba :=int (float64 (_bad *_ceb /2)*0.9);_eada :=int (float64 (_ceb *_bad /2)*0.9);for _eegc :=0;_eegc < _edg ;_eegc ++{_fdfg :=_ceb *_eegc +_efbc ;var _fegb int ;if _eegc ==_edg -1{_efbc =0;_fegb =_aac .Width ;}else {_fegb =_fdfg +_ceb ;if ((_aac .Width -_efbc )%_edg )> 0{_efbc ++;_fegb ++;};};for _caea :=0;_caea < _edg ;_caea ++{_bed :=_bad *_caea +_agfg ;var _cdda int ;if _caea ==_edg -1{_agfg =0;_cdda =_aac .Height ;}else {_cdda =_bed +_bad ;if (_aac .Height -_agfg )%_edg > 0{_agfg ++;_cdda ++;};};var _eac ,_cdfa ,_cfdc ,_febb int ;_dbc :=(_fdfg +_fegb )/2;_dgece :=(_bed +_cdda )/2;for _acg :=_fdfg ;_acg < _fegb ;_acg ++{for _fbc :=_bed ;_fbc < _cdda ;_fbc ++{if _befg .GetPixel (_acg ,_fbc ){if _acg < _dbc {_eac ++;}else {_cdfa ++;};if _fbc < _dgece {_febb ++;}else {_cfdc ++;};};};};_bdee [_eegc ][_caea ]=_eac +_cdfa ;_bdc [_eegc *2][_caea ]=_eac ;_bdc [_eegc *2+1][_caea ]=_cdfa ;_deda [_eegc ][_caea *2]=_febb ;_deda [_eegc ][_caea *2+1]=_cfdc ;};};for _eacg :=0;_eacg < _edg *2-1;_eacg ++{for _dacc :=0;_dacc < (_edg -1);_dacc ++{var _ecbc int ;for _caga :=0;_caga < 2;_caga ++{for _abaa :=0;_abaa < 2;_abaa ++{_ecbc +=_bdc [_eacg +_caga ][_dacc +_abaa ];};};if _ecbc > _eada {return false ;};};};for _fgbd :=0;_fgbd < (_edg -1);_fgbd ++{for _dgdc :=0;_dgdc < ((_edg *2)-1);_dgdc ++{var _ddc int ;for _ccad :=0;_ccad < 2;_ccad ++{for _dgcc :=0;_dgcc < 2;_dgcc ++{_ddc +=_deda [_fgbd +_ccad ][_dgdc +_dgcc ];};};if _ddc > _ebba {return false ;};};};for _eeab :=0;_eeab < (_edg -2);_eeab ++{for _degb :=0;_degb < (_edg -2);_degb ++{var _fdd ,_ced int ;for _cgfbf :=0;_cgfbf < 3;_cgfbf ++{for _fceb :=0;_fceb < 3;_fceb ++{if _cgfbf ==_fceb {_fdd +=_bdee [_eeab +_cgfbf ][_degb +_fceb ];};if (2-_cgfbf )==_fceb {_ced +=_bdee [_eeab +_cgfbf ][_degb +_fceb ];};};};if _fdd > _eada ||_ced > _eada {return false ;};};};for _fffe :=0;_fffe < (_edg -1);_fffe ++{for _egfe :=0;_egfe < (_edg -1);_egfe ++{var _dbdc int ;for _agaf :=0;_agaf < 2;_agaf ++{for _dgee :=0;_dgee < 2;_dgee ++{_dbdc +=_bdee [_fffe +_agaf ][_egfe +_dgee ];};};if float64 (_dbdc )> _ffac {return false ;};};};return true ;};func (_gagd *Bitmap )addPadBits ()(_adfg error ){const _ceg ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_aagf :=_gagd .Width %8;if _aagf ==0{return nil ;};_eec :=_gagd .Width /8;_adge :=_df .NewReader (_gagd .Data );_bgeg :=make ([]byte ,_gagd .Height *_gagd .RowStride );_fdba :=_df .NewWriterMSB (_bgeg );_caf :=make ([]byte ,_eec );var (_eeb int ;_eebb uint64 ;);for _eeb =0;_eeb < _gagd .Height ;_eeb ++{if _ ,_adfg =_adge .Read (_caf );_adfg !=nil {return _cb .Wrap (_adfg ,_ceg ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_adfg =_fdba .Write (_caf );_adfg !=nil {return _cb .Wrap (_adfg ,_ceg ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _eebb ,_adfg =_adge .ReadBits (byte (_aagf ));_adfg !=nil {return _cb .Wrap (_adfg ,_ceg ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _adfg =_fdba .WriteByte (byte (_eebb )<<uint (8-_aagf ));_adfg !=nil {return _cb .Wrap (_adfg ,_ceg ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_gagd .Data =_fdba .Data ();return nil ;};type Color int ;func (_bfdb *Bitmap )setEightBytes (_bcff int ,_eafg uint64 )error {_edf :=_bfdb .RowStride -(_bcff %_bfdb .RowStride );if _bfdb .RowStride !=_bfdb .Width >>3{_edf --;};if _edf >=8{return _bfdb .setEightFullBytes (_bcff ,_eafg );};return _bfdb .setEightPartlyBytes (_bcff ,_edf ,_eafg );};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func (_bdfe *Bitmap )And (s *Bitmap )(_daa *Bitmap ,_gbbc error ){const _fgfg ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _bdfe ==nil {return nil ,_cb .Error (_fgfg ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_cb .Error (_fgfg ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_bdfe .SizesEqual (s ){_b .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",_fgfg );};if _daa ,_gbbc =_dabb (_daa ,_bdfe );_gbbc !=nil {return nil ,_cb .Wrap (_gbbc ,_fgfg ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _gbbc =_daa .RasterOperation (0,0,_daa .Width ,_daa .Height ,PixSrcAndDst ,s ,0,0);_gbbc !=nil {return nil ,_cb .Wrap (_gbbc ,_fgfg ,"");};return _daa ,nil ;};func (_ggaf *Bitmap )centroid (_gcdd ,_ggbf []int )(Point ,error ){_eaeab :=Point {};_ggaf .setPadBits (0);if len (_gcdd )==0{_gcdd =_cade ();};if len (_ggbf )==0{_ggbf =_geea ();};var _ffbf ,_defda ,_cdecb ,_gfdaa ,_dcga ,_dddc int ;var _gcac byte ;for _dcga =0;_dcga < _ggaf .Height ;_dcga ++{_cege :=_ggaf .RowStride *_dcga ;_gfdaa =0;for _dddc =0;_dddc < _ggaf .RowStride ;_dddc ++{_gcac =_ggaf .Data [_cege +_dddc ];if _gcac !=0{_gfdaa +=_ggbf [_gcac ];_ffbf +=_gcdd [_gcac ]+_dddc *8*_ggbf [_gcac ];};};_cdecb +=_gfdaa ;_defda +=_gfdaa *_dcga ;};if _cdecb !=0{_eaeab .X =float32 (_ffbf )/float32 (_cdecb );_eaeab .Y =float32 (_defda )/float32 (_cdecb );};return _eaeab ,nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _ffgb (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _dcdgb (_gceb ,_cadc ,_cdgba byte )byte {return (_gceb &^(_cdgba ))|(_cadc &_cdgba )};func _ggbd (_ecf uint ,_ggcf byte )byte {return _ggcf >>_ecf <<_ecf };func (_egff *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _dabdc ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _egff ==nil {return nil ,_cb .Error (_dabdc ,"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 (_egff .Values )-1{return nil ,_cb .Errorf (_dabdc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _egff .Values [i ],nil ;};const (Vanilla Color =iota ;Chocolate ;);func (_bfae *Bitmap )setBit (_abe int ){_bfae .Data [(_abe >>3)]|=0x80>>uint (_abe &7)};func (_aafc *BitmapsArray )AddBitmaps (bm *Bitmaps ){_aafc .Values =append (_aafc .Values ,bm )};func (_ffag *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _ffag .removeBorderGeneral (left ,right ,top ,bot );};func (_ffafe *Boxes )selectWithIndicator (_bdeg *_d .NumSlice )(_eddg *Boxes ,_adfgf error ){const _ccdd ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _ffafe ==nil {return nil ,_cb .Error (_ccdd ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _bdeg ==nil {return nil ,_cb .Error (_ccdd ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_bdeg )!=len (*_ffafe ){return nil ,_cb .Error (_ccdd ,"\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 _geee ,_bae int ;for _acaa :=0;_acaa < len (*_bdeg );_acaa ++{if _geee ,_adfgf =_bdeg .GetInt (_acaa );_adfgf !=nil {return nil ,_cb .Wrap (_adfgf ,_ccdd ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _geee ==1{_bae ++;};};if _bae ==len (*_ffafe ){return _ffafe ,nil ;};_aggf :=Boxes {};for _cagc :=0;_cagc < len (*_bdeg );_cagc ++{_geee =int ((*_bdeg )[_cagc ]);if _geee ==0{continue ;};_aggf =append (_aggf ,(*_ffafe )[_cagc ]);};_eddg =&_aggf ;return _eddg ,nil ;};func _fdaf (_gagg ...MorphProcess )(_dgab error ){const _afcc ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _cbg ,_bfab int ;for _ecdab ,_adfc :=range _gagg {if _dgab =_adfc .verify (_ecdab ,&_cbg ,&_bfab );_dgab !=nil {return _cb .Wrap (_dgab ,_afcc ,"");};};if _bfab !=0&&_cbg !=0{return _cb .Error (_afcc ,"\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 (_cadcb *Bitmaps )AddBox (box *_de .Rectangle ){_cadcb .Boxes =append (_cadcb .Boxes ,box )};func (_gdag Points )Get (i int )(Point ,error ){if i > len (_gdag )-1{return Point {},_cb .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 _gdag [i ],nil ;};type fillSegment struct{_ggbg int ;_afdf int ;_fddb int ;_becfe int ;};func (_acfg *Bitmap )setEightPartlyBytes (_bdfb ,_febf int ,_ffbed uint64 )(_cgdc error ){var (_gga byte ;_ege int ;);const _becf ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _geg :=1;_geg <=_febf ;_geg ++{_ege =64-_geg *8;_gga =byte (_ffbed >>uint (_ege )&0xff);_b .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",_gga ,_bdfb ,_bdfb +_geg -1,_febf ,_ege );if _cgdc =_acfg .SetByte (_bdfb +_geg -1,_gga );_cgdc !=nil {return _cb .Wrap (_cgdc ,_becf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_cdec :=_acfg .RowStride *8-_acfg .Width ;if _cdec ==0{return nil ;};_ege -=8;_gga =byte (_ffbed >>uint (_ege )&0xff)<<uint (_cdec );if _cgdc =_acfg .SetByte (_bdfb +_febf ,_gga );_cgdc !=nil {return _cb .Wrap (_cgdc ,_becf ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func _fbeb (_gaac ,_eadgg int )int {if _gaac > _eadgg {return _gaac ;};return _eadgg ;};func _acfb (_aeae ,_ddda *Bitmap ,_bddf CombinationOperator )*Bitmap {_cgef :=New (_aeae .Width ,_aeae .Height );for _fbcg :=0;_fbcg < len (_cgef .Data );_fbcg ++{_cgef .Data [_fbcg ]=_dfdg (_aeae .Data [_fbcg ],_ddda .Data [_fbcg ],_bddf );};return _cgef ;};func (_dggg *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _ccbg ="\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 >=_dggg .IntSlice .Size (){return 0,_cb .Errorf (_ccbg ,"\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 (_dggg .XAtIndex (i )),nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _dfdg (oldByte ,newByte ,op );};func _dbce (_fffegg ,_fece ,_ebcdb *Bitmap ,_bbffg int )(*Bitmap ,error ){const _aeab ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _fece ==nil {return nil ,_cb .Error (_aeab ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _ebcdb ==nil {return nil ,_cb .Error (_aeab ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _bbffg !=4&&_bbffg !=8{return nil ,_cb .Error (_aeab ,"\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 _beaf error ;_fffegg ,_beaf =_dabb (_fffegg ,_fece );if _beaf !=nil {return nil ,_cb .Wrap (_beaf ,_aeab ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_ffgf :=_fece .createTemplate ();_ebcdb .setPadBits (0);for _gbcd :=0;_gbcd < _fcdga ;_gbcd ++{_ffgf ,_beaf =_dabb (_ffgf ,_fffegg );if _beaf !=nil {return nil ,_cb .Wrapf (_beaf ,_aeab ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gbcd );};if _beaf =_bbcf (_fffegg ,_ebcdb ,_bbffg );_beaf !=nil {return nil ,_cb .Wrapf (_beaf ,_aeab ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gbcd );};if _ffgf .Equals (_fffegg ){break ;};};return _fffegg ,nil ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _daee (d ,s ,sel )};func (_dega *Bitmap )inverseData (){if _ggg :=_dega .RasterOperation (0,0,_dega .Width ,_dega .Height ,PixNotDst ,nil ,0,0);_ggg !=nil {_b .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_ggg );};if _dega .Color ==Chocolate {_dega .Color =Vanilla ;}else {_dega .Color =Chocolate ;};};func _fage (_cbag *Bitmap ,_dgad *Bitmap ,_gcgf *Selection ,_gbea **Bitmap )(*Bitmap ,error ){const _dgeb ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _dgad ==nil {return nil ,_cb .Error (_dgeb ,"\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 _gcgf ==nil {return nil ,_cb .Error (_dgeb ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_ecfdc ,_fega :=_gcgf .Height ,_gcgf .Width ;if _ecfdc ==0||_fega ==0{return nil ,_cb .Error (_dgeb ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _cbag ==nil {_cbag =_dgad .createTemplate ();*_gbea =_dgad ;return _cbag ,nil ;};_cbag .Width =_dgad .Width ;_cbag .Height =_dgad .Height ;_cbag .RowStride =_dgad .RowStride ;_cbag .Color =_dgad .Color ;_cbag .Data =make ([]byte ,_dgad .RowStride *_dgad .Height );if _cbag ==_dgad {*_gbea =_dgad .Copy ();}else {*_gbea =_dgad ;};return _cbag ,nil ;};type SelectionValue int ;func New (width ,height int )*Bitmap {_bee :=_gccb (width ,height );_bee .Data =make ([]byte ,height *_bee .RowStride );return _bee ;};func (_agce *byHeight )Less (i ,j int )bool {return _agce .Values [i ].Height < _agce .Values [j ].Height };func (_eccf *Bitmaps )String ()string {_feff :=_cg .Builder {};for _ ,_aade :=range _eccf .Values {_feff .WriteString (_aade .String ());_feff .WriteRune ('\n');};return _feff .String ();};func (_aaga *Boxes )Add (box *_de .Rectangle )error {if _aaga ==nil {return _cb .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");};*_aaga =append (*_aaga ,box );return nil ;};func (_gfddc *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gdd *Bitmaps ,_bcab error ){const _faeb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _gfddc ==nil {return nil ,_cb .Error (_faeb ,"\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 ,_cb .Errorf (_faeb ,"\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 ,_cb .Errorf (_faeb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );};_dccad ,_bcab :=_gfddc .makeSizeIndicator (width ,height ,tp ,relation );if _bcab !=nil {return nil ,_cb .Wrap (_bcab ,_faeb ,"");};_gdd ,_bcab =_gfddc .selectByIndicator (_dccad );if _bcab !=nil {return nil ,_cb .Wrap (_bcab ,_faeb ,"");};return _gdd ,nil ;};func _cf (_cda *Bitmap ,_cfd ,_gbb int )(*Bitmap ,error ){const _cgf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _cda ==nil {return nil ,_cb .Error (_cgf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cfd <=0||_gbb <=0{return nil ,_cb .Error (_cgf ,"\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 _cfd ==_gbb {if _cfd ==1{_cfb ,_fgg :=_dabb (nil ,_cda );if _fgg !=nil {return nil ,_cb .Wrap (_fgg ,_cgf ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _cfb ,nil ;};if _cfd ==2||_cfd ==4||_cfd ==8{_agg ,_aa :=_adf (_cda ,_cfd );if _aa !=nil {return nil ,_cb .Wrap (_aa ,_cgf ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _agg ,nil ;};};_fd :=_cfd *_cda .Width ;_eda :=_gbb *_cda .Height ;_gdc :=New (_fd ,_eda );_gba :=_gdc .RowStride ;var (_gfe ,_feg ,_gde ,_cge ,_adb int ;_gcb byte ;_fa error ;);for _feg =0;_feg < _cda .Height ;_feg ++{_gfe =_gbb *_feg *_gba ;for _gde =0;_gde < _cda .Width ;_gde ++{if _bfac :=_cda .GetPixel (_gde ,_feg );_bfac {_adb =_cfd *_gde ;for _cge =0;_cge < _cfd ;_cge ++{_gdc .setBit (_gfe *8+_adb +_cge );};};};for _cge =1;_cge < _gbb ;_cge ++{_ece :=_gfe +_cge *_gba ;for _bd :=0;_bd < _gba ;_bd ++{if _gcb ,_fa =_gdc .GetByte (_gfe +_bd );_fa !=nil {return nil ,_cb .Wrapf (_fa ,_cgf ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_cge );};if _fa =_gdc .SetByte (_ece +_bd ,_gcb );_fa !=nil {return nil ,_cb .Wrap (_fa ,_cgf ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _gdc ,nil ;};func _gagc (_ebag ,_fcdbe *Bitmap ,_ecdae *Selection )(*Bitmap ,error ){const _cgfa ="\u006f\u0070\u0065\u006e";var _bdge error ;_ebag ,_bdge =_aeaef (_ebag ,_fcdbe ,_ecdae );if _bdge !=nil {return nil ,_cb .Wrap (_bdge ,_cgfa ,"");};_abea ,_bdge :=_ccf (nil ,_fcdbe ,_ecdae );if _bdge !=nil {return nil ,_cb .Wrap (_bdge ,_cgfa ,"");};_ ,_bdge =_daee (_ebag ,_abea ,_ecdae );if _bdge !=nil {return nil ,_cb .Wrap (_bdge ,_cgfa ,"");};return _ebag ,nil ;};func _ddd (_efb *Bitmap ,_eb *Bitmap ,_dfc int )(_bg error ){const _bfa ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _dfc {case 2:_bg =_deg (_efb ,_eb );case 4:_bg =_bc (_efb ,_eb );case 8:_bg =_ec (_efb ,_eb );default:return _cb .Error (_bfa ,"\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 _bg !=nil {_bg =_cb .Wrap (_bg ,_bfa ,"");};return _bg ;};func _aabg (_fcda ,_dbfb *Bitmap ,_ccgg ,_egeg int )(*Bitmap ,error ){const _edbd ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _dbfb ==nil {_b .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 ,_cb .Error (_edbd ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _ccgg < 1||_egeg < 1{return nil ,_cb .Error (_edbd ,"\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 _ccgg ==1&&_egeg ==1{_cdc ,_gdbabg :=_dabb (_fcda ,_dbfb );if _gdbabg !=nil {return nil ,_cb .Wrap (_gdbabg ,_edbd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _cdc ,nil ;};if _ccgg ==1||_egeg ==1{_gdcbc :=SelCreateBrick (_egeg ,_ccgg ,_egeg /2,_ccgg /2,SelHit );_fccc ,_efagg :=_daee (_fcda ,_dbfb ,_gdcbc );if _efagg !=nil {return nil ,_cb .Wrap (_efagg ,_edbd ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fccc ,nil ;};_afg :=SelCreateBrick (1,_ccgg ,0,_ccgg /2,SelHit );_cgde :=SelCreateBrick (_egeg ,1,_egeg /2,0,SelHit );_cbae ,_bcfc :=_daee (nil ,_dbfb ,_afg );if _bcfc !=nil {return nil ,_cb .Wrap (_bcfc ,_edbd ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_fcda ,_bcfc =_daee (_fcda ,_cbae ,_cgde );if _bcfc !=nil {return nil ,_cb .Wrap (_bcfc ,_edbd ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _fcda ,nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_ecda :=make ([]Point ,len (bms ));_gcbg :=_cade ();_efca :=_geea ();var _aggc error ;for _aadf ,_dbdf :=range bms {_ecda [_aadf ],_aggc =_dbdf .centroid (_gcbg ,_efca );if _aggc !=nil {return nil ,_aggc ;};};_cbc :=Points (_ecda );return &_cbc ,nil ;};func TstWordBitmap (t *_g .T ,scale ...int )*Bitmap {_ebdf :=1;if len (scale )> 0{_ebdf =scale [0];};_ebcdc :=3;_egbf :=9+7+15+2*_ebcdc ;_cefd :=5+_ebcdc +5;_bfba :=New (_egbf *_ebdf ,_cefd *_ebdf );_gbbbc :=&Bitmaps {};var _efgge *int ;_ebcdc *=_ebdf ;_eeca :=0;_efgge =&_eeca ;_dbecc :=0;_cdgff :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,_ebcdc );_cdgff =TstISymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,_ebcdc );_cdgff =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,0);*_efgge =0;_dbecc =5*_ebdf +_ebcdc ;_cdgff =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,_ebcdc );_cdgff =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,1*_ebdf );_cdgff =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gbbbc ,_cdgff ,_efgge ,_dbecc ,0);TstWriteSymbols (t ,_gbbbc ,_bfba );return _bfba ;};func _eccd (_acag int )int {if _acag < 0{return -_acag ;};return _acag ;};func (_gcaf *Bitmap )resizeImageData (_aedf *Bitmap )error {if _aedf ==nil {return _cb .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 _gcaf .SizesEqual (_aedf ){return nil ;};_gcaf .Data =make ([]byte ,len (_aedf .Data ));_gcaf .Width =_aedf .Width ;_gcaf .Height =_aedf .Height ;_gcaf .RowStride =_aedf .RowStride ;return nil ;};type byWidth Bitmaps ;func (_eafa *ClassedPoints )Less (i ,j int )bool {return _eafa ._caa (i ,j )};type BoundaryCondition int ;func (_fad *Bitmap )SizesEqual (s *Bitmap )bool {if _fad ==s {return true ;};if _fad .Width !=s .Width ||_fad .Height !=s .Height {return false ;};return true ;};func (_bggbg *ClassedPoints )YAtIndex (i int )float32 {return (*_bggbg .Points )[_bggbg .IntSlice [i ]].Y };func (_gacb *Boxes )makeSizeIndicator (_facd ,_beff int ,_cgcc LocationFilter ,_ffeb SizeComparison )*_d .NumSlice {_gcea :=&_d .NumSlice {};var _feaa ,_cgdcg ,_geef int ;for _ ,_faaeg :=range *_gacb {_feaa =0;_cgdcg ,_geef =_faaeg .Dx (),_faaeg .Dy ();switch _cgcc {case LocSelectWidth :if (_ffeb ==SizeSelectIfLT &&_cgdcg < _facd )||(_ffeb ==SizeSelectIfGT &&_cgdcg > _facd )||(_ffeb ==SizeSelectIfLTE &&_cgdcg <=_facd )||(_ffeb ==SizeSelectIfGTE &&_cgdcg >=_facd ){_feaa =1;};case LocSelectHeight :if (_ffeb ==SizeSelectIfLT &&_geef < _beff )||(_ffeb ==SizeSelectIfGT &&_geef > _beff )||(_ffeb ==SizeSelectIfLTE &&_geef <=_beff )||(_ffeb ==SizeSelectIfGTE &&_geef >=_beff ){_feaa =1;};case LocSelectIfEither :if (_ffeb ==SizeSelectIfLT &&(_geef < _beff ||_cgdcg < _facd ))||(_ffeb ==SizeSelectIfGT &&(_geef > _beff ||_cgdcg > _facd ))||(_ffeb ==SizeSelectIfLTE &&(_geef <=_beff ||_cgdcg <=_facd ))||(_ffeb ==SizeSelectIfGTE &&(_geef >=_beff ||_cgdcg >=_facd )){_feaa =1;};case LocSelectIfBoth :if (_ffeb ==SizeSelectIfLT &&(_geef < _beff &&_cgdcg < _facd ))||(_ffeb ==SizeSelectIfGT &&(_geef > _beff &&_cgdcg > _facd ))||(_ffeb ==SizeSelectIfLTE &&(_geef <=_beff &&_cgdcg <=_facd ))||(_ffeb ==SizeSelectIfGTE &&(_geef >=_beff &&_cgdcg >=_facd )){_feaa =1;};};_gcea .AddInt (_feaa );};return _gcea ;};func (_adbfd *byWidth )Swap (i ,j int ){_adbfd .Values [i ],_adbfd .Values [j ]=_adbfd .Values [j ],_adbfd .Values [i ];if _adbfd .Boxes !=nil {_adbfd .Boxes [i ],_adbfd .Boxes [j ]=_adbfd .Boxes [j ],_adbfd .Boxes [i ];};};func _bcgce (_fed ,_cfca *Bitmap ,_bcge ,_bgef int )(*Bitmap ,error ){const _efcg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _cfca ==nil {return nil ,_cb .Error (_efcg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bcge < 1||_bgef < 1{return nil ,_cb .Error (_efcg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _bcge ==1&&_bgef ==1{return _cfca .Copy (),nil ;};if _bcge ==1||_bgef ==1{_ddefd :=SelCreateBrick (_bgef ,_bcge ,_bgef /2,_bcge /2,SelHit );var _dfbb error ;_fed ,_dfbb =_add (_fed ,_cfca ,_ddefd );if _dfbb !=nil {return nil ,_cb .Wrap (_dfbb ,_efcg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fed ,nil ;};_fcfg :=SelCreateBrick (1,_bcge ,0,_bcge /2,SelHit );_cgcd :=SelCreateBrick (_bgef ,1,_bgef /2,0,SelHit );_cbbg ,_febed :=_daee (nil ,_cfca ,_fcfg );if _febed !=nil {return nil ,_cb .Wrap (_febed ,_efcg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _fed ,_febed =_daee (_fed ,_cbbg ,_cgcd );_febed !=nil {return nil ,_cb .Wrap (_febed ,_efcg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_febed =_ccf (_cbbg ,_fed ,_fcfg );_febed !=nil {return nil ,_cb .Wrap (_febed ,_efcg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};if _ ,_febed =_ccf (_fed ,_cbbg ,_cgcd );_febed !=nil {return nil ,_cb .Wrap (_febed ,_efcg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _fed ,nil ;};func (_dffg *Bitmaps )GetBox (i int )(*_de .Rectangle ,error ){const _dbff ="\u0047\u0065\u0074\u0042\u006f\u0078";if _dffg ==nil {return nil ,_cb .Error (_dbff ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_dffg .Boxes )-1{return nil ,_cb .Errorf (_dbff ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dffg .Boxes [i ],nil ;};type shift int ;func TstVSymbol (t *_g .T ,scale ...int )*Bitmap {_efggb ,_eaeg :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_a .NoError (t ,_eaeg );return TstGetScaledSymbol (t ,_efggb ,scale ...);};func _fegd (_cabb *Bitmap ,_bdad ,_eaed ,_ccbgf ,_bfg int ,_abaga RasterOperator ){if _bdad < 0{_ccbgf +=_bdad ;_bdad =0;};_cgdb :=_bdad +_ccbgf -_cabb .Width ;if _cgdb > 0{_ccbgf -=_cgdb ;};if _eaed < 0{_bfg +=_eaed ;_eaed =0;};_bedef :=_eaed +_bfg -_cabb .Height ;if _bedef > 0{_bfg -=_bedef ;};if _ccbgf <=0||_bfg <=0{return ;};if (_bdad &7)==0{_gfcfc (_cabb ,_bdad ,_eaed ,_ccbgf ,_bfg ,_abaga );}else {_ecde (_cabb ,_bdad ,_eaed ,_ccbgf ,_bfg ,_abaga );};};type Boxes []*_de .Rectangle ;func (_dea *Bitmap )SetDefaultPixel (){for _fabb :=range _dea .Data {_dea .Data [_fabb ]=byte (0xff);};};func _fdfa (_ffdb *Bitmap ,_dcdd int )(*Bitmap ,error ){const _dcbb ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _ffdb ==nil {return nil ,_cb .Error (_dcbb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dcdd <=0{return nil ,_cb .Error (_dcbb ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _dcdd ==1{_aefbb ,_cgcb :=_dabb (nil ,_ffdb );if _cgcb !=nil {return nil ,_cb .Wrap (_cgcb ,_dcbb ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _aefbb ,nil ;};_agde ,_cfcae :=_cf (_ffdb ,_dcdd ,_dcdd );if _cfcae !=nil {return nil ,_cb .Wrap (_cfcae ,_dcbb ,"");};return _agde ,nil ;};func (_caed *Bitmap )removeBorderGeneral (_acgg ,_dbgg ,_cgca ,_ffc int )(*Bitmap ,error ){const _bdbd ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _acgg < 0||_dbgg < 0||_cgca < 0||_ffc < 0{return nil ,_cb .Error (_bdbd ,"\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");};_ccea ,_bcgc :=_caed .Width ,_caed .Height ;_cee :=_ccea -_acgg -_dbgg ;_bdg :=_bcgc -_cgca -_ffc ;if _cee <=0{return nil ,_cb .Errorf (_bdbd ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_cee );};if _bdg <=0{return nil ,_cb .Errorf (_bdbd ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_bdg );};_cefa :=New (_cee ,_bdg );_cefa .Color =_caed .Color ;_gaaae :=_cefa .RasterOperation (0,0,_cee ,_bdg ,PixSrc ,_caed ,_acgg ,_cgca );if _gaaae !=nil {return nil ,_cb .Wrap (_gaaae ,_bdbd ,"");};return _cefa ,nil ;};type byHeight Bitmaps ;func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _ggb ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_debg :=_gccb (width ,height );_debg .Data =data ;if len (data )< height *_debg .RowStride {return nil ,_cb .Errorf (_ggb ,"\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 *_debg .RowStride );};return _debg ,nil ;};func (_fdbac *Bitmap )setFourBytes (_aebgc int ,_egcef uint32 )error {if _aebgc +3> len (_fdbac .Data )-1{return _cb .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",_aebgc );};_fdbac .Data [_aebgc ]=byte ((_egcef &0xff000000)>>24);_fdbac .Data [_aebgc +1]=byte ((_egcef &0xff0000)>>16);_fdbac .Data [_aebgc +2]=byte ((_egcef &0xff00)>>8);_fdbac .Data [_aebgc +3]=byte (_egcef &0xff);return nil ;};func (_eegd *Bitmap )GetChocolateData ()[]byte {if _eegd .Color ==Vanilla {_eegd .inverseData ();};return _eegd .Data ;};func (_fac *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _fac .addBorderGeneral (left ,right ,top ,bot ,val );};func (_bdbc MorphProcess )verify (_gcgd int ,_gagfd ,_fga *int )error {const _ffacd ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _bdbc .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_bdbc .Arguments )!=2{return _cb .Error (_ffacd ,"\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");};_befa ,_ccde :=_bdbc .getWidthHeight ();if _befa <=0||_ccde <=0{return _cb .Error (_ffacd ,"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 :_deeea :=len (_bdbc .Arguments );*_gagfd +=_deeea ;if _deeea < 1||_deeea > 4{return _cb .Error (_ffacd ,"\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 _dcec :=0;_dcec < _deeea ;_dcec ++{if _bdbc .Arguments [_dcec ]< 1||_bdbc .Arguments [_dcec ]> 4{return _cb .Error (_ffacd ,"\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 (_bdbc .Arguments )==0{return _cb .Error (_ffacd ,"\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");};_ddcg :=_bdbc .Arguments [0];if _ddcg !=2&&_ddcg !=4&&_ddcg !=8{return _cb .Error (_ffacd ,"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");};*_gagfd -=_fcdgc [_ddcg /4];case MopAddBorder :if len (_bdbc .Arguments )==0{return _cb .Error (_ffacd ,"\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");};_dcba :=_bdbc .Arguments [0];if _gcgd > 0{return _cb .Error (_ffacd ,"\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 _dcba < 1{return _cb .Error (_ffacd ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_fga =_dcba ;};return nil ;};func _gccb (_fef ,_cbe int )*Bitmap {return &Bitmap {Width :_fef ,Height :_cbe ,RowStride :(_fef +7)>>3};};var _edb [256]uint8 ;func (_aef *Bitmap )SetPadBits (value int ){_aef .setPadBits (value )};func (_agfd *Bitmap )setPadBits (_gcec int ){_abbb :=8-_agfd .Width %8;if _abbb ==8{return ;};_gfbc :=_agfd .Width /8;_cbee :=_gfbgf [_abbb ];if _gcec ==0{_cbee ^=_cbee ;};var _efgd int ;for _adfge :=0;_adfge < _agfd .Height ;_adfge ++{_efgd =_adfge *_agfd .RowStride +_gfbc ;if _gcec ==0{_agfd .Data [_efgd ]&=_cbee ;}else {_agfd .Data [_efgd ]|=_cbee ;};};};func (_abb *Bitmap )ClipRectangle (box *_de .Rectangle )(_gca *Bitmap ,_bce *_de .Rectangle ,_gcg error ){const _dad ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_cb .Error (_dad ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_gcgc ,_bcf :=_abb .Width ,_abb .Height ;_gbe :=_de .Rect (0,0,_gcgc ,_bcf );if !box .Overlaps (_gbe ){return nil ,nil ,_cb .Error (_dad ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_ebaf :=box .Intersect (_gbe );_adfa ,_dac :=_ebaf .Min .X ,_ebaf .Min .Y ;_ddg ,_ebg :=_ebaf .Dx (),_ebaf .Dy ();_gca =New (_ddg ,_ebg );_gca .Text =_abb .Text ;if _gcg =_gca .RasterOperation (0,0,_ddg ,_ebg ,PixSrc ,_abb ,_adfa ,_dac );_gcg !=nil {return nil ,nil ,_cb .Wrap (_gcg ,_dad ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");};_bce =&_ebaf ;return _gca ,_bce ,nil ;};func (_acb *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _acb .Copy (),nil ;};_bcb ,_bgcg :=_acb .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _bgcg !=nil {return nil ,_cb .Wrap (_bgcg ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _bcb ,nil ;};func (_egb *Bitmap )connComponentsBitmapsBB (_ace *Bitmaps ,_defc int )(_gaacf *Boxes ,_adbd error ){const _dgcf ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _defc !=4&&_defc !=8{return nil ,_cb .Error (_dgcf ,"\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 _ace ==nil {return nil ,_cb .Error (_dgcf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_ace .Values )> 0{return nil ,_cb .Error (_dgcf ,"\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 _egb .Zero (){return &Boxes {},nil ;};var (_dfaf ,_fda ,_edbg ,_fgde *Bitmap ;);_egb .setPadBits (0);if _dfaf ,_adbd =_dabb (nil ,_egb );_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"\u0062\u006d\u0031");};if _fda ,_adbd =_dabb (nil ,_egb );_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"\u0062\u006d\u0032");};_ebcf :=&_d .Stack {};_ebcf .Aux =&_d .Stack {};_gaacf =&Boxes {};var (_bbbf ,_bdbg int ;_ebfa _de .Point ;_ffeg bool ;_fcdg *_de .Rectangle ;);for {if _ebfa ,_ffeg ,_adbd =_dfaf .nextOnPixel (_bbbf ,_bdbg );_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"");};if !_ffeg {break ;};if _fcdg ,_adbd =_gaeb (_dfaf ,_ebcf ,_ebfa .X ,_ebfa .Y ,_defc );_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"");};if _adbd =_gaacf .Add (_fcdg );_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"");};if _edbg ,_adbd =_dfaf .clipRectangle (_fcdg ,nil );_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"\u0062\u006d\u0033");};if _fgde ,_adbd =_fda .clipRectangle (_fcdg ,nil );_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"\u0062\u006d\u0034");};if _ ,_adbd =_ebcd (_edbg ,_edbg ,_fgde );_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _adbd =_fda .RasterOperation (_fcdg .Min .X ,_fcdg .Min .Y ,_fcdg .Dx (),_fcdg .Dy (),PixSrcXorDst ,_edbg ,0,0);_adbd !=nil {return nil ,_cb .Wrap (_adbd ,_dgcf ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_ace .AddBitmap (_edbg );_bbbf =_ebfa .X ;_bdbg =_ebfa .Y ;};_ace .Boxes =*_gaacf ;return _gaacf ,nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _babbb ="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 ,_cb .Error (_babbb ,"\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 ,_cb .Error (_babbb ,"\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 ,_cb .Error (_babbb ,"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 ,_cb .Error (_babbb ,"\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 ,_cb .Error (_babbb ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");};_agbb ,_egcc :=bm1 .Width ,bm1 .Height ;_acdd ,_gagf :=bm2 .Width ,bm2 .Height ;if _d .Abs (_agbb -_acdd )> maxDiffW {return false ,nil ;};if _d .Abs (_egcc -_gagf )> maxDiffH {return false ,nil ;};_dfcg :=int (delX +_d .Sign (delX )*0.5);_beb :=int (delY +_d .Sign (delY )*0.5);_feada :=int (_ea .Ceil (_ea .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_gafb :=bm2 .RowStride ;_abf :=_fbeb (_beb ,0);_aefab :=_cgffg (_gagf +_beb ,_egcc );_abfg :=bm1 .RowStride *_abf ;_efda :=bm2 .RowStride *(_abf -_beb );var _fbbg int ;if _aefab <=_egcc {_fbbg =downcount [_aefab -1];};_eddb :=_fbeb (_dfcg ,0);_bfb :=_cgffg (_acdd +_dfcg ,_agbb );var _bede ,_ggae int ;if _dfcg >=8{_bede =_dfcg >>3;_abfg +=_bede ;_eddb -=_bede <<3;_bfb -=_bede <<3;_dfcg &=7;}else if _dfcg <=-8{_ggae =-((_dfcg +7)>>3);_efda +=_ggae ;_gafb -=_ggae ;_dfcg +=_ggae <<3;};var (_gfcf ,_gfea ,_gbfb int ;_fbed ,_gdfc ,_geag byte ;);if _eddb >=_bfb ||_abf >=_aefab {return false ,nil ;};_ageg :=(_bfb +7)>>3;switch {case _dfcg ==0:for _gfea =_abf ;_gfea < _aefab ;_gfea ,_abfg ,_efda =_gfea +1,_abfg +bm1 .RowStride ,_efda +bm2 .RowStride {for _gbfb =0;_gbfb < _ageg ;_gbfb ++{_fbed =bm1 .Data [_abfg +_gbfb ]&bm2 .Data [_efda +_gbfb ];_gfcf +=tab [_fbed ];};if _gfcf >=_feada {return true ,nil ;};if _egdb :=_gfcf +downcount [_gfea ]-_fbbg ;_egdb < _feada {return false ,nil ;};};case _dfcg > 0&&_gafb < _ageg :for _gfea =_abf ;_gfea < _aefab ;_gfea ,_abfg ,_efda =_gfea +1,_abfg +bm1 .RowStride ,_efda +bm2 .RowStride {_gdfc =bm1 .Data [_abfg ];_geag =bm2 .Data [_efda ]>>uint (_dfcg );_fbed =_gdfc &_geag ;_gfcf +=tab [_fbed ];for _gbfb =1;_gbfb < _gafb ;_gbfb ++{_gdfc =bm1 .Data [_abfg +_gbfb ];_geag =bm2 .Data [_efda +_gbfb ]>>uint (_dfcg )|bm2 .Data [_efda +_gbfb -1]<<uint (8-_dfcg );_fbed =_gdfc &_geag ;_gfcf +=tab [_fbed ];};_gdfc =bm1 .Data [_abfg +_gbfb ];_geag =bm2 .Data [_efda +_gbfb -1]<<uint (8-_dfcg );_fbed =_gdfc &_geag ;_gfcf +=tab [_fbed ];if _gfcf >=_feada {return true ,nil ;}else if _gfcf +downcount [_gfea ]-_fbbg < _feada {return false ,nil ;};};case _dfcg > 0&&_gafb >=_ageg :for _gfea =_abf ;_gfea < _aefab ;_gfea ,_abfg ,_efda =_gfea +1,_abfg +bm1 .RowStride ,_efda +bm2 .RowStride {_gdfc =bm1 .Data [_abfg ];_geag =bm2 .Data [_efda ]>>uint (_dfcg );_fbed =_gdfc &_geag ;_gfcf +=tab [_fbed ];for _gbfb =1;_gbfb < _ageg ;_gbfb ++{_gdfc =bm1 .Data [_abfg +_gbfb ];_geag =bm2 .Data [_efda +_gbfb ]>>uint (_dfcg );_geag |=bm2 .Data [_efda +_gbfb -1]<<uint (8-_dfcg );_fbed =_gdfc &_geag ;_gfcf +=tab [_fbed ];};if _gfcf >=_feada {return true ,nil ;}else if _gfcf +downcount [_gfea ]-_fbbg < _feada {return false ,nil ;};};case _ageg < _gafb :for _gfea =_abf ;_gfea < _aefab ;_gfea ,_abfg ,_efda =_gfea +1,_abfg +bm1 .RowStride ,_efda +bm2 .RowStride {for _gbfb =0;_gbfb < _ageg ;_gbfb ++{_gdfc =bm1 .Data [_abfg +_gbfb ];_geag =bm2 .Data [_efda +_gbfb ]<<uint (-_dfcg );_geag |=bm2 .Data [_efda +_gbfb +1]>>uint (8+_dfcg );_fbed =_gdfc &_geag ;_gfcf +=tab [_fbed ];};if _gfcf >=_feada {return true ,nil ;}else if _bgg :=_gfcf +downcount [_gfea ]-_fbbg ;_bgg < _feada {return false ,nil ;};};case _gafb >=_ageg :for _gfea =_abf ;_gfea < _aefab ;_gfea ,_abfg ,_efda =_gfea +1,_abfg +bm1 .RowStride ,_efda +bm2 .RowStride {for _gbfb =0;_gbfb < _ageg ;_gbfb ++{_gdfc =bm1 .Data [_abfg +_gbfb ];_geag =bm2 .Data [_efda +_gbfb ]<<uint (-_dfcg );_geag |=bm2 .Data [_efda +_gbfb +1]>>uint (8+_dfcg );_fbed =_gdfc &_geag ;_gfcf +=tab [_fbed ];};_gdfc =bm1 .Data [_abfg +_gbfb ];_geag =bm2 .Data [_efda +_gbfb ]<<uint (-_dfcg );_fbed =_gdfc &_geag ;_gfcf +=tab [_fbed ];if _gfcf >=_feada {return true ,nil ;}else if _gfcf +downcount [_gfea ]-_fbbg < _feada {return false ,nil ;};};};_gef :=float32 (_gfcf )*float32 (_gfcf )/(float32 (area1 )*float32 (area2 ));if _gef >=scoreThreshold {_b .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",_gfcf ,_feada ,_gef ,scoreThreshold );};return false ,nil ;};type SizeComparison int ;func _dceb ()(_cad []byte ){_cad =make ([]byte ,256);for _dag :=0;_dag < 256;_dag ++{_cded :=byte (_dag );_cad [_cded ]=(_cded &0x01)|((_cded &0x04)>>1)|((_cded &0x10)>>2)|((_cded &0x40)>>3)|((_cded &0x02)<<3)|((_cded &0x08)<<2)|((_cded &0x20)<<1)|(_cded &0x80);};return _cad ;};func (_adec *Bitmap )setTwoBytes (_fgea int ,_ddbca uint16 )error {if _fgea +1> len (_adec .Data )-1{return _cb .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",_fgea );};_adec .Data [_fgea ]=byte ((_ddbca &0xff00)>>8);_adec .Data [_fgea +1]=byte (_ddbca &0xff);return nil ;};func _edbc (_ebdbg *Bitmap ,_cedb ,_eaac ,_eceg ,_fdge int ,_dfac RasterOperator ,_feec *Bitmap ,_cbda ,_aedfa int )error {var (_gdcf bool ;_gedf bool ;_afee int ;_cbgd int ;_acdad int ;_effa bool ;_bdaf byte ;_eeea int ;_addg int ;_ccac int ;_gaaad ,_ecbe int ;);_cgdced :=8-(_cedb &7);_acab :=_gfbgf [_cgdced ];_fagc :=_ebdbg .RowStride *_eaac +(_cedb >>3);_ebfe :=_feec .RowStride *_aedfa +(_cbda >>3);if _eceg < _cgdced {_gdcf =true ;_acab &=_eeeg [8-_cgdced +_eceg ];};if !_gdcf {_afee =(_eceg -_cgdced )>>3;if _afee > 0{_gedf =true ;_cbgd =_fagc +1;_acdad =_ebfe +1;};};_eeea =(_cedb +_eceg )&7;if !(_gdcf ||_eeea ==0){_effa =true ;_bdaf =_eeeg [_eeea ];_addg =_fagc +1+_afee ;_ccac =_ebfe +1+_afee ;};switch _dfac {case PixSrc :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],_feec .Data [_ebfe ],_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]=_feec .Data [_acdad +_ecbe ];};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],_feec .Data [_ccac ],_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixNotSrc :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],^_feec .Data [_ebfe ],_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]=^_feec .Data [_acdad +_ecbe ];};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],^_feec .Data [_ccac ],_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixSrcOrDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],_feec .Data [_ebfe ]|_ebdbg .Data [_fagc ],_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]|=_feec .Data [_acdad +_ecbe ];};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],_feec .Data [_ccac ]|_ebdbg .Data [_addg ],_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixSrcAndDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],_feec .Data [_ebfe ]&_ebdbg .Data [_fagc ],_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]&=_feec .Data [_acdad +_ecbe ];};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],_feec .Data [_ccac ]&_ebdbg .Data [_addg ],_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixSrcXorDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],_feec .Data [_ebfe ]^_ebdbg .Data [_fagc ],_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]^=_feec .Data [_acdad +_ecbe ];};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],_feec .Data [_ccac ]^_ebdbg .Data [_addg ],_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixNotSrcOrDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],^(_feec .Data [_ebfe ])|_ebdbg .Data [_fagc ],_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]|=^(_feec .Data [_acdad +_ecbe ]);};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],^(_feec .Data [_ccac ])|_ebdbg .Data [_addg ],_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixNotSrcAndDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],^(_feec .Data [_ebfe ])&_ebdbg .Data [_fagc ],_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]&=^_feec .Data [_acdad +_ecbe ];};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],^(_feec .Data [_ccac ])&_ebdbg .Data [_addg ],_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixSrcOrNotDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],_feec .Data [_ebfe ]|^(_ebdbg .Data [_fagc ]),_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]=_feec .Data [_acdad +_ecbe ]|^(_ebdbg .Data [_cbgd +_ecbe ]);};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],_feec .Data [_ccac ]|^(_ebdbg .Data [_addg ]),_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixSrcAndNotDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],_feec .Data [_ebfe ]&^(_ebdbg .Data [_fagc ]),_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]=_feec .Data [_acdad +_ecbe ]&^(_ebdbg .Data [_cbgd +_ecbe ]);};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],_feec .Data [_ccac ]&^(_ebdbg .Data [_addg ]),_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixNotPixSrcOrDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],^(_feec .Data [_ebfe ]|_ebdbg .Data [_fagc ]),_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]=^(_feec .Data [_acdad +_ecbe ]|_ebdbg .Data [_cbgd +_ecbe ]);};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],^(_feec .Data [_ccac ]|_ebdbg .Data [_addg ]),_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixNotPixSrcAndDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],^(_feec .Data [_ebfe ]&_ebdbg .Data [_fagc ]),_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]=^(_feec .Data [_acdad +_ecbe ]&_ebdbg .Data [_cbgd +_ecbe ]);};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],^(_feec .Data [_ccac ]&_ebdbg .Data [_addg ]),_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};case PixNotPixSrcXorDst :for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_fagc ]=_dcdgb (_ebdbg .Data [_fagc ],^(_feec .Data [_ebfe ]^_ebdbg .Data [_fagc ]),_acab );_fagc +=_ebdbg .RowStride ;_ebfe +=_feec .RowStride ;};if _gedf {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{for _ecbe =0;_ecbe < _afee ;_ecbe ++{_ebdbg .Data [_cbgd +_ecbe ]=^(_feec .Data [_acdad +_ecbe ]^_ebdbg .Data [_cbgd +_ecbe ]);};_cbgd +=_ebdbg .RowStride ;_acdad +=_feec .RowStride ;};};if _effa {for _gaaad =0;_gaaad < _fdge ;_gaaad ++{_ebdbg .Data [_addg ]=_dcdgb (_ebdbg .Data [_addg ],^(_feec .Data [_ccac ]^_ebdbg .Data [_addg ]),_bdaf );_addg +=_ebdbg .RowStride ;_ccac +=_feec .RowStride ;};};default:_b .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",_dfac );return _cb .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 _bdfgc (_gbeb *_d .Stack ,_bcac ,_ggfe ,_acbc ,_aecg ,_fadgf int ,_gbge *_de .Rectangle )(_egab error ){const _ebcb ="\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 _gbeb ==nil {return _cb .Error (_ebcb ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _gbge ==nil {return _cb .Error (_ebcb ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");};_gbge .Min .X =_d .Min (_gbge .Min .X ,_bcac );_gbge .Max .X =_d .Max (_gbge .Max .X ,_ggfe );_gbge .Min .Y =_d .Min (_gbge .Min .Y ,_acbc );_gbge .Max .Y =_d .Max (_gbge .Max .Y ,_acbc );if !(_acbc +_aecg >=0&&_acbc +_aecg <=_fadgf ){return nil ;};if _gbeb .Aux ==nil {return _cb .Error (_ebcb ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _affe *fillSegment ;_ffec ,_caab :=_gbeb .Aux .Pop ();if _caab {if _affe ,_caab =_ffec .(*fillSegment );!_caab {return _cb .Error (_ebcb ,"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 {_affe =&fillSegment {};};_affe ._ggbg =_bcac ;_affe ._afdf =_ggfe ;_affe ._fddb =_acbc ;_affe ._becfe =_aecg ;_gbeb .Push (_affe );return nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_de .Rectangle ;};func _cbca (_bgag *Bitmap ,_begcb ,_ebbf ,_bbga ,_daca int ,_gbda RasterOperator ,_adefb *Bitmap ,_afae ,_befba int )error {var (_dcfd bool ;_cgbab bool ;_adca byte ;_addgg int ;_egaf int ;_gbgga int ;_dgeg int ;_aedb bool ;_bace int ;_ggbc int ;_eeaba int ;_adefa bool ;_dbgbc byte ;_cbecc int ;_afcb int ;_eaad int ;_cbad byte ;_bgdbcc int ;_ffea int ;_baba uint ;_edgec uint ;_bbgfa byte ;_dadcb shift ;_fded bool ;_ffgbg bool ;_ccgbc ,_dbdbc int ;);if _afae &7!=0{_ffea =8-(_afae &7);};if _begcb &7!=0{_egaf =8-(_begcb &7);};if _ffea ==0&&_egaf ==0{_bbgfa =_gfbgf [0];}else {if _egaf > _ffea {_baba =uint (_egaf -_ffea );}else {_baba =uint (8-(_ffea -_egaf ));};_edgec =8-_baba ;_bbgfa =_gfbgf [_baba ];};if (_begcb &7)!=0{_dcfd =true ;_addgg =8-(_begcb &7);_adca =_gfbgf [_addgg ];_gbgga =_bgag .RowStride *_ebbf +(_begcb >>3);_dgeg =_adefb .RowStride *_befba +(_afae >>3);_bgdbcc =8-(_afae &7);if _addgg > _bgdbcc {_dadcb =_cfdca ;if _bbga >=_ffea {_fded =true ;};}else {_dadcb =_adab ;};};if _bbga < _addgg {_cgbab =true ;_adca &=_eeeg [8-_addgg +_bbga ];};if !_cgbab {_bace =(_bbga -_addgg )>>3;if _bace !=0{_aedb =true ;_ggbc =_bgag .RowStride *_ebbf +((_begcb +_egaf )>>3);_eeaba =_adefb .RowStride *_befba +((_afae +_egaf )>>3);};};_cbecc =(_begcb +_bbga )&7;if !(_cgbab ||_cbecc ==0){_adefa =true ;_dbgbc =_eeeg [_cbecc ];_afcb =_bgag .RowStride *_ebbf +((_begcb +_egaf )>>3)+_bace ;_eaad =_adefb .RowStride *_befba +((_afae +_egaf )>>3)+_bace ;if _cbecc > int (_edgec ){_ffgbg =true ;};};switch _gbda {case PixSrc :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],_cbad ,_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]=_cbad ;};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],_cbad ,_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixNotSrc :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],^_cbad ,_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]=^_cbad ;};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],^_cbad ,_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixSrcOrDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],_cbad |_bgag .Data [_gbgga ],_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]|=_cbad ;};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],_cbad |_bgag .Data [_afcb ],_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixSrcAndDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],_cbad &_bgag .Data [_gbgga ],_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]&=_cbad ;};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],_cbad &_bgag .Data [_afcb ],_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixSrcXorDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],_cbad ^_bgag .Data [_gbgga ],_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]^=_cbad ;};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],_cbad ^_bgag .Data [_afcb ],_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixNotSrcOrDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],^_cbad |_bgag .Data [_gbgga ],_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]|=^_cbad ;};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],^_cbad |_bgag .Data [_afcb ],_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixNotSrcAndDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],^_cbad &_bgag .Data [_gbgga ],_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]&=^_cbad ;};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],^_cbad &_bgag .Data [_afcb ],_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixSrcOrNotDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],_cbad |^_bgag .Data [_gbgga ],_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]=_cbad |^_bgag .Data [_ggbc +_dbdbc ];};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],_cbad |^_bgag .Data [_afcb ],_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixSrcAndNotDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],_cbad &^_bgag .Data [_gbgga ],_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]=_cbad &^_bgag .Data [_ggbc +_dbdbc ];};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],_cbad &^_bgag .Data [_afcb ],_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixNotPixSrcOrDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],^(_cbad |_bgag .Data [_gbgga ]),_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]=^(_cbad |_bgag .Data [_ggbc +_dbdbc ]);};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],^(_cbad |_bgag .Data [_afcb ]),_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixNotPixSrcAndDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],^(_cbad &_bgag .Data [_gbgga ]),_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]=^(_cbad &_bgag .Data [_ggbc +_dbdbc ]);};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],^(_cbad &_bgag .Data [_afcb ]),_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};case PixNotPixSrcXorDst :if _dcfd {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{if _dadcb ==_cfdca {_cbad =_adefb .Data [_dgeg ]<<_baba ;if _fded {_cbad =_dcdgb (_cbad ,_adefb .Data [_dgeg +1]>>_edgec ,_bbgfa );};}else {_cbad =_adefb .Data [_dgeg ]>>_edgec ;};_bgag .Data [_gbgga ]=_dcdgb (_bgag .Data [_gbgga ],^(_cbad ^_bgag .Data [_gbgga ]),_adca );_gbgga +=_bgag .RowStride ;_dgeg +=_adefb .RowStride ;};};if _aedb {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{for _dbdbc =0;_dbdbc < _bace ;_dbdbc ++{_cbad =_dcdgb (_adefb .Data [_eeaba +_dbdbc ]<<_baba ,_adefb .Data [_eeaba +_dbdbc +1]>>_edgec ,_bbgfa );_bgag .Data [_ggbc +_dbdbc ]=^(_cbad ^_bgag .Data [_ggbc +_dbdbc ]);};_ggbc +=_bgag .RowStride ;_eeaba +=_adefb .RowStride ;};};if _adefa {for _ccgbc =0;_ccgbc < _daca ;_ccgbc ++{_cbad =_adefb .Data [_eaad ]<<_baba ;if _ffgbg {_cbad =_dcdgb (_cbad ,_adefb .Data [_eaad +1]>>_edgec ,_bbgfa );};_bgag .Data [_afcb ]=_dcdgb (_bgag .Data [_afcb ],^(_cbad ^_bgag .Data [_afcb ]),_dbgbc );_afcb +=_bgag .RowStride ;_eaad +=_adefb .RowStride ;};};default:_b .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",_gbda );return _cb .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 _def (_eeg *Bitmap ,_agd ...int )(_da *Bitmap ,_aae error ){const _eba ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _eeg ==nil {return nil ,_cb .Error (_eba ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_agd )==0||len (_agd )> 4{return nil ,_cb .Error (_eba ,"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 _agd [0]<=0{_b .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");_da ,_aae =_dabb (nil ,_eeg );if _aae !=nil {return nil ,_cb .Wrap (_aae ,_eba ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");};return _da ,nil ;};_acf :=_dceb ();_da =_eeg ;for _cgg ,_ba :=range _agd {if _ba <=0{break ;};_da ,_aae =_bgb (_da ,_ba ,_acf );if _aae !=nil {return nil ,_cb .Wrapf (_aae ,_eba ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_cgg );};};return _da ,nil ;};func TstFrameBitmapData ()[]byte {return _fcdba .Data };func _fgf ()(_aaf [256]uint16 ){for _ged :=0;_ged < 256;_ged ++{if _ged &0x01!=0{_aaf [_ged ]|=0x3;};if _ged &0x02!=0{_aaf [_ged ]|=0xc;};if _ged &0x04!=0{_aaf [_ged ]|=0x30;};if _ged &0x08!=0{_aaf [_ged ]|=0xc0;};if _ged &0x10!=0{_aaf [_ged ]|=0x300;};if _ged &0x20!=0{_aaf [_ged ]|=0xc00;};if _ged &0x40!=0{_aaf [_ged ]|=0x3000;};if _ged &0x80!=0{_aaf [_ged ]|=0xc000;};};return _aaf ;};func _adf (_dgd *Bitmap ,_deb int )(*Bitmap ,error ){const _cbf ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _dgd ==nil {return nil ,_cb .Error (_cbf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _deb ==1{return _dabb (nil ,_dgd );};if _deb !=2&&_deb !=4&&_deb !=8{return nil ,_cb .Error (_cbf ,"\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");};_cgc :=_deb *_dgd .Width ;_fea :=_deb *_dgd .Height ;_gd :=New (_cgc ,_fea );var _ee error ;switch _deb {case 2:_ee =_deg (_gd ,_dgd );case 4:_ee =_bc (_gd ,_dgd );case 8:_ee =_ec (_gd ,_dgd );};if _ee !=nil {return nil ,_cb .Wrap (_ee ,_cbf ,"");};return _gd ,nil ;};func (_begd *byWidth )Less (i ,j int )bool {return _begd .Values [i ].Width < _begd .Values [j ].Width };func _cbea (_adbfb *Bitmap ,_bbaf *_d .Stack ,_dcfga ,_cfdb int )(_facde *_de .Rectangle ,_ecbddg error ){const _cgge ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _adbfb ==nil {return nil ,_cb .Error (_cgge ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _bbaf ==nil {return nil ,_cb .Error (_cgge ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_ccce ,_dbef :=_adbfb .Width ,_adbfb .Height ;_ggaa :=_ccce -1;_edcd :=_dbef -1;if _dcfga < 0||_dcfga > _ggaa ||_cfdb < 0||_cfdb > _edcd ||!_adbfb .GetPixel (_dcfga ,_cfdb ){return nil ,nil ;};_adgd :=_de .Rect (100000,100000,0,0);if _ecbddg =_bdfgc (_bbaf ,_dcfga ,_dcfga ,_cfdb ,1,_edcd ,&_adgd );_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ecbddg =_bdfgc (_bbaf ,_dcfga ,_dcfga ,_cfdb +1,-1,_edcd ,&_adgd );_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_adgd .Min .X ,_adgd .Max .X =_dcfga ,_dcfga ;_adgd .Min .Y ,_adgd .Max .Y =_cfdb ,_cfdb ;var (_ccbcf *fillSegment ;_gcde int ;);for _bbaf .Len ()> 0{if _ccbcf ,_ecbddg =_gdef (_bbaf );_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"");};_cfdb =_ccbcf ._fddb ;for _dcfga =_ccbcf ._ggbg -1;_dcfga >=0&&_adbfb .GetPixel (_dcfga ,_cfdb );_dcfga --{if _ecbddg =_adbfb .SetPixel (_dcfga ,_cfdb ,0);_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _dcfga >=_ccbcf ._ggbg -1{for {for _dcfga ++;_dcfga <=_ccbcf ._afdf +1&&_dcfga <=_ggaa &&!_adbfb .GetPixel (_dcfga ,_cfdb );_dcfga ++{};_gcde =_dcfga ;if !(_dcfga <=_ccbcf ._afdf +1&&_dcfga <=_ggaa ){break ;};for ;_dcfga <=_ggaa &&_adbfb .GetPixel (_dcfga ,_cfdb );_dcfga ++{if _ecbddg =_adbfb .SetPixel (_dcfga ,_cfdb ,0);_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ecbddg =_bdfgc (_bbaf ,_gcde ,_dcfga -1,_ccbcf ._fddb ,_ccbcf ._becfe ,_edcd ,&_adgd );_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dcfga > _ccbcf ._afdf {if _ecbddg =_bdfgc (_bbaf ,_ccbcf ._afdf +1,_dcfga -1,_ccbcf ._fddb ,-_ccbcf ._becfe ,_edcd ,&_adgd );_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_gcde =_dcfga +1;if _gcde < _ccbcf ._ggbg {if _ecbddg =_bdfgc (_bbaf ,_gcde ,_ccbcf ._ggbg -1,_ccbcf ._fddb ,-_ccbcf ._becfe ,_edcd ,&_adgd );_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_dcfga =_ccbcf ._ggbg ;for {for ;_dcfga <=_ggaa &&_adbfb .GetPixel (_dcfga ,_cfdb );_dcfga ++{if _ecbddg =_adbfb .SetPixel (_dcfga ,_cfdb ,0);_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ecbddg =_bdfgc (_bbaf ,_gcde ,_dcfga -1,_ccbcf ._fddb ,_ccbcf ._becfe ,_edcd ,&_adgd );_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dcfga > _ccbcf ._afdf {if _ecbddg =_bdfgc (_bbaf ,_ccbcf ._afdf +1,_dcfga -1,_ccbcf ._fddb ,-_ccbcf ._becfe ,_edcd ,&_adgd );_ecbddg !=nil {return nil ,_cb .Wrap (_ecbddg ,_cgge ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _dcfga ++;_dcfga <=_ccbcf ._afdf +1&&_dcfga <=_ggaa &&!_adbfb .GetPixel (_dcfga ,_cfdb );_dcfga ++{};_gcde =_dcfga ;if !(_dcfga <=_ccbcf ._afdf +1&&_dcfga <=_ggaa ){break ;};};};_adgd .Max .X ++;_adgd .Max .Y ++;return &_adgd ,nil ;};var (_fdg =_fgf ();_gdbab =_dfa ();_ccbc =_fff (););func TstWordBitmapWithSpaces (t *_g .T ,scale ...int )*Bitmap {_afebe :=1;if len (scale )> 0{_afebe =scale [0];};_ecab :=3;_dfec :=9+7+15+2*_ecab +2*_ecab ;_eega :=5+_ecab +5+2*_ecab ;_egcga :=New (_dfec *_afebe ,_eega *_afebe );_gbbf :=&Bitmaps {};var _fdgb *int ;_ecab *=_afebe ;_bfca :=_ecab ;_fdgb =&_bfca ;_dbgfd :=_ecab ;_bbeb :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,_ecab );_bbeb =TstISymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,_ecab );_bbeb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,0);*_fdgb =_ecab ;_dbgfd =5*_afebe +_ecab ;_bbeb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,_ecab );_bbeb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,1*_afebe );_bbeb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gbbf ,_bbeb ,_fdgb ,_dbgfd ,0);TstWriteSymbols (t ,_gbbf ,_egcga );return _egcga ;};func NewClassedPoints (points *Points ,classes _d .IntSlice )(*ClassedPoints ,error ){const _cfcf ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_cb .Error (_cfcf ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_cb .Error (_cfcf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_bac :=&ClassedPoints {Points :points ,IntSlice :classes };if _bgdbc :=_bac .validateIntSlice ();_bgdbc !=nil {return nil ,_cb .Wrap (_bgdbc ,_cfcf ,"");};return _bac ,nil ;};func _bbgf (_ceae ,_fdcb *Bitmap ,_gae ,_bedg ,_fcd ,_gebf ,_deag ,_eaae ,_aagd ,_bdeef int ,_edgd CombinationOperator ,_agfa int )error {var _ecac int ;_fbec :=func (){_ecac ++;_fcd +=_fdcb .RowStride ;_gebf +=_ceae .RowStride ;_deag +=_ceae .RowStride };for _ecac =_gae ;_ecac < _bedg ;_fbec (){var _bfcd uint16 ;_facg :=_fcd ;for _ggef :=_gebf ;_ggef <=_deag ;_ggef ++{_fccd ,_gec :=_fdcb .GetByte (_facg );if _gec !=nil {return _gec ;};_faff ,_gec :=_ceae .GetByte (_ggef );if _gec !=nil {return _gec ;};_bfcd =(_bfcd |(uint16 (_faff )&0xff))<<uint (_bdeef );_faff =byte (_bfcd >>8);if _gec =_fdcb .SetByte (_facg ,_dfdg (_fccd ,_faff ,_edgd ));_gec !=nil {return _gec ;};_facg ++;_bfcd <<=uint (_aagd );if _ggef ==_deag {_faff =byte (_bfcd >>(8-uint8 (_bdeef )));if _agfa !=0{_faff =_ggbd (uint (8+_eaae ),_faff );};_fccd ,_gec =_fdcb .GetByte (_facg );if _gec !=nil {return _gec ;};if _gec =_fdcb .SetByte (_facg ,_dfdg (_fccd ,_faff ,_edgd ));_gec !=nil {return _gec ;};};};};return nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_gebe *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _ecfg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _gebe ==nil {return nil ,_cb .Error (_ecfg ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_cb .Error (_ecfg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_egfec :=len (_gebe .Values );_dcbgc :=&Bitmaps {Values :make ([]*Bitmap ,_egfec ),Boxes :make ([]*_de .Rectangle ,_egfec )};var (_bbfd ,_bdce *Bitmap ;_aedd *_de .Rectangle ;_fbdc error ;);for _adfdc :=0;_adfdc < _egfec ;_adfdc ++{if _bbfd ,_fbdc =_gebe .GetBitmap (_adfdc );_fbdc !=nil {return nil ,_cb .Wrap (_fbdc ,_ecfg ,"");};if _aedd ,_fbdc =_gebe .GetBox (_adfdc );_fbdc !=nil {return nil ,_cb .Wrap (_fbdc ,_ecfg ,"");};if _bdce ,_fbdc =s .clipRectangle (_aedd ,nil );_fbdc !=nil {return nil ,_cb .Wrap (_fbdc ,_ecfg ,"");};if _bdce ,_fbdc =_bdce .And (_bbfd );_fbdc !=nil {return nil ,_cb .Wrap (_fbdc ,_ecfg ,"");};_dcbgc .Values [_adfdc ]=_bdce ;_dcbgc .Boxes [_adfdc ]=_aedd ;};return _dcbgc ,nil ;};func (_fdgd Points )GetGeometry (i int )(_eded ,_faea float32 ,_gfcd error ){if i > len (_fdgd )-1{return 0,0,_cb .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 );};_efec :=_fdgd [i ];return _efec .X ,_efec .Y ,nil ;};func _dbec (_bfagc *Bitmap )(_gbbb *Bitmap ,_babb int ,_cadd error ){const _gbgg ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _bfagc ==nil {return nil ,0,_cb .Errorf (_gbgg ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _fead ,_acce *Bitmap ;if _fead ,_cadd =_dabb (nil ,_bfagc );_cadd !=nil {return nil ,0,_cb .Wrap (_cadd ,_gbgg ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_gda [13]int ;_dcebg ,_ddef int ;);_ddfd :=12;_efag :=_d .NewNumSlice (_ddfd +1);_aagg :=_d .NewNumSlice (_ddfd +1);var _dgaf *Boxes ;for _eaba :=0;_eaba <=_ddfd ;_eaba ++{if _eaba ==0{if _acce ,_cadd =_dabb (nil ,_fead );_cadd !=nil {return nil ,0,_cb .Wrap (_cadd ,_gbgg ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _acce ,_cadd =_acec (_fead ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_cadd !=nil {return nil ,0,_cb .Wrap (_cadd ,_gbgg ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _dgaf ,_cadd =_acce .connComponentsBB (4);_cadd !=nil {return nil ,0,_cb .Wrap (_cadd ,_gbgg ,"");};_gda [_eaba ]=len (*_dgaf );_efag .AddInt (_gda [_eaba ]);switch _eaba {case 0:_dcebg =_gda [0];default:_ddef =_gda [_eaba -1]-_gda [_eaba ];_aagg .AddInt (_ddef );};_fead =_acce ;};_agag :=true ;_aebe :=2;var _begf ,_deec int ;for _bdfa :=1;_bdfa < len (*_aagg );_bdfa ++{if _begf ,_cadd =_efag .GetInt (_bdfa );_cadd !=nil {return nil ,0,_cb .Wrap (_cadd ,_gbgg ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _agag &&_begf < int (0.3*float32 (_dcebg )){_aebe =_bdfa +1;_agag =false ;};if _ddef ,_cadd =_aagg .GetInt (_bdfa );_cadd !=nil {return nil ,0,_cb .Wrap (_cadd ,_gbgg ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _ddef > _deec {_deec =_ddef ;};};_fca :=_bfagc .XResolution ;if _fca ==0{_fca =150;};if _fca > 110{_aebe ++;};if _aebe < 2{_b .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");_aebe =2;};_babb =_aebe +1;if _gbbb ,_cadd =_bcgce (nil ,_bfagc ,_aebe +1,1);_cadd !=nil {return nil ,0,_cb .Wrap (_cadd ,_gbgg ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _gbbb ,_babb ,nil ;};type Points []Point ;func (_fc *Bitmap )InverseData (){_fc .inverseData ()};func _ccf (_faceg ,_fffa *Bitmap ,_gcdbg *Selection )(*Bitmap ,error ){const _agec ="\u0065\u0072\u006fd\u0065";var (_ecfd error ;_gefg *Bitmap ;);_faceg ,_ecfd =_fage (_faceg ,_fffa ,_gcdbg ,&_gefg );if _ecfd !=nil {return nil ,_cb .Wrap (_ecfd ,_agec ,"");};if _ecfd =_faceg .setAll ();_ecfd !=nil {return nil ,_cb .Wrap (_ecfd ,_agec ,"");};var _gdaa SelectionValue ;for _gfdc :=0;_gfdc < _gcdbg .Height ;_gfdc ++{for _agafe :=0;_agafe < _gcdbg .Width ;_agafe ++{_gdaa =_gcdbg .Data [_gfdc ][_agafe ];if _gdaa ==SelHit {_ecfd =_ffgb (_faceg ,_gcdbg .Cx -_agafe ,_gcdbg .Cy -_gfdc ,_fffa .Width ,_fffa .Height ,PixSrcAndDst ,_gefg ,0,0);if _ecfd !=nil {return nil ,_cb .Wrap (_ecfd ,_agec ,"");};};};};if MorphBC ==SymmetricMorphBC {return _faceg ,nil ;};_befd ,_bbfc ,_ggdc ,_gggd :=_gcdbg .findMaxTranslations ();if _befd > 0{if _ecfd =_faceg .RasterOperation (0,0,_befd ,_fffa .Height ,PixClr ,nil ,0,0);_ecfd !=nil {return nil ,_cb .Wrap (_ecfd ,_agec ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _ggdc > 0{if _ecfd =_faceg .RasterOperation (_fffa .Width -_ggdc ,0,_ggdc ,_fffa .Height ,PixClr ,nil ,0,0);_ecfd !=nil {return nil ,_cb .Wrap (_ecfd ,_agec ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _bbfc > 0{if _ecfd =_faceg .RasterOperation (0,0,_fffa .Width ,_bbfc ,PixClr ,nil ,0,0);_ecfd !=nil {return nil ,_cb .Wrap (_ecfd ,_agec ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _gggd > 0{if _ecfd =_faceg .RasterOperation (0,_fffa .Height -_gggd ,_fffa .Width ,_gggd ,PixClr ,nil ,0,0);_ecfd !=nil {return nil ,_cb .Wrap (_ecfd ,_agec ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _faceg ,nil ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_fffg *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _cecfb ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_fffg .Values )==0{return nil ,_cb .Error (_cecfb ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_fcab :=&BitmapsArray {};_fffg .SortByWidth ();_dfcb :=-1;_dbea :=-1;for _ddcd :=0;_ddcd < len (_fffg .Values );_ddcd ++{_gfgge :=_fffg .Values [_ddcd ].Width ;if _gfgge > _dfcb {_dfcb =_gfgge ;_dbea ++;_fcab .Values =append (_fcab .Values ,&Bitmaps {});};_fcab .Values [_dbea ].AddBitmap (_fffg .Values [_ddcd ]);};return _fcab ,nil ;};type Point struct{X ,Y float32 ;};func TstISymbol (t *_g .T ,scale ...int )*Bitmap {_eafb ,_afdd :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_a .NoError (t ,_afdd );return TstGetScaledSymbol (t ,_eafb ,scale ...);};func (_fegf *Bitmaps )CountPixels ()*_d .NumSlice {_dgdcc :=&_d .NumSlice {};for _ ,_ecdfe :=range _fegf .Values {_dgdcc .AddInt (_ecdfe .CountPixels ());};return _dgdcc ;};func (_gcga *Boxes )Get (i int )(*_de .Rectangle ,error ){const _eae ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _gcga ==nil {return nil ,_cb .Error (_eae ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_gcga )-1{return nil ,_cb .Errorf (_eae ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_gcga )[i ],nil ;};func TstAddSymbol (t *_g .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_egge :=_de .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_egge );*x +=sym .Width +space ;};func (_facb *ClassedPoints )xSortFunction ()func (_dabdg int ,_cedg int )bool {return func (_affb ,_aggcb int )bool {return _facb .XAtIndex (_affb )< _facb .XAtIndex (_aggcb )};};func (_gagdc Points )XSorter ()func (_gffd ,_edef int )bool {return func (_efff ,_gcge int )bool {return _gagdc [_efff ].X < _gagdc [_gcge ].X };};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func (_aeea *Bitmap )SetByte (index int ,v byte )error {if index > len (_aeea .Data )-1||index < 0{return _cb .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 );};_aeea .Data [index ]=v ;return nil ;};func TstFrameBitmap ()*Bitmap {return _fcdba .Copy ()};func (_bffd *Bitmaps )makeSizeIndicator (_fgcf ,_ddcc int ,_beaa LocationFilter ,_acdb SizeComparison )(_abg *_d .NumSlice ,_egdcf error ){const _bdbcf ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _bffd ==nil {return nil ,_cb .Error (_bdbcf ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _beaa {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_cb .Errorf (_bdbcf ,"\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",_beaa );};switch _acdb {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_cb .Errorf (_bdbcf ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_acdb );};_abg =&_d .NumSlice {};var (_ddgef ,_egeef ,_faffe int ;_cfa *Bitmap ;);for _ ,_cfa =range _bffd .Values {_ddgef =0;_egeef ,_faffe =_cfa .Width ,_cfa .Height ;switch _beaa {case LocSelectWidth :if (_acdb ==SizeSelectIfLT &&_egeef < _fgcf )||(_acdb ==SizeSelectIfGT &&_egeef > _fgcf )||(_acdb ==SizeSelectIfLTE &&_egeef <=_fgcf )||(_acdb ==SizeSelectIfGTE &&_egeef >=_fgcf )||(_acdb ==SizeSelectIfEQ &&_egeef ==_fgcf ){_ddgef =1;};case LocSelectHeight :if (_acdb ==SizeSelectIfLT &&_faffe < _ddcc )||(_acdb ==SizeSelectIfGT &&_faffe > _ddcc )||(_acdb ==SizeSelectIfLTE &&_faffe <=_ddcc )||(_acdb ==SizeSelectIfGTE &&_faffe >=_ddcc )||(_acdb ==SizeSelectIfEQ &&_faffe ==_ddcc ){_ddgef =1;};case LocSelectIfEither :if (_acdb ==SizeSelectIfLT &&(_egeef < _fgcf ||_faffe < _ddcc ))||(_acdb ==SizeSelectIfGT &&(_egeef > _fgcf ||_faffe > _ddcc ))||(_acdb ==SizeSelectIfLTE &&(_egeef <=_fgcf ||_faffe <=_ddcc ))||(_acdb ==SizeSelectIfGTE &&(_egeef >=_fgcf ||_faffe >=_ddcc ))||(_acdb ==SizeSelectIfEQ &&(_egeef ==_fgcf ||_faffe ==_ddcc )){_ddgef =1;};case LocSelectIfBoth :if (_acdb ==SizeSelectIfLT &&(_egeef < _fgcf &&_faffe < _ddcc ))||(_acdb ==SizeSelectIfGT &&(_egeef > _fgcf &&_faffe > _ddcc ))||(_acdb ==SizeSelectIfLTE &&(_egeef <=_fgcf &&_faffe <=_ddcc ))||(_acdb ==SizeSelectIfGTE &&(_egeef >=_fgcf &&_faffe >=_ddcc ))||(_acdb ==SizeSelectIfEQ &&(_egeef ==_fgcf &&_faffe ==_ddcc )){_ddgef =1;};};_abg .AddInt (_ddgef );};return _abg ,nil ;};func (_adecg *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _gdcg ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _eaec :=_adecg .validateIntSlice ();_eaec !=nil {return nil ,_cb .Wrap (_eaec ,_gdcg ,"");};if _adecg .IntSlice .Size ()==0{return nil ,_cb .Error (_gdcg ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_adecg .SortByY ();var (_fggb []*ClassedPoints ;_aeee int ;);_ebee :=-1;var _cbbe *ClassedPoints ;for _cegf :=0;_cegf < len (_adecg .IntSlice );_cegf ++{_aeee =int (_adecg .YAtIndex (_cegf ));if _aeee !=_ebee {_cbbe =&ClassedPoints {Points :_adecg .Points };_ebee =_aeee ;_fggb =append (_fggb ,_cbbe );};_cbbe .IntSlice =append (_cbbe .IntSlice ,_adecg .IntSlice [_cegf ]);};for _ ,_adbf :=range _fggb {_adbf .SortByX ();};return _fggb ,nil ;};func TstWriteSymbols (t *_g .T ,bms *Bitmaps ,src *Bitmap ){for _fcca :=0;_fcca < bms .Size ();_fcca ++{_bcbc :=bms .Values [_fcca ];_fbgb :=bms .Boxes [_fcca ];_adafc :=src .RasterOperation (_fbgb .Min .X ,_fbgb .Min .Y ,_bcbc .Width ,_bcbc .Height ,PixSrc ,_bcbc ,0,0);_a .NoError (t ,_adafc );};};func (_afeba *Bitmap )SetPixel (x ,y int ,pixel byte )error {_fgd :=_afeba .GetByteIndex (x ,y );if _fgd > len (_afeba .Data )-1{return _cb .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",_fgd );};_gdgg :=_afeba .GetBitOffset (x );_cdgc :=uint (7-_gdgg );_agbf :=_afeba .Data [_fgd ];var _acc byte ;if pixel ==1{_acc =_agbf |(pixel &0x01<<_cdgc );}else {_acc =_agbf &^(1<<_cdgc );};_afeba .Data [_fgd ]=_acc ;return nil ;};func _deg (_cc ,_ed *Bitmap )(_gc error ){const _gfb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_eg :=_ed .RowStride ;_ac :=_cc .RowStride ;var (_fg byte ;_fe uint16 ;_cba ,_bb ,_ca ,_egf ,_dg int ;);for _ca =0;_ca < _ed .Height ;_ca ++{_cba =_ca *_eg ;_bb =2*_ca *_ac ;for _egf =0;_egf < _eg ;_egf ++{_fg =_ed .Data [_cba +_egf ];_fe =_fdg [_fg ];_dg =_bb +_egf *2;if _cc .RowStride !=_ed .RowStride *2&&(_egf +1)*2> _cc .RowStride {_gc =_cc .SetByte (_dg ,byte (_fe >>8));}else {_gc =_cc .setTwoBytes (_dg ,_fe );};if _gc !=nil {return _cb .Wrap (_gc ,_gfb ,"");};};for _egf =0;_egf < _ac ;_egf ++{_dg =_bb +_ac +_egf ;_fg =_cc .Data [_bb +_egf ];if _gc =_cc .SetByte (_dg ,_fg );_gc !=nil {return _cb .Wrapf (_gc ,_gfb ,"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",_bb +_egf ,_bb +_ac +_egf );};};};return nil ;};type ClassedPoints struct{*Points ;_d .IntSlice ;_caa func (_befgc ,_ccbcg int )bool ;};func _gdef (_ebbc *_d .Stack )(_cdbf *fillSegment ,_bdbge error ){const _efef ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _ebbc ==nil {return nil ,_cb .Error (_efef ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _ebbc .Aux ==nil {return nil ,_cb .Error (_efef ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_bfdf ,_eadae :=_ebbc .Pop ();if !_eadae {return nil ,nil ;};_daadd ,_eadae :=_bfdf .(*fillSegment );if !_eadae {return nil ,_cb .Error (_efef ,"\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");};_cdbf =&fillSegment {_daadd ._ggbg ,_daadd ._afdf ,_daadd ._fddb +_daadd ._becfe ,_daadd ._becfe };_ebbc .Aux .Push (_daadd );return _cdbf ,nil ;};func (_daaa *Bitmap )nextOnPixel (_dagg ,_bface int )(_gaa _de .Point ,_dbb bool ,_dae error ){const _defd ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_gaa ,_dbb ,_dae =_daaa .nextOnPixelLow (_daaa .Width ,_daaa .Height ,_daaa .RowStride ,_dagg ,_bface );if _dae !=nil {return _gaa ,false ,_cb .Wrap (_dae ,_defd ,"");};return _gaa ,_dbb ,nil ;};func (_gcgdb *Bitmaps )Size ()int {return len (_gcgdb .Values )};func TstESymbol (t *_g .T ,scale ...int )*Bitmap {_caeb ,_bdab :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_a .NoError (t ,_bdab );return TstGetScaledSymbol (t ,_caeb ,scale ...);};func (_fccec *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _ffgb (_fccec ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_fdcec *ClassedPoints )Swap (i ,j int ){_fdcec .IntSlice [i ],_fdcec .IntSlice [j ]=_fdcec .IntSlice [j ],_fdcec .IntSlice [i ];};func _gfcfc (_fdaa *Bitmap ,_baea ,_fbee int ,_dgdd ,_gabe int ,_edfae RasterOperator ){var (_gdfd int ;_cgbag byte ;_cbgb ,_afec int ;_gdae int ;);_dfg :=_dgdd >>3;_gafcg :=_dgdd &7;if _gafcg > 0{_cgbag =_eeeg [_gafcg ];};_gdfd =_fdaa .RowStride *_fbee +(_baea >>3);switch _edfae {case PixClr :for _cbgb =0;_cbgb < _gabe ;_cbgb ++{_gdae =_gdfd +_cbgb *_fdaa .RowStride ;for _afec =0;_afec < _dfg ;_afec ++{_fdaa .Data [_gdae ]=0x0;_gdae ++;};if _gafcg > 0{_fdaa .Data [_gdae ]=_dcdgb (_fdaa .Data [_gdae ],0x0,_cgbag );};};case PixSet :for _cbgb =0;_cbgb < _gabe ;_cbgb ++{_gdae =_gdfd +_cbgb *_fdaa .RowStride ;for _afec =0;_afec < _dfg ;_afec ++{_fdaa .Data [_gdae ]=0xff;_gdae ++;};if _gafcg > 0{_fdaa .Data [_gdae ]=_dcdgb (_fdaa .Data [_gdae ],0xff,_cgbag );};};case PixNotDst :for _cbgb =0;_cbgb < _gabe ;_cbgb ++{_gdae =_gdfd +_cbgb *_fdaa .RowStride ;for _afec =0;_afec < _dfg ;_afec ++{_fdaa .Data [_gdae ]=^_fdaa .Data [_gdae ];_gdae ++;};if _gafcg > 0{_fdaa .Data [_gdae ]=_dcdgb (_fdaa .Data [_gdae ],^_fdaa .Data [_gdae ],_cgbag );};};};};var _edgb =[]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 RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_fgba bool ,_bfeg error ){const _gfa ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_eef ,_becc :=p1 .Width ,p1 .Height ;_aebc ,_dbece :=p3 .Width ,p3 .Height ;if _d .Abs (_eef -_aebc )> maxDiffW {return false ,nil ;};if _d .Abs (_becc -_dbece )> maxDiffH {return false ,nil ;};_eadf :=int (float32 (area1 )*(1.0-rank )+0.5);_fafe :=int (float32 (area3 )*(1.0-rank )+0.5);var _abae ,_afcf int ;if delX >=0{_abae =int (delX +0.5);}else {_abae =int (delX -0.5);};if delY >=0{_afcf =int (delY +0.5);}else {_afcf =int (delY -0.5);};_dabc :=p1 .CreateTemplate ();if _bfeg =_dabc .RasterOperation (0,0,_eef ,_becc ,PixSrc ,p1 ,0,0);_bfeg !=nil {return false ,_cb .Wrap (_bfeg ,_gfa ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bfeg =_dabc .RasterOperation (_abae ,_afcf ,_eef ,_becc ,PixNotSrcAndDst ,p4 ,0,0);_bfeg !=nil {return false ,_cb .Wrap (_bfeg ,_gfa ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_fgba ,_bfeg =_dabc .ThresholdPixelSum (_eadf ,tab8 );if _bfeg !=nil {return false ,_cb .Wrap (_bfeg ,_gfa ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _fgba {return false ,nil ;};if _bfeg =_dabc .RasterOperation (_abae ,_afcf ,_aebc ,_dbece ,PixSrc ,p3 ,0,0);_bfeg !=nil {return false ,_cb .Wrap (_bfeg ,_gfa ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bfeg =_dabc .RasterOperation (0,0,_aebc ,_dbece ,PixNotSrcAndDst ,p2 ,0,0);_bfeg !=nil {return false ,_cb .Wrap (_bfeg ,_gfa ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_fgba ,_bfeg =_dabc .ThresholdPixelSum (_fafe ,tab8 );if _bfeg !=nil {return false ,_cb .Wrap (_bfeg ,_gfa ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_fgba ,nil ;};func TstNSymbol (t *_g .T ,scale ...int )*Bitmap {_geefd ,_cagb :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_a .NoError (t ,_cagb );return TstGetScaledSymbol (t ,_geefd ,scale ...);};func (_aad *Bitmap )GetPixel (x ,y int )bool {_ffbg :=_aad .GetByteIndex (x ,y );_aag :=_aad .GetBitOffset (x );_befb :=uint (7-_aag );if _ffbg > len (_aad .Data )-1{_b .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 ,_aad );return false ;};if (_aad .Data [_ffbg ]>>_befb )&0x01>=1{return true ;};return false ;};func _ffgb (_ggbfb *Bitmap ,_fggf ,_caag ,_eged ,_egga int ,_aefbe RasterOperator ,_deba *Bitmap ,_bfad ,_bcda int )error {const _edfa ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _ggbfb ==nil {return _cb .Error (_edfa ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _aefbe ==PixDst {return nil ;};switch _aefbe {case PixClr ,PixSet ,PixNotDst :_fegd (_ggbfb ,_fggf ,_caag ,_eged ,_egga ,_aefbe );return nil ;};if _deba ==nil {_b .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 _cb .Error (_edfa ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ddgec :=_bbgde (_ggbfb ,_fggf ,_caag ,_eged ,_egga ,_aefbe ,_deba ,_bfad ,_bcda );_ddgec !=nil {return _cb .Wrap (_ddgec ,_edfa ,"");};return nil ;};func (_dabf *Bitmap )CreateTemplate ()*Bitmap {return _dabf .createTemplate ()};type SizeSelection int ;func (_caabd *Selection )findMaxTranslations ()(_addf ,_feebb ,_bgaca ,_eead int ){for _fgbe :=0;_fgbe < _caabd .Height ;_fgbe ++{for _baac :=0;_baac < _caabd .Width ;_baac ++{if _caabd .Data [_fgbe ][_baac ]==SelHit {_addf =_fbeb (_addf ,_caabd .Cx -_baac );_feebb =_fbeb (_feebb ,_caabd .Cy -_fgbe );_bgaca =_fbeb (_bgaca ,_baac -_caabd .Cx );_eead =_fbeb (_eead ,_fgbe -_caabd .Cy );};};};return _addf ,_feebb ,_bgaca ,_eead ;};const (_cfdca shift =iota ;_adab ;);func (_gaggg *Bitmaps )SortByWidth (){_bbfge :=(*byWidth )(_gaggg );_e .Sort (_bbfge )};type RasterOperator int ;const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_fbb *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_fbb .Width ,Height :_fbb .Height ,RowStride :_fbb .RowStride ,Color :_fbb .Color ,Text :_fbb .Text ,BitmapNumber :_fbb .BitmapNumber ,Special :_fbb .Special ,Data :make ([]byte ,len (_fbb .Data ))};};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_bgad :=_dfda (h ,w ,"");_bgad .setOrigin (cy ,cx );var _cgfbe ,_faag int ;for _cgfbe =0;_cgfbe < h ;_cgfbe ++{for _faag =0;_faag < w ;_faag ++{_bgad .Data [_cgfbe ][_faag ]=tp ;};};return _bgad ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _cgfb ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_dba :=_gccb (width ,height );_dba .Data =data ;if _cfbf :=((width *height )+7)>>3;len (data )< _cfbf {return nil ,_cb .Errorf (_cgfb ,"\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 ),_cfbf );};if _aebga :=_dba .addPadBits ();_aebga !=nil {return nil ,_cb .Wrap (_aebga ,_cgfb ,"");};return _dba ,nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _bccd ,_cacb int ;_afd :=src .RowStride -1;if x < 0{_cacb =-x ;x =0;}else if x +src .Width > dst .Width {_afd -=src .Width +x -dst .Width ;};if y < 0{_bccd =-y ;y =0;_cacb +=src .RowStride ;_afd +=src .RowStride ;}else if y +src .Height > dst .Height {_bccd =src .Height +y -dst .Height ;};var (_faec int ;_bdgb error ;);_dcbe :=x &0x07;_cgfd :=8-_dcbe ;_fdce :=src .Width &0x07;_ebbb :=_cgfd -_fdce ;_gcbd :=_cgfd &0x07!=0;_fdbg :=src .Width <=((_afd -_cacb )<<3)+_cgfd ;_agc :=dst .GetByteIndex (x ,y );_bcd :=_bccd +dst .Height ;if src .Height > _bcd {_faec =_bcd ;}else {_faec =src .Height ;};switch {case !_gcbd :_bdgb =_daf (src ,dst ,_bccd ,_faec ,_agc ,_cacb ,_afd ,op );case _fdbg :_bdgb =_afdc (src ,dst ,_bccd ,_faec ,_agc ,_cacb ,_afd ,_ebbb ,_dcbe ,_cgfd ,op );default:_bdgb =_bbgf (src ,dst ,_bccd ,_faec ,_agc ,_cacb ,_afd ,_ebbb ,_dcbe ,_cgfd ,op ,_fdce );};return _bdgb ;};func (_adcb *Points )AddPoint (x ,y float32 ){*_adcb =append (*_adcb ,Point {x ,y })};func _bbcf (_gbacc *Bitmap ,_ddgff *Bitmap ,_fcga int )(_ddbf error ){const _dbdg ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_fbede :=_cgffg (_gbacc .Height ,_ddgff .Height );_bcdf :=_cgffg (_gbacc .RowStride ,_ddgff .RowStride );switch _fcga {case 4:_ddbf =_aaea (_gbacc ,_ddgff ,_fbede ,_bcdf );case 8:_ddbf =_fgeb (_gbacc ,_ddgff ,_fbede ,_bcdf );default:return _cb .Errorf (_dbdg ,"\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",_fcga );};if _ddbf !=nil {return _cb .Wrap (_ddbf ,_dbdg ,"");};return nil ;};func (_eegca *byHeight )Len ()int {return len (_eegca .Values )};func (_gafc *Bitmap )setEightFullBytes (_cff int ,_cbec uint64 )error {if _cff +7> len (_gafc .Data )-1{return _cb .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");};_gafc .Data [_cff ]=byte ((_cbec &0xff00000000000000)>>56);_gafc .Data [_cff +1]=byte ((_cbec &0xff000000000000)>>48);_gafc .Data [_cff +2]=byte ((_cbec &0xff0000000000)>>40);_gafc .Data [_cff +3]=byte ((_cbec &0xff00000000)>>32);_gafc .Data [_cff +4]=byte ((_cbec &0xff000000)>>24);_gafc .Data [_cff +5]=byte ((_cbec &0xff0000)>>16);_gafc .Data [_cff +6]=byte ((_cbec &0xff00)>>8);_gafc .Data [_cff +7]=byte (_cbec &0xff);return nil ;};func _gaeb (_edga *Bitmap ,_egfdf *_d .Stack ,_cdgf ,_efadc ,_ggca int )(_bgbf *_de .Rectangle ,_bgab error ){const _dfedc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _edga ==nil {return nil ,_cb .Error (_dfedc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _egfdf ==nil {return nil ,_cb .Error (_dfedc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _ggca {case 4:if _bgbf ,_bgab =_dec (_edga ,_egfdf ,_cdgf ,_efadc );_bgab !=nil {return nil ,_cb .Wrap (_bgab ,_dfedc ,"");};return _bgbf ,nil ;case 8:if _bgbf ,_bgab =_cbea (_edga ,_egfdf ,_cdgf ,_efadc );_bgab !=nil {return nil ,_cb .Wrap (_bgab ,_dfedc ,"");};return _bgbf ,nil ;default:return nil ,_cb .Errorf (_dfedc ,"\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",_ggca );};};func _agae (_bca *Bitmap ,_edgg ,_bcbfd ,_ceda ,_eabf int ,_baed RasterOperator ,_faef *Bitmap ,_afga ,_cecf int )error {var (_ccfgd byte ;_dcdg int ;_gbde int ;_ggfg ,_ddgab int ;_ggaeb ,_ffaff int ;);_accba :=_ceda >>3;_cffe :=_ceda &7;if _cffe > 0{_ccfgd =_eeeg [_cffe ];};_dcdg =_faef .RowStride *_cecf +(_afga >>3);_gbde =_bca .RowStride *_bcbfd +(_edgg >>3);switch _baed {case PixSrc :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]=_faef .Data [_ggfg ];_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],_faef .Data [_ggfg ],_ccfgd );};};case PixNotSrc :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]=^(_faef .Data [_ggfg ]);_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],^_faef .Data [_ggfg ],_ccfgd );};};case PixSrcOrDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]|=_faef .Data [_ggfg ];_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],_faef .Data [_ggfg ]|_bca .Data [_ddgab ],_ccfgd );};};case PixSrcAndDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]&=_faef .Data [_ggfg ];_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],_faef .Data [_ggfg ]&_bca .Data [_ddgab ],_ccfgd );};};case PixSrcXorDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]^=_faef .Data [_ggfg ];_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],_faef .Data [_ggfg ]^_bca .Data [_ddgab ],_ccfgd );};};case PixNotSrcOrDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]|=^(_faef .Data [_ggfg ]);_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],^(_faef .Data [_ggfg ])|_bca .Data [_ddgab ],_ccfgd );};};case PixNotSrcAndDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]&=^(_faef .Data [_ggfg ]);_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],^(_faef .Data [_ggfg ])&_bca .Data [_ddgab ],_ccfgd );};};case PixSrcOrNotDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]=_faef .Data [_ggfg ]|^(_bca .Data [_ddgab ]);_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],_faef .Data [_ggfg ]|^(_bca .Data [_ddgab ]),_ccfgd );};};case PixSrcAndNotDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]=_faef .Data [_ggfg ]&^(_bca .Data [_ddgab ]);_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],_faef .Data [_ggfg ]&^(_bca .Data [_ddgab ]),_ccfgd );};};case PixNotPixSrcOrDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]=^(_faef .Data [_ggfg ]|_bca .Data [_ddgab ]);_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],^(_faef .Data [_ggfg ]|_bca .Data [_ddgab ]),_ccfgd );};};case PixNotPixSrcAndDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]=^(_faef .Data [_ggfg ]&_bca .Data [_ddgab ]);_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],^(_faef .Data [_ggfg ]&_bca .Data [_ddgab ]),_ccfgd );};};case PixNotPixSrcXorDst :for _ggaeb =0;_ggaeb < _eabf ;_ggaeb ++{_ggfg =_dcdg +_ggaeb *_faef .RowStride ;_ddgab =_gbde +_ggaeb *_bca .RowStride ;for _ffaff =0;_ffaff < _accba ;_ffaff ++{_bca .Data [_ddgab ]=^(_faef .Data [_ggfg ]^_bca .Data [_ddgab ]);_ddgab ++;_ggfg ++;};if _cffe > 0{_bca .Data [_ddgab ]=_dcdgb (_bca .Data [_ddgab ],^(_faef .Data [_ggfg ]^_bca .Data [_ddgab ]),_ccfgd );};};default:_b .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",_baed );return _cb .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 TstASymbol (t *_g .T )*Bitmap {t .Helper ();_cgccd :=New (6,6);_a .NoError (t ,_cgccd .SetPixel (1,0,1));_a .NoError (t ,_cgccd .SetPixel (2,0,1));_a .NoError (t ,_cgccd .SetPixel (3,0,1));_a .NoError (t ,_cgccd .SetPixel (4,0,1));_a .NoError (t ,_cgccd .SetPixel (5,1,1));_a .NoError (t ,_cgccd .SetPixel (1,2,1));_a .NoError (t ,_cgccd .SetPixel (2,2,1));_a .NoError (t ,_cgccd .SetPixel (3,2,1));_a .NoError (t ,_cgccd .SetPixel (4,2,1));_a .NoError (t ,_cgccd .SetPixel (5,2,1));_a .NoError (t ,_cgccd .SetPixel (0,3,1));_a .NoError (t ,_cgccd .SetPixel (5,3,1));_a .NoError (t ,_cgccd .SetPixel (0,4,1));_a .NoError (t ,_cgccd .SetPixel (5,4,1));_a .NoError (t ,_cgccd .SetPixel (1,5,1));_a .NoError (t ,_cgccd .SetPixel (2,5,1));_a .NoError (t ,_cgccd .SetPixel (3,5,1));_a .NoError (t ,_cgccd .SetPixel (4,5,1));_a .NoError (t ,_cgccd .SetPixel (5,5,1));return _cgccd ;};var _ _e .Interface =&ClassedPoints {};func (_dadd *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_fdc bool ,_fag error ){const _bfag ="\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 =_geea ();};_ffg :=_dadd .Width >>3;_fcc :=_dadd .Width &7;_ffaf :=byte (0xff<<uint (8-_fcc ));var (_bbg ,_aga ,_gdcb ,_ebeg int ;_beg byte ;);for _bbg =0;_bbg < _dadd .Height ;_bbg ++{_gdcb =_dadd .RowStride *_bbg ;for _aga =0;_aga < _ffg ;_aga ++{_beg ,_fag =_dadd .GetByte (_gdcb +_aga );if _fag !=nil {return false ,_cb .Wrap (_fag ,_bfag ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_ebeg +=tab8 [_beg ];};if _fcc !=0{_beg ,_fag =_dadd .GetByte (_gdcb +_aga );if _fag !=nil {return false ,_cb .Wrap (_fag ,_bfag ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_beg &=_ffaf ;_ebeg +=tab8 [_beg ];};if _ebeg > thresh {return true ,nil ;};};return _fdc ,nil ;};func (_bbff *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _feeb ="\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 >=_bbff .IntSlice .Size (){return 0,_cb .Errorf (_feeb ,"\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 (_bbff .YAtIndex (i )),nil ;};func (_eeee *Selection )setOrigin (_cbcad ,_abfe int ){_eeee .Cy ,_eeee .Cx =_cbcad ,_abfe };func _bde (_adg ,_gg *Bitmap ,_dcd int ,_dcfg []byte ,_dbe int )(_bgc error ){const _bge ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_aea ,_fec ,_cde ,_ccc ,_cgeb ,_egcg ,_ecc ,_dcc int ;_bcc ,_cfc ,_bdb ,_bccb uint32 ;_bdea ,_dgdb byte ;_cef uint16 ;);_dabd :=make ([]byte ,4);_agee :=make ([]byte ,4);for _cde =0;_cde < _adg .Height -1;_cde ,_ccc =_cde +2,_ccc +1{_aea =_cde *_adg .RowStride ;_fec =_ccc *_gg .RowStride ;for _cgeb ,_egcg =0,0;_cgeb < _dbe ;_cgeb ,_egcg =_cgeb +4,_egcg +1{for _ecc =0;_ecc < 4;_ecc ++{_dcc =_aea +_cgeb +_ecc ;if _dcc <=len (_adg .Data )-1&&_dcc < _aea +_adg .RowStride {_dabd [_ecc ]=_adg .Data [_dcc ];}else {_dabd [_ecc ]=0x00;};_dcc =_aea +_adg .RowStride +_cgeb +_ecc ;if _dcc <=len (_adg .Data )-1&&_dcc < _aea +(2*_adg .RowStride ){_agee [_ecc ]=_adg .Data [_dcc ];}else {_agee [_ecc ]=0x00;};};_bcc =_f .BigEndian .Uint32 (_dabd );_cfc =_f .BigEndian .Uint32 (_agee );_bdb =_bcc &_cfc ;_bdb |=_bdb <<1;_bccb =_bcc |_cfc ;_bccb &=_bccb <<1;_cfc =_bdb |_bccb ;_cfc &=0xaaaaaaaa;_bcc =_cfc |(_cfc <<7);_bdea =byte (_bcc >>24);_dgdb =byte ((_bcc >>8)&0xff);_dcc =_fec +_egcg ;if _dcc +1==len (_gg .Data )-1||_dcc +1>=_fec +_gg .RowStride {if _bgc =_gg .SetByte (_dcc ,_dcfg [_bdea ]);_bgc !=nil {return _cb .Wrapf (_bgc ,_bge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_dcc );};}else {_cef =(uint16 (_dcfg [_bdea ])<<8)|uint16 (_dcfg [_dgdb ]);if _bgc =_gg .setTwoBytes (_dcc ,_cef );_bgc !=nil {return _cb .Wrapf (_bgc ,_bge ,"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",_dcc );};_egcg ++;};};};return nil ;};func (_aafbg *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _cccdd ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_ecbcb ,_dgcg :=_aafbg .selectByIndexes (idx );if _dgcg !=nil {return nil ,_cb .Wrap (_dgcg ,_cccdd ,"");};return _ecbcb ,nil ;};func (_acde *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_eee *Boxes ,_eff error ){const _gdba ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _acde ==nil {return nil ,_cb .Error (_gdba ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_acde )==0{return _acde ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_cb .Errorf (_gdba ,"\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 ,_cb .Errorf (_gdba ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );};_eege :=_acde .makeSizeIndicator (width ,height ,tp ,relation );_fdcf ,_eff :=_acde .selectWithIndicator (_eege );if _eff !=nil {return nil ,_cb .Wrap (_eff ,_gdba ,"");};return _fdcf ,nil ;};func MakePixelSumTab8 ()[]int {return _geea ()};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dcdac float64 ,_gea error ){const _ddefe ="\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 _dcdac ,_cb .Error (_ddefe ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _dcdac ,_cb .Error (_ddefe ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if area1 ==0||area2 ==0{return _dcdac ,_cb .Error (_ddefe ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_gggc ,_bedb :=bm1 .Width ,bm1 .Height ;_cace ,_cfcb :=bm2 .Width ,bm2 .Height ;if _eccd (_gggc -_cace )> maxDiffW {return 0,nil ;};if _eccd (_bedb -_cfcb )> maxDiffH {return 0,nil ;};var _cbb ,_cgdce int ;if delX >=0{_cbb =int (delX +0.5);}else {_cbb =int (delX -0.5);};if delY >=0{_cgdce =int (delY +0.5);}else {_cgdce =int (delY -0.5);};_bbeg :=bm1 .createTemplate ();if _gea =_bbeg .RasterOperation (_cbb ,_cgdce ,_cace ,_cfcb ,PixSrc ,bm2 ,0,0);_gea !=nil {return _dcdac ,_cb .Wrap (_gea ,_ddefe ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _gea =_bbeg .RasterOperation (0,0,_gggc ,_bedb ,PixSrcAndDst ,bm1 ,0,0);_gea !=nil {return _dcdac ,_cb .Wrap (_gea ,_ddefe ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_efdd :=_bbeg .countPixels ();_dcdac =float64 (_efdd )*float64 (_efdd )/(float64 (area1 )*float64 (area2 ));return _dcdac ,nil ;};func (_ddee *ClassedPoints )validateIntSlice ()error {const _dedb ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_bdgge :=range _ddee .IntSlice {if _bdgge >=(_ddee .Points .Size ()){return _cb .Errorf (_dedb ,"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",_bdgge ,_ddee .Points .Size ());};};return nil ;};func _dec (_deeb *Bitmap ,_gffg *_d .Stack ,_ebbfd ,_ggfa int )(_bega *_de .Rectangle ,_gfbd error ){const _agga ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _deeb ==nil {return nil ,_cb .Error (_agga ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _gffg ==nil {return nil ,_cb .Error (_agga ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_daccc ,_gggcc :=_deeb .Width ,_deeb .Height ;_efddc :=_daccc -1;_bedbe :=_gggcc -1;if _ebbfd < 0||_ebbfd > _efddc ||_ggfa < 0||_ggfa > _bedbe ||!_deeb .GetPixel (_ebbfd ,_ggfa ){return nil ,nil ;};var _befbae *_de .Rectangle ;_befbae ,_gfbd =Rect (100000,100000,0,0);if _gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"");};if _gfbd =_bdfgc (_gffg ,_ebbfd ,_ebbfd ,_ggfa ,1,_bedbe ,_befbae );_gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gfbd =_bdfgc (_gffg ,_ebbfd ,_ebbfd ,_ggfa +1,-1,_bedbe ,_befbae );_gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_befbae .Min .X ,_befbae .Max .X =_ebbfd ,_ebbfd ;_befbae .Min .Y ,_befbae .Max .Y =_ggfa ,_ggfa ;var (_beba *fillSegment ;_dbga int ;);for _gffg .Len ()> 0{if _beba ,_gfbd =_gdef (_gffg );_gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"");};_ggfa =_beba ._fddb ;for _ebbfd =_beba ._ggbg ;_ebbfd >=0&&_deeb .GetPixel (_ebbfd ,_ggfa );_ebbfd --{if _gfbd =_deeb .SetPixel (_ebbfd ,_ggfa ,0);_gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"");};};if _ebbfd >=_beba ._ggbg {for _ebbfd ++;_ebbfd <=_beba ._afdf &&_ebbfd <=_efddc &&!_deeb .GetPixel (_ebbfd ,_ggfa );_ebbfd ++{};_dbga =_ebbfd ;if !(_ebbfd <=_beba ._afdf &&_ebbfd <=_efddc ){continue ;};}else {_dbga =_ebbfd +1;if _dbga < _beba ._ggbg -1{if _gfbd =_bdfgc (_gffg ,_dbga ,_beba ._ggbg -1,_beba ._fddb ,-_beba ._becfe ,_bedbe ,_befbae );_gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_ebbfd =_beba ._ggbg +1;};for {for ;_ebbfd <=_efddc &&_deeb .GetPixel (_ebbfd ,_ggfa );_ebbfd ++{if _gfbd =_deeb .SetPixel (_ebbfd ,_ggfa ,0);_gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gfbd =_bdfgc (_gffg ,_dbga ,_ebbfd -1,_beba ._fddb ,_beba ._becfe ,_bedbe ,_befbae );_gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ebbfd > _beba ._afdf +1{if _gfbd =_bdfgc (_gffg ,_beba ._afdf +1,_ebbfd -1,_beba ._fddb ,-_beba ._becfe ,_bedbe ,_befbae );_gfbd !=nil {return nil ,_cb .Wrap (_gfbd ,_agga ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _ebbfd ++;_ebbfd <=_beba ._afdf &&_ebbfd <=_efddc &&!_deeb .GetPixel (_ebbfd ,_ggfa );_ebbfd ++{};_dbga =_ebbfd ;if !(_ebbfd <=_beba ._afdf &&_ebbfd <=_efddc ){break ;};};};_befbae .Max .X ++;_befbae .Max .Y ++;return _befbae ,nil ;};func (_gbdg Points )Size ()int {return len (_gbdg )};func TstImageBitmapData ()[]byte {return _bgec .Data };func (_bggb *ClassedPoints )SortByX (){_bggb ._caa =_bggb .xSortFunction ();_e .Sort (_bggb )};func _daf (_agdf ,_bgdb *Bitmap ,_cec ,_afac ,_gbaa ,_ccdc ,_cceg int ,_cgdcb CombinationOperator )error {var _bgcgb int ;_aefb :=func (){_bgcgb ++;_gbaa +=_bgdb .RowStride ;_ccdc +=_agdf .RowStride ;_cceg +=_agdf .RowStride };for _bgcgb =_cec ;_bgcgb < _afac ;_aefb (){_bcfe :=_gbaa ;for _gge :=_ccdc ;_gge <=_cceg ;_gge ++{_bfe ,_gbg :=_bgdb .GetByte (_bcfe );if _gbg !=nil {return _gbg ;};_beae ,_gbg :=_agdf .GetByte (_gge );if _gbg !=nil {return _gbg ;};if _gbg =_bgdb .SetByte (_bcfe ,_dfdg (_bfe ,_beae ,_cgdcb ));_gbg !=nil {return _gbg ;};_bcfe ++;};};return nil ;};func (_abd *ClassedPoints )ySortFunction ()func (_fbcd int ,_fbce int )bool {return func (_ddgf ,_bgac int )bool {return _abd .YAtIndex (_ddgf )< _abd .YAtIndex (_bgac )};};func Extract (roi _de .Rectangle ,src *Bitmap )(*Bitmap ,error ){_cddc :=New (roi .Dx (),roi .Dy ());_afc :=roi .Min .X &0x07;_ebdc :=8-_afc ;_fcb :=uint (8-_cddc .Width &0x07);_ccgb :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_adfd :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_bbag :=_cddc .RowStride ==_adfd +1-_ccgb ;var _cgcg int ;for _cgee :=roi .Min .Y ;_cgee < roi .Max .Y ;_cgee ++{_afce :=_ccgb ;_eeae :=_cgcg ;switch {case _ccgb ==_adfd :_cdfb ,_gadea :=src .GetByte (_afce );if _gadea !=nil {return nil ,_gadea ;};_cdfb <<=uint (_afc );_gadea =_cddc .SetByte (_eeae ,_ggbd (_fcb ,_cdfb ));if _gadea !=nil {return nil ,_gadea ;};case _afc ==0:for _gfbe :=_ccgb ;_gfbe <=_adfd ;_gfbe ++{_beab ,_cbfc :=src .GetByte (_afce );if _cbfc !=nil {return nil ,_cbfc ;};_afce ++;if _gfbe ==_adfd &&_bbag {_beab =_ggbd (_fcb ,_beab );};_cbfc =_cddc .SetByte (_eeae ,_beab );if _cbfc !=nil {return nil ,_cbfc ;};_eeae ++;};default:_fffeg :=_begc (src ,_cddc ,uint (_afc ),uint (_ebdc ),_fcb ,_ccgb ,_adfd ,_bbag ,_afce ,_eeae );if _fffeg !=nil {return nil ,_fffeg ;};};_ccgb +=src .RowStride ;_adfd +=src .RowStride ;_cgcg +=_cddc .RowStride ;};return _cddc ,nil ;};func _afdc (_dagd ,_eag *Bitmap ,_dcbg ,_ceag ,_dgb ,_fgef ,_gad ,_afff ,_ccef ,_gade int ,_gcfb CombinationOperator )error {var _eagg int ;_eafe :=func (){_eagg ++;_dgb +=_eag .RowStride ;_fgef +=_dagd .RowStride ;_gad +=_dagd .RowStride };for _eagg =_dcbg ;_eagg < _ceag ;_eafe (){var _dggb uint16 ;_gage :=_dgb ;for _adgb :=_fgef ;_adgb <=_gad ;_adgb ++{_gfg ,_fefdd :=_eag .GetByte (_gage );if _fefdd !=nil {return _fefdd ;};_gbc ,_fefdd :=_dagd .GetByte (_adgb );if _fefdd !=nil {return _fefdd ;};_dggb =(_dggb |uint16 (_gbc ))<<uint (_gade );_gbc =byte (_dggb >>8);if _adgb ==_gad {_gbc =_ggbd (uint (_afff ),_gbc );};if _fefdd =_eag .SetByte (_gage ,_dfdg (_gfg ,_gbc ,_gcfb ));_fefdd !=nil {return _fefdd ;};_gage ++;_dggb <<=uint (_ccef );};};return nil ;};func (_faf *Bitmap )GetUnpaddedData ()([]byte ,error ){_fdec :=uint (_faf .Width &0x07);if _fdec ==0{return _faf .Data ,nil ;};_cag :=_faf .Width *_faf .Height ;if _cag %8!=0{_cag >>=3;_cag ++;}else {_cag >>=3;};_adgc :=make ([]byte ,_cag );_ebdb :=_df .NewWriterMSB (_adgc );const _ffbe ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _faae :=0;_faae < _faf .Height ;_faae ++{for _ddb :=0;_ddb < _faf .RowStride ;_ddb ++{_fge :=_faf .Data [_faae *_faf .RowStride +_ddb ];if _ddb !=_faf .RowStride -1{_gab :=_ebdb .WriteByte (_fge );if _gab !=nil {return nil ,_cb .Wrap (_gab ,_ffbe ,"");};continue ;};for _afeb :=uint (0);_afeb < _fdec ;_afeb ++{_febg :=_ebdb .WriteBit (int (_fge >>(7-_afeb )&0x01));if _febg !=nil {return nil ,_cb .Wrap (_febg ,_ffbe ,"");};};};};return _adgc ,nil ;};func _bgb (_bfc *Bitmap ,_cae int ,_db []byte )(_egc *Bitmap ,_cdf error ){const _gded ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _bfc ==nil {return nil ,_cb .Error (_gded ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _cae < 1||_cae > 4{return nil ,_cb .Error (_gded ,"\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 _bfc .Height <=1{return nil ,_cb .Errorf (_gded ,"\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",_bfc .Height );};_egc =New (_bfc .Width /2,_bfc .Height /2);if _db ==nil {_db =_dceb ();};_dab :=_cgffg (_bfc .RowStride ,2*_egc .RowStride );switch _cae {case 1:_cdf =_ccd (_bfc ,_egc ,_cae ,_db ,_dab );case 2:_cdf =_bde (_bfc ,_egc ,_cae ,_db ,_dab );case 3:_cdf =_dbg (_bfc ,_egc ,_cae ,_db ,_dab );case 4:_cdf =_cgfg (_bfc ,_egc ,_cae ,_db ,_dab );};if _cdf !=nil {return nil ,_cdf ;};return _egc ,nil ;};func _ffff (_afab ,_ggf *Bitmap ,_cdee ,_fcce int )(*Bitmap ,error ){const _aeega ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _ggf ==nil {return nil ,_cb .Error (_aeega ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _cdee < 1&&_fcce < 1{return nil ,_cb .Error (_aeega ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _cdee ==1&&_fcce ==1{return _ggf .Copy (),nil ;};if _cdee ==1||_fcce ==1{var _fgce error ;_gfggc :=SelCreateBrick (_fcce ,_cdee ,_fcce /2,_cdee /2,SelHit );_afab ,_fgce =_gagc (_afab ,_ggf ,_gfggc );if _fgce !=nil {return nil ,_cb .Wrap (_fgce ,_aeega ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _afab ,nil ;};_gccg :=SelCreateBrick (1,_cdee ,0,_cdee /2,SelHit );_dedf :=SelCreateBrick (_fcce ,1,_fcce /2,0,SelHit );_gfbcg ,_dgafb :=_ccf (nil ,_ggf ,_gccg );if _dgafb !=nil {return nil ,_cb .Wrap (_dgafb ,_aeega ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_afab ,_dgafb =_ccf (_afab ,_gfbcg ,_dedf );if _dgafb !=nil {return nil ,_cb .Wrap (_dgafb ,_aeega ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_dgafb =_daee (_gfbcg ,_afab ,_gccg );if _dgafb !=nil {return nil ,_cb .Wrap (_dgafb ,_aeega ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_ ,_dgafb =_daee (_afab ,_gfbcg ,_dedf );if _dgafb !=nil {return nil ,_cb .Wrap (_dgafb ,_aeega ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _afab ,nil ;};func (_ccb *Bitmap )Equivalent (s *Bitmap )bool {return _ccb .equivalent (s )};func TstRSymbol (t *_g .T ,scale ...int )*Bitmap {_cceab ,_eddf :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_a .NoError (t ,_eddf );return TstGetScaledSymbol (t ,_cceab ,scale ...);};func _dfda (_edggg ,_cdaa int ,_gdbd string )*Selection {_ecbed :=&Selection {Height :_edggg ,Width :_cdaa ,Name :_gdbd };_ecbed .Data =make ([][]SelectionValue ,_edggg );for _aebb :=0;_aebb < _edggg ;_aebb ++{_ecbed .Data [_aebb ]=make ([]SelectionValue ,_cdaa );};return _ecbed ;};func (_adc *Bitmap )Copy ()*Bitmap {_bef :=make ([]byte ,len (_adc .Data ));copy (_bef ,_adc .Data );return &Bitmap {Width :_adc .Width ,Height :_adc .Height ,RowStride :_adc .RowStride ,Data :_bef ,Color :_adc .Color ,Text :_adc .Text ,BitmapNumber :_adc .BitmapNumber ,Special :_adc .Special };};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _cbba ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_bfcg ,_agfab :=p1 .Width ,p1 .Height ;_febfb ,_bbge :=p3 .Width ,p3 .Height ;if _d .Abs (_bfcg -_febfb )> maxDiffW {return false ,nil ;};if _d .Abs (_agfab -_bbge )> maxDiffH {return false ,nil ;};_eed :=int (delX +_d .Sign (delX )*0.5);_fcbb :=int (delY +_d .Sign (delY )*0.5);var _dbeb error ;_feag :=p1 .CreateTemplate ();if _dbeb =_feag .RasterOperation (0,0,_bfcg ,_agfab ,PixSrc ,p1 ,0,0);_dbeb !=nil {return false ,_cb .Wrap (_dbeb ,_cbba ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dbeb =_feag .RasterOperation (_eed ,_fcbb ,_bfcg ,_agfab ,PixNotSrcAndDst ,p4 ,0,0);_dbeb !=nil {return false ,_cb .Wrap (_dbeb ,_cbba ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _feag .Zero (){return false ,nil ;};if _dbeb =_feag .RasterOperation (_eed ,_fcbb ,_febfb ,_bbge ,PixSrc ,p3 ,0,0);_dbeb !=nil {return false ,_cb .Wrap (_dbeb ,_cbba ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dbeb =_feag .RasterOperation (0,0,_febfb ,_bbge ,PixNotSrcAndDst ,p2 ,0,0);_dbeb !=nil {return false ,_cb .Wrap (_dbeb ,_cbba ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _feag .Zero (),nil ;};func TstWSymbol (t *_g .T ,scale ...int )*Bitmap {_cgaf ,_aabgf :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_a .NoError (t ,_aabgf );return TstGetScaledSymbol (t ,_cgaf ,scale ...);};func _acec (_caedc *Bitmap ,_bff ...MorphProcess )(_bgfb *Bitmap ,_dcbbb error ){const _badf ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _caedc ==nil {return nil ,_cb .Error (_badf ,"\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 (_bff )==0{return nil ,_cb .Error (_badf ,"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 _dcbbb =_fdaf (_bff ...);_dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"");};var _fade ,_defg ,_fbdg int ;_bgfb =_caedc .Copy ();for _ ,_ebfc :=range _bff {switch _ebfc .Operation {case MopDilation :_fade ,_defg =_ebfc .getWidthHeight ();_bgfb ,_dcbbb =DilateBrick (nil ,_bgfb ,_fade ,_defg );if _dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"");};case MopErosion :_fade ,_defg =_ebfc .getWidthHeight ();_bgfb ,_dcbbb =_cgba (nil ,_bgfb ,_fade ,_defg );if _dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"");};case MopOpening :_fade ,_defg =_ebfc .getWidthHeight ();_bgfb ,_dcbbb =_ffff (nil ,_bgfb ,_fade ,_defg );if _dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"");};case MopClosing :_fade ,_defg =_ebfc .getWidthHeight ();_bgfb ,_dcbbb =_ebae (nil ,_bgfb ,_fade ,_defg );if _dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"");};case MopRankBinaryReduction :_bgfb ,_dcbbb =_def (_bgfb ,_ebfc .Arguments ...);if _dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"");};case MopReplicativeBinaryExpansion :_bgfb ,_dcbbb =_fdfa (_bgfb ,_ebfc .Arguments [0]);if _dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"");};case MopAddBorder :_fbdg =_ebfc .Arguments [0];_bgfb ,_dcbbb =_bgfb .AddBorder (_fbdg ,0);if _dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"");};default:return nil ,_cb .Error (_badf ,"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 _fbdg > 0{_bgfb ,_dcbbb =_bgfb .RemoveBorder (_fbdg );if _dcbbb !=nil {return nil ,_cb .Wrap (_dcbbb ,_badf ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _bgfb ,nil ;};func _fgeb (_bagb ,_dagf *Bitmap ,_ddaf ,_geefe int )(_faged error ){const _cga ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_ecbdd ,_bgdf ,_egdf ,_fcccae int ;_cfga ,_degaf ,_bcga ,_gcece ,_acba ,_dbgf ,_dgeea ,_dgggc byte ;);for _ecbdd =0;_ecbdd < _ddaf ;_ecbdd ++{_egdf =_ecbdd *_bagb .RowStride ;_fcccae =_ecbdd *_dagf .RowStride ;for _bgdf =0;_bgdf < _geefe ;_bgdf ++{if _cfga ,_faged =_bagb .GetByte (_egdf +_bgdf );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _degaf ,_faged =_dagf .GetByte (_fcccae +_bgdf );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _ecbdd > 0{if _bcga ,_faged =_bagb .GetByte (_egdf -_bagb .RowStride +_bgdf );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_cfga |=_bcga |(_bcga <<1)|(_bcga >>1);if _bgdf > 0{if _dgggc ,_faged =_bagb .GetByte (_egdf -_bagb .RowStride +_bgdf -1);_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_cfga |=_dgggc <<7;};if _bgdf < _geefe -1{if _dgggc ,_faged =_bagb .GetByte (_egdf -_bagb .RowStride +_bgdf +1);_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_cfga |=_dgggc >>7;};};if _bgdf > 0{if _gcece ,_faged =_bagb .GetByte (_egdf +_bgdf -1);_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u006a\u0020\u003e \u0030");};_cfga |=_gcece <<7;};_cfga &=_degaf ;if _cfga ==0||^_cfga ==0{if _faged =_bagb .SetByte (_egdf +_bgdf ,_cfga );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_dgeea =_cfga ;_cfga =(_cfga |(_cfga >>1)|(_cfga <<1))&_degaf ;if (_cfga ^_dgeea )==0{if _faged =_bagb .SetByte (_egdf +_bgdf ,_cfga );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _ecbdd =_ddaf -1;_ecbdd >=0;_ecbdd --{_egdf =_ecbdd *_bagb .RowStride ;_fcccae =_ecbdd *_dagf .RowStride ;for _bgdf =_geefe -1;_bgdf >=0;_bgdf --{if _cfga ,_faged =_bagb .GetByte (_egdf +_bgdf );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _degaf ,_faged =_dagf .GetByte (_fcccae +_bgdf );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _ecbdd < _ddaf -1{if _acba ,_faged =_bagb .GetByte (_egdf +_bagb .RowStride +_bgdf );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_cfga |=_acba |(_acba <<1)|_acba >>1;if _bgdf > 0{if _dgggc ,_faged =_bagb .GetByte (_egdf +_bagb .RowStride +_bgdf -1);_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\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");};_cfga |=_dgggc <<7;};if _bgdf < _geefe -1{if _dgggc ,_faged =_bagb .GetByte (_egdf +_bagb .RowStride +_bgdf +1);_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\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");};_cfga |=_dgggc >>7;};};if _bgdf < _geefe -1{if _dbgf ,_faged =_bagb .GetByte (_egdf +_bgdf +1);_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\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");};_cfga |=_dbgf >>7;};_cfga &=_degaf ;if _cfga ==0||(^_cfga )==0{if _faged =_bagb .SetByte (_egdf +_bgdf ,_cfga );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_dgeea =_cfga ;_cfga =(_cfga |(_cfga >>1)|(_cfga <<1))&_degaf ;if (_cfga ^_dgeea )==0{if _faged =_bagb .SetByte (_egdf +_bgdf ,_cfga );_faged !=nil {return _cb .Wrap (_faged ,_cga ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");};break ;};};};};return nil ;};func (_cadaf *Bitmap )clearAll ()error {return _cadaf .RasterOperation (0,0,_cadaf .Width ,_cadaf .Height ,PixClr ,nil ,0,0);};var (_fcdba *Bitmap ;_bgec *Bitmap ;);type Component int ;type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_de .Rectangle ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_bdgf *Bitmaps )selectByIndexes (_ebcgbe []int )(*Bitmaps ,error ){_cfbb :=&Bitmaps {};for _ ,_cdgbc :=range _ebcgbe {_cgcbg ,_gebcg :=_bdgf .GetBitmap (_cdgbc );if _gebcg !=nil {return nil ,_cb .Wrap (_gebcg ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_cfbb .AddBitmap (_cgcbg );};return _cfbb ,nil ;};func _bbgde (_abc *Bitmap ,_bbad ,_dgccd int ,_dgbg ,_gebc int ,_cecc RasterOperator ,_dagc *Bitmap ,_ecba ,_ecdf int )error {var _efbb ,_ecbf ,_egfd ,_fbg int ;if _bbad < 0{_ecba -=_bbad ;_dgbg +=_bbad ;_bbad =0;};if _ecba < 0{_bbad -=_ecba ;_dgbg +=_ecba ;_ecba =0;};_efbb =_bbad +_dgbg -_abc .Width ;if _efbb > 0{_dgbg -=_efbb ;};_ecbf =_ecba +_dgbg -_dagc .Width ;if _ecbf > 0{_dgbg -=_ecbf ;};if _dgccd < 0{_ecdf -=_dgccd ;_gebc +=_dgccd ;_dgccd =0;};if _ecdf < 0{_dgccd -=_ecdf ;_gebc +=_ecdf ;_ecdf =0;};_egfd =_dgccd +_gebc -_abc .Height ;if _egfd > 0{_gebc -=_egfd ;};_fbg =_ecdf +_gebc -_dagc .Height ;if _fbg > 0{_gebc -=_fbg ;};if _dgbg <=0||_gebc <=0{return nil ;};var _fadad error ;switch {case _bbad &7==0&&_ecba &7==0:_fadad =_agae (_abc ,_bbad ,_dgccd ,_dgbg ,_gebc ,_cecc ,_dagc ,_ecba ,_ecdf );case _bbad &7==_ecba &7:_fadad =_edbc (_abc ,_bbad ,_dgccd ,_dgbg ,_gebc ,_cecc ,_dagc ,_ecba ,_ecdf );default:_fadad =_cbca (_abc ,_bbad ,_dgccd ,_dgbg ,_gebc ,_cecc ,_dagc ,_ecba ,_ecdf );};if _fadad !=nil {return _cb .Wrap (_fadad ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func _cade ()[]int {_gefa :=make ([]int ,256);_gefa [0]=0;_gefa [1]=7;var _accb int ;for _accb =2;_accb < 4;_accb ++{_gefa [_accb ]=_gefa [_accb -2]+6;};for _accb =4;_accb < 8;_accb ++{_gefa [_accb ]=_gefa [_accb -4]+5;};for _accb =8;_accb < 16;_accb ++{_gefa [_accb ]=_gefa [_accb -8]+4;};for _accb =16;_accb < 32;_accb ++{_gefa [_accb ]=_gefa [_accb -16]+3;};for _accb =32;_accb < 64;_accb ++{_gefa [_accb ]=_gefa [_accb -32]+2;};for _accb =64;_accb < 128;_accb ++{_gefa [_accb ]=_gefa [_accb -64]+1;};for _accb =128;_accb < 256;_accb ++{_gefa [_accb ]=_gefa [_accb -128];};return _gefa ;};func (_bgeb *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _dcgd ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_bgeb .Values )==0{return nil ,_cb .Error (_dcgd ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_afgd :=&BitmapsArray {};_bgeb .SortByHeight ();_egdc :=-1;_bacf :=-1;for _abed :=0;_abed < len (_bgeb .Values );_abed ++{_ceaa :=_bgeb .Values [_abed ].Height ;if _ceaa > _egdc {_egdc =_ceaa ;_bacf ++;_afgd .Values =append (_afgd .Values ,&Bitmaps {});};_afgd .Values [_bacf ].AddBitmap (_bgeb .Values [_abed ]);};return _afgd ,nil ;};func _geea ()[]int {_ebfg :=make ([]int ,256);for _daba :=0;_daba <=0xff;_daba ++{_fccca :=byte (_daba );_ebfg [_fccca ]=int (_fccca &0x1)+(int (_fccca >>1)&0x1)+(int (_fccca >>2)&0x1)+(int (_fccca >>3)&0x1)+(int (_fccca >>4)&0x1)+(int (_fccca >>5)&0x1)+(int (_fccca >>6)&0x1)+(int (_fccca >>7)&0x1);};return _ebfg ;};func (_afbc *Bitmaps )WidthSorter ()func (_cccd ,_gafcea int )bool {return func (_cbce ,_egeb int )bool {return _afbc .Values [_cbce ].Width < _afbc .Values [_egeb ].Width };};func (_fgb *Bitmap )clipRectangle (_ddbe ,_gfdd *_de .Rectangle )(_cce *Bitmap ,_fcg error ){const _gdea ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _ddbe ==nil {return nil ,_cb .Error (_gdea ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_acfa ,_daae :=_fgb .Width ,_fgb .Height ;_cdd ,_fcg :=ClipBoxToRectangle (_ddbe ,_acfa ,_daae );if _fcg !=nil {_b .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",_fcg );return nil ,nil ;};_aeeb ,_gedc :=_cdd .Min .X ,_cdd .Min .Y ;_egce ,_fbf :=_cdd .Max .X -_cdd .Min .X ,_cdd .Max .Y -_cdd .Min .Y ;_cce =New (_egce ,_fbf );_cce .Text =_fgb .Text ;if _fcg =_cce .RasterOperation (0,0,_egce ,_fbf ,PixSrc ,_fgb ,_aeeb ,_gedc );_fcg !=nil {return nil ,_cb .Wrap (_fcg ,_gdea ,"");};if _gfdd !=nil {*_gfdd =*_cdd ;};return _cce ,nil ;};func (_dde *Bitmap )String ()string {var _cea ="\u000a";for _gbbe :=0;_gbbe < _dde .Height ;_gbbe ++{var _ddge string ;for _eceb :=0;_eceb < _dde .Width ;_eceb ++{_cdab :=_dde .GetPixel (_eceb ,_gbbe );if _cdab {_ddge +="\u0031";}else {_ddge +="\u0030";};};_cea +=_ddge +"\u000a";};return _cea ;};func _fff ()(_ebd [256]uint64 ){for _adfb :=0;_adfb < 256;_adfb ++{if _adfb &0x01!=0{_ebd [_adfb ]|=0xff;};if _adfb &0x02!=0{_ebd [_adfb ]|=0xff00;};if _adfb &0x04!=0{_ebd [_adfb ]|=0xff0000;};if _adfb &0x08!=0{_ebd [_adfb ]|=0xff000000;};if _adfb &0x10!=0{_ebd [_adfb ]|=0xff00000000;};if _adfb &0x20!=0{_ebd [_adfb ]|=0xff0000000000;};if _adfb &0x40!=0{_ebd [_adfb ]|=0xff000000000000;};if _adfb &0x80!=0{_ebd [_adfb ]|=0xff00000000000000;};};return _ebd ;};func _cgffg (_cdag ,_egee int )int {if _cdag < _egee {return _cdag ;};return _egee ;};func TstPSymbol (t *_g .T )*Bitmap {t .Helper ();_aefe :=New (5,8);_a .NoError (t ,_aefe .SetPixel (0,0,1));_a .NoError (t ,_aefe .SetPixel (1,0,1));_a .NoError (t ,_aefe .SetPixel (2,0,1));_a .NoError (t ,_aefe .SetPixel (3,0,1));_a .NoError (t ,_aefe .SetPixel (4,1,1));_a .NoError (t ,_aefe .SetPixel (0,1,1));_a .NoError (t ,_aefe .SetPixel (4,2,1));_a .NoError (t ,_aefe .SetPixel (0,2,1));_a .NoError (t ,_aefe .SetPixel (4,3,1));_a .NoError (t ,_aefe .SetPixel (0,3,1));_a .NoError (t ,_aefe .SetPixel (0,4,1));_a .NoError (t ,_aefe .SetPixel (1,4,1));_a .NoError (t ,_aefe .SetPixel (2,4,1));_a .NoError (t ,_aefe .SetPixel (3,4,1));_a .NoError (t ,_aefe .SetPixel (0,5,1));_a .NoError (t ,_aefe .SetPixel (0,6,1));_a .NoError (t ,_aefe .SetPixel (0,7,1));return _aefe ;};func TstDSymbol (t *_g .T ,scale ...int )*Bitmap {_fdbfg ,_feed :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_a .NoError (t ,_feed );return TstGetScaledSymbol (t ,_fdbfg ,scale ...);};func _ebcd (_bab ,_eaab ,_ceba *Bitmap )(*Bitmap ,error ){const _dbda ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _eaab ==nil {return nil ,_cb .Error (_dbda ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ceba ==nil {return nil ,_cb .Error (_dbda ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bab ==_ceba {return nil ,_cb .Error (_dbda ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_eaab .SizesEqual (_ceba ){_b .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",_dbda );};var _fddf error ;if _bab ,_fddf =_dabb (_bab ,_eaab );_fddf !=nil {return nil ,_cb .Wrap (_fddf ,_dbda ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _fddf =_bab .RasterOperation (0,0,_bab .Width ,_bab .Height ,PixSrcXorDst ,_ceba ,0,0);_fddf !=nil {return nil ,_cb .Wrap (_fddf ,_dbda ,"");};return _bab ,nil ;};func TstGetScaledSymbol (t *_g .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_fcgg ,_ecea :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_a .NoError (t ,_ecea );return _fcgg ;};func (_fbbe *Bitmap )setAll ()error {_dbdb :=_ffgb (_fbbe ,0,0,_fbbe .Width ,_fbbe .Height ,PixSet ,nil ,0,0);if _dbdb !=nil {return _cb .Wrap (_dbdb ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};const _fcdga =5000;func (_bag *Bitmap )CountPixels ()int {return _bag .countPixels ()};func _dfa ()(_ccg [256]uint32 ){for _age :=0;_age < 256;_age ++{if _age &0x01!=0{_ccg [_age ]|=0xf;};if _age &0x02!=0{_ccg [_age ]|=0xf0;};if _age &0x04!=0{_ccg [_age ]|=0xf00;};if _age &0x08!=0{_ccg [_age ]|=0xf000;};if _age &0x10!=0{_ccg [_age ]|=0xf0000;};if _age &0x20!=0{_ccg [_age ]|=0xf00000;};if _age &0x40!=0{_ccg [_age ]|=0xf000000;};if _age &0x80!=0{_ccg [_age ]|=0xf0000000;};};return _ccg ;};func _gdf (_dgg ,_gdb ,_adaf *Bitmap )(*Bitmap ,error ){const _fae ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _gdb ==nil {return nil ,_cb .Error (_fae ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _adaf ==nil {return nil ,_cb .Error (_fae ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _eadd error ;switch {case _dgg ==_gdb :if _eadd =_dgg .RasterOperation (0,0,_gdb .Width ,_gdb .Height ,PixNotSrcAndDst ,_adaf ,0,0);_eadd !=nil {return nil ,_cb .Wrap (_eadd ,_fae ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _dgg ==_adaf :if _eadd =_dgg .RasterOperation (0,0,_gdb .Width ,_gdb .Height ,PixNotSrcAndDst ,_gdb ,0,0);_eadd !=nil {return nil ,_cb .Wrap (_eadd ,_fae ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_dgg ,_eadd =_dabb (_dgg ,_gdb );if _eadd !=nil {return nil ,_cb .Wrap (_eadd ,_fae ,"");};if _eadd =_dgg .RasterOperation (0,0,_gdb .Width ,_gdb .Height ,PixNotSrcAndDst ,_adaf ,0,0);_eadd !=nil {return nil ,_cb .Wrap (_eadd ,_fae ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _dgg ,nil ;};func _ebae (_bbf ,_gfbg *Bitmap ,_ebcgb ,_gfbb int )(*Bitmap ,error ){const _bfagg ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _gfbg ==nil {return nil ,_cb .Error (_bfagg ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ebcgb < 1||_gfbb < 1{return nil ,_cb .Error (_bfagg ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _ebcgb ==1&&_gfbb ==1{return _dabb (_bbf ,_gfbg );};if MorphBC ==SymmetricMorphBC {_bfaf ,_gdeg :=_bcgce (_bbf ,_gfbg ,_ebcgb ,_gfbb );if _gdeg !=nil {return nil ,_cb .Wrap (_gdeg ,_bfagg ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _bfaf ,nil ;};_caff :=_fbeb (_ebcgb /2,_gfbb /2);_ebdg :=8*((_caff +7)/8);_aefbf ,_dgdbb :=_gfbg .AddBorder (_ebdg ,0);if _dgdbb !=nil {return nil ,_cb .Wrapf (_dgdbb ,_bfagg ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_ebdg );};var _eaddg ,_gceg *Bitmap ;if _ebcgb ==1||_gfbb ==1{_beaee :=SelCreateBrick (_gfbb ,_ebcgb ,_gfbb /2,_ebcgb /2,SelHit );_eaddg ,_dgdbb =_add (nil ,_aefbf ,_beaee );if _dgdbb !=nil {return nil ,_cb .Wrap (_dgdbb ,_bfagg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_facf :=SelCreateBrick (1,_ebcgb ,0,_ebcgb /2,SelHit );_gfgg ,_daag :=_daee (nil ,_aefbf ,_facf );if _daag !=nil {return nil ,_cb .Wrap (_daag ,_bfagg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_afde :=SelCreateBrick (_gfbb ,1,_gfbb /2,0,SelHit );_eaddg ,_daag =_daee (nil ,_gfgg ,_afde );if _daag !=nil {return nil ,_cb .Wrap (_daag ,_bfagg ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_daag =_ccf (_gfgg ,_eaddg ,_facf );_daag !=nil {return nil ,_cb .Wrap (_daag ,_bfagg ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_daag =_ccf (_eaddg ,_gfgg ,_afde );_daag !=nil {return nil ,_cb .Wrap (_daag ,_bfagg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");};};if _gceg ,_dgdbb =_eaddg .RemoveBorder (_ebdg );_dgdbb !=nil {return nil ,_cb .Wrap (_dgdbb ,_bfagg ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _bbf ==nil {return _gceg ,nil ;};if _ ,_dgdbb =_dabb (_bbf ,_gceg );_dgdbb !=nil {return nil ,_dgdbb ;};return _bbf ,nil ;};func (_ecb *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _ecb .Copy (),nil ;};_fce ,_fcf :=_ecb .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _fcf !=nil {return nil ,_cb .Wrap (_fcf ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _fce ,nil ;};func (_befgcf *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _fbda ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _befgcf ==nil {return nil ,_cb .Error (_fbda ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_befgcf .Values )-1{return nil ,_cb .Errorf (_fbda ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _befgcf .Values [i ],nil ;};var _fcdgc =[5]int {1,2,3,0,4};func ClipBoxToRectangle (box *_de .Rectangle ,wi ,hi int )(_edae *_de .Rectangle ,_dca error ){const _gcd ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_cb .Error (_gcd ,"\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 ,_cb .Error (_gcd ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_ebab :=*box ;_edae =&_ebab ;if _edae .Min .X < 0{_edae .Max .X +=_edae .Min .X ;_edae .Min .X =0;};if _edae .Min .Y < 0{_edae .Max .Y +=_edae .Min .Y ;_edae .Min .Y =0;};if _edae .Max .X > wi {_edae .Max .X =wi ;};if _edae .Max .Y > hi {_edae .Max .Y =hi ;};return _edae ,nil ;};func _dbg (_acd ,_afa *Bitmap ,_aeaf int ,_caee []byte ,_ffa int )(_ega error ){const _gce ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_dga ,_dfce ,_dgf ,_cgb ,_dfd ,_aaeg ,_fbd ,_fdb int ;_ada ,_bga ,_ade ,_eea uint32 ;_ebe ,_cdg byte ;_agb uint16 ;);_agf :=make ([]byte ,4);_bfd :=make ([]byte ,4);for _dgf =0;_dgf < _acd .Height -1;_dgf ,_cgb =_dgf +2,_cgb +1{_dga =_dgf *_acd .RowStride ;_dfce =_cgb *_afa .RowStride ;for _dfd ,_aaeg =0,0;_dfd < _ffa ;_dfd ,_aaeg =_dfd +4,_aaeg +1{for _fbd =0;_fbd < 4;_fbd ++{_fdb =_dga +_dfd +_fbd ;if _fdb <=len (_acd .Data )-1&&_fdb < _dga +_acd .RowStride {_agf [_fbd ]=_acd .Data [_fdb ];}else {_agf [_fbd ]=0x00;};_fdb =_dga +_acd .RowStride +_dfd +_fbd ;if _fdb <=len (_acd .Data )-1&&_fdb < _dga +(2*_acd .RowStride ){_bfd [_fbd ]=_acd .Data [_fdb ];}else {_bfd [_fbd ]=0x00;};};_ada =_f .BigEndian .Uint32 (_agf );_bga =_f .BigEndian .Uint32 (_bfd );_ade =_ada &_bga ;_ade |=_ade <<1;_eea =_ada |_bga ;_eea &=_eea <<1;_bga =_ade &_eea ;_bga &=0xaaaaaaaa;_ada =_bga |(_bga <<7);_ebe =byte (_ada >>24);_cdg =byte ((_ada >>8)&0xff);_fdb =_dfce +_aaeg ;if _fdb +1==len (_afa .Data )-1||_fdb +1>=_dfce +_afa .RowStride {if _ega =_afa .SetByte (_fdb ,_caee [_ebe ]);_ega !=nil {return _cb .Wrapf (_ega ,_gce ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fdb );};}else {_agb =(uint16 (_caee [_ebe ])<<8)|uint16 (_caee [_cdg ]);if _ega =_afa .setTwoBytes (_fdb ,_agb );_ega !=nil {return _cb .Wrapf (_ega ,_gce ,"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",_fdb );};_aaeg ++;};};};return nil ;};func init (){const _abeaa ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_fcdba =New (50,40);var _gafbc error ;_fcdba ,_gafbc =_fcdba .AddBorder (2,1);if _gafbc !=nil {panic (_cb .Wrap (_gafbc ,_abeaa ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_bgec ,_gafbc =NewWithData (50,22,_edgb );if _gafbc !=nil {panic (_cb .Wrap (_gafbc ,_abeaa ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func (_dade Points )GetIntX (i int )(int ,error ){if i >=len (_dade ){return 0,_cb .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 (_dade [i ].X ),nil ;};func (_afe *Bitmap )Equals (s *Bitmap )bool {if len (_afe .Data )!=len (s .Data )||_afe .Width !=s .Width ||_afe .Height !=s .Height {return false ;};for _ffb :=0;_ffb < _afe .Height ;_ffb ++{_cdb :=_ffb *_afe .RowStride ;for _dbae :=0;_dbae < _afe .RowStride ;_dbae ++{if _afe .Data [_cdb +_dbae ]!=s .Data [_cdb +_dbae ]{return false ;};};};return true ;};func (_aged *Bitmap )GetVanillaData ()[]byte {if _aged .Color ==Chocolate {_aged .inverseData ();};return _aged .Data ;};var MorphBC BoundaryCondition ;func _cgfg (_febe ,_dee *Bitmap ,_dcb int ,_cbd []byte ,_geda int )(_aca error ){const _cgff ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_dbd ,_gfd ,_aebg ,_bdf ,_bdd ,_fab ,_fde ,_be int ;_bea ,_cefc uint32 ;_aed ,_bdfg byte ;_gdg uint16 ;);_baa :=make ([]byte ,4);_eca :=make ([]byte ,4);for _aebg =0;_aebg < _febe .Height -1;_aebg ,_bdf =_aebg +2,_bdf +1{_dbd =_aebg *_febe .RowStride ;_gfd =_bdf *_dee .RowStride ;for _bdd ,_fab =0,0;_bdd < _geda ;_bdd ,_fab =_bdd +4,_fab +1{for _fde =0;_fde < 4;_fde ++{_be =_dbd +_bdd +_fde ;if _be <=len (_febe .Data )-1&&_be < _dbd +_febe .RowStride {_baa [_fde ]=_febe .Data [_be ];}else {_baa [_fde ]=0x00;};_be =_dbd +_febe .RowStride +_bdd +_fde ;if _be <=len (_febe .Data )-1&&_be < _dbd +(2*_febe .RowStride ){_eca [_fde ]=_febe .Data [_be ];}else {_eca [_fde ]=0x00;};};_bea =_f .BigEndian .Uint32 (_baa );_cefc =_f .BigEndian .Uint32 (_eca );_cefc &=_bea ;_cefc &=_cefc <<1;_cefc &=0xaaaaaaaa;_bea =_cefc |(_cefc <<7);_aed =byte (_bea >>24);_bdfg =byte ((_bea >>8)&0xff);_be =_gfd +_fab ;if _be +1==len (_dee .Data )-1||_be +1>=_gfd +_dee .RowStride {_dee .Data [_be ]=_cbd [_aed ];if _aca =_dee .SetByte (_be ,_cbd [_aed ]);_aca !=nil {return _cb .Wrapf (_aca ,_cgff ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_be );};}else {_gdg =(uint16 (_cbd [_aed ])<<8)|uint16 (_cbd [_bdfg ]);if _aca =_dee .setTwoBytes (_be ,_gdg );_aca !=nil {return _cb .Wrapf (_aca ,_cgff ,"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",_be );};_fab ++;};};};return nil ;};func TstTSymbol (t *_g .T ,scale ...int )*Bitmap {_cfcc ,_cbcda :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_a .NoError (t ,_cbcda );return TstGetScaledSymbol (t ,_cfcc ,scale ...);};func (_eccc *Bitmap )countPixels ()int {var (_deed int ;_aff uint8 ;_dbgb byte ;_gfc int ;);_cbdd :=_eccc .RowStride ;_bceg :=uint (_eccc .Width &0x07);if _bceg !=0{_aff =uint8 ((0xff<<(8-_bceg ))&0xff);_cbdd --;};for _acfc :=0;_acfc < _eccc .Height ;_acfc ++{for _gfc =0;_gfc < _cbdd ;_gfc ++{_dbgb =_eccc .Data [_acfc *_eccc .RowStride +_gfc ];_deed +=int (_edb [_dbgb ]);};if _bceg !=0{_deed +=int (_edb [_eccc .Data [_acfc *_eccc .RowStride +_gfc ]&_aff ]);};};return _deed ;};func _ecde (_cdgb *Bitmap ,_ccag ,_deff int ,_ggdg ,_ecega int ,_dgddd RasterOperator ){var (_abcg bool ;_acfgb bool ;_dgae int ;_gada int ;_gege int ;_fgade int ;_cgbf bool ;_eddd byte ;);_bbfg :=8-(_ccag &7);_abbbd :=_gfbgf [_bbfg ];_gefe :=_cdgb .RowStride *_deff +(_ccag >>3);if _ggdg < _bbfg {_abcg =true ;_abbbd &=_eeeg [8-_bbfg +_ggdg ];};if !_abcg {_dgae =(_ggdg -_bbfg )>>3;if _dgae !=0{_acfgb =true ;_gada =_gefe +1;};};_gege =(_ccag +_ggdg )&7;if !(_abcg ||_gege ==0){_cgbf =true ;_eddd =_eeeg [_gege ];_fgade =_gefe +1+_dgae ;};var _aabf ,_adbdc int ;switch _dgddd {case PixClr :for _aabf =0;_aabf < _ecega ;_aabf ++{_cdgb .Data [_gefe ]=_dcdgb (_cdgb .Data [_gefe ],0x0,_abbbd );_gefe +=_cdgb .RowStride ;};if _acfgb {for _aabf =0;_aabf < _ecega ;_aabf ++{for _adbdc =0;_adbdc < _dgae ;_adbdc ++{_cdgb .Data [_gada +_adbdc ]=0x0;};_gada +=_cdgb .RowStride ;};};if _cgbf {for _aabf =0;_aabf < _ecega ;_aabf ++{_cdgb .Data [_fgade ]=_dcdgb (_cdgb .Data [_fgade ],0x0,_eddd );_fgade +=_cdgb .RowStride ;};};case PixSet :for _aabf =0;_aabf < _ecega ;_aabf ++{_cdgb .Data [_gefe ]=_dcdgb (_cdgb .Data [_gefe ],0xff,_abbbd );_gefe +=_cdgb .RowStride ;};if _acfgb {for _aabf =0;_aabf < _ecega ;_aabf ++{for _adbdc =0;_adbdc < _dgae ;_adbdc ++{_cdgb .Data [_gada +_adbdc ]=0xff;};_gada +=_cdgb .RowStride ;};};if _cgbf {for _aabf =0;_aabf < _ecega ;_aabf ++{_cdgb .Data [_fgade ]=_dcdgb (_cdgb .Data [_fgade ],0xff,_eddd );_fgade +=_cdgb .RowStride ;};};case PixNotDst :for _aabf =0;_aabf < _ecega ;_aabf ++{_cdgb .Data [_gefe ]=_dcdgb (_cdgb .Data [_gefe ],^_cdgb .Data [_gefe ],_abbbd );_gefe +=_cdgb .RowStride ;};if _acfgb {for _aabf =0;_aabf < _ecega ;_aabf ++{for _adbdc =0;_adbdc < _dgae ;_adbdc ++{_cdgb .Data [_gada +_adbdc ]=^(_cdgb .Data [_gada +_adbdc ]);};_gada +=_cdgb .RowStride ;};};if _cgbf {for _aabf =0;_aabf < _ecega ;_aabf ++{_cdgb .Data [_fgade ]=_dcdgb (_cdgb .Data [_fgade ],^_cdgb .Data [_fgade ],_eddd );_fgade +=_cdgb .RowStride ;};};};};func (_gac *Bitmap )thresholdPixelSum (_cbef int )bool {var (_acda int ;_cdgca uint8 ;_eaa byte ;_dff int ;);_degbc :=_gac .RowStride ;_bged :=uint (_gac .Width &0x07);if _bged !=0{_cdgca =uint8 ((0xff<<(8-_bged ))&0xff);_degbc --;};for _ggc :=0;_ggc < _gac .Height ;_ggc ++{for _dff =0;_dff < _degbc ;_dff ++{_eaa =_gac .Data [_ggc *_gac .RowStride +_dff ];_acda +=int (_edb [_eaa ]);};if _bged !=0{_eaa =_gac .Data [_ggc *_gac .RowStride +_dff ]&_cdgca ;_acda +=int (_edb [_eaa ]);};if _acda > _cbef {return true ;};};return false ;};func (_cbage *BitmapsArray )AddBox (box *_de .Rectangle ){_cbage .Boxes =append (_cbage .Boxes ,box )};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _aabg (d ,s ,hSize ,vSize )};func (_bbed *ClassedPoints )SortByY (){_bbed ._caa =_bbed .ySortFunction ();_e .Sort (_bbed )};func (_ecfde *Bitmaps )HeightSorter ()func (_fageb ,_agdg int )bool {return func (_aaa ,_eggf int )bool {_agfbe :=_ecfde .Values [_aaa ].Height < _ecfde .Values [_eggf ].Height ;_b .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_ecfde .Values [_aaa ].Height ,_ecfde .Values [_eggf ].Height ,_agfbe );return _agfbe ;};};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_dbf *Bitmap )GetBitOffset (x int )int {return x &0x07};type LocationFilter int ;func (_fcfc *Bitmap )connComponentsBB (_feab int )(_aefa *Boxes ,_eab error ){const _aedc ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _feab !=4&&_feab !=8{return nil ,_cb .Error (_aedc ,"\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 _fcfc .Zero (){return &Boxes {},nil ;};_fcfc .setPadBits (0);_gcdb ,_eab :=_dabb (nil ,_fcfc );if _eab !=nil {return nil ,_cb .Wrap (_eab ,_aedc ,"\u0062\u006d\u0031");};_gabf :=&_d .Stack {};_gabf .Aux =&_d .Stack {};_aefa =&Boxes {};var (_baag ,_fdbf int ;_bfcb _de .Point ;_face bool ;_bdgg *_de .Rectangle ;);for {if _bfcb ,_face ,_eab =_gcdb .nextOnPixel (_fdbf ,_baag );_eab !=nil {return nil ,_cb .Wrap (_eab ,_aedc ,"");};if !_face {break ;};if _bdgg ,_eab =_gaeb (_gcdb ,_gabf ,_bfcb .X ,_bfcb .Y ,_feab );_eab !=nil {return nil ,_cb .Wrap (_eab ,_aedc ,"");};if _eab =_aefa .Add (_bdgg );_eab !=nil {return nil ,_cb .Wrap (_eab ,_aedc ,"");};_fdbf =_bfcb .X ;_baag =_bfcb .Y ;};return _aefa ,nil ;};func _ec (_gff ,_ge *Bitmap )(_feb error ){const _ff ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_ecd :=_ge .RowStride ;_bf :=_gff .RowStride ;var _aee ,_efg ,_ad ,_efa ,_dce int ;for _ad =0;_ad < _ge .Height ;_ad ++{_aee =_ad *_ecd ;_efg =8*_ad *_bf ;for _efa =0;_efa < _ecd ;_efa ++{if _feb =_gff .setEightBytes (_efg +_efa *8,_ccbc [_ge .Data [_aee +_efa ]]);_feb !=nil {return _cb .Wrap (_feb ,_ff ,"");};};for _dce =1;_dce < 8;_dce ++{for _efa =0;_efa < _bf ;_efa ++{if _feb =_gff .SetByte (_efg +_dce *_bf +_efa ,_gff .Data [_efg +_efa ]);_feb !=nil {return _cb .Wrap (_feb ,_ff ,"");};};};};return nil ;};func (_cbcee *BitmapsArray )GetBox (i int )(*_de .Rectangle ,error ){const _gcead ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _cbcee ==nil {return nil ,_cb .Error (_gcead ,"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 (_cbcee .Boxes )-1{return nil ,_cb .Errorf (_gcead ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _cbcee .Boxes [i ],nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _acec (src ,sequence ...);}; |