unipdf/internal/ccittfax/ccittfax.go
2020-09-14 09:32:45 +00:00

12 lines
29 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 ccittfax ;import (_a "errors";_f "math";);func _cbg (_ddbe *decodingTreeNode ,_fcf code ,_ccf int ,_bdc int ){_bebg :=_eda (_fcf .Code ,_ccf );_ccf ++;if _bebg ==1{if _ddbe .Right ==nil {_ddbe .Right =&decodingTreeNode {Val :_bebg };};if _ccf ==_fcf .BitsWritten {_ddbe .Right .RunLen =&_bdc ;_ddbe .Right .Code =&_fcf ;}else {_cbg (_ddbe .Right ,_fcf ,_ccf ,_bdc );};}else {if _ddbe .Left ==nil {_ddbe .Left =&decodingTreeNode {Val :_bebg };};if _ccf ==_fcf .BitsWritten {_ddbe .Left .RunLen =&_bdc ;_ddbe .Left .Code =&_fcf ;}else {_cbg (_ddbe .Left ,_fcf ,_ccf ,_bdc );};};};func (_fg *Encoder )Decode (encoded []byte )([][]byte ,error ){if _fg .BlackIs1 {_gedf =0;_dcc =1;}else {_gedf =1;_dcc =0;};if _fg .K ==0{return _fg .decodeG31D (encoded );};if _fg .K > 0{return _fg .decodeG32D (encoded );};if _fg .K < 4{return _fg .decodeG4 (encoded );};return nil ,nil ;};func init (){_d =make (map[int ]code );_d [0]=code {Code :13<<8|3<<6,BitsWritten :10};_d [1]=code {Code :2<<(5+8),BitsWritten :3};_d [2]=code {Code :3<<(6+8),BitsWritten :2};_d [3]=code {Code :2<<(6+8),BitsWritten :2};_d [4]=code {Code :3<<(5+8),BitsWritten :3};_d [5]=code {Code :3<<(4+8),BitsWritten :4};_d [6]=code {Code :2<<(4+8),BitsWritten :4};_d [7]=code {Code :3<<(3+8),BitsWritten :5};_d [8]=code {Code :5<<(2+8),BitsWritten :6};_d [9]=code {Code :4<<(2+8),BitsWritten :6};_d [10]=code {Code :4<<(1+8),BitsWritten :7};_d [11]=code {Code :5<<(1+8),BitsWritten :7};_d [12]=code {Code :7<<(1+8),BitsWritten :7};_d [13]=code {Code :4<<8,BitsWritten :8};_d [14]=code {Code :7<<8,BitsWritten :8};_d [15]=code {Code :12<<8,BitsWritten :9};_d [16]=code {Code :5<<8|3<<6,BitsWritten :10};_d [17]=code {Code :6<<8,BitsWritten :10};_d [18]=code {Code :2<<8,BitsWritten :10};_d [19]=code {Code :12<<8|7<<5,BitsWritten :11};_d [20]=code {Code :13<<8,BitsWritten :11};_d [21]=code {Code :13<<8|4<<5,BitsWritten :11};_d [22]=code {Code :6<<8|7<<5,BitsWritten :11};_d [23]=code {Code :5<<8,BitsWritten :11};_d [24]=code {Code :2<<8|7<<5,BitsWritten :11};_d [25]=code {Code :3<<8,BitsWritten :11};_d [26]=code {Code :12<<8|10<<4,BitsWritten :12};_d [27]=code {Code :12<<8|11<<4,BitsWritten :12};_d [28]=code {Code :12<<8|12<<4,BitsWritten :12};_d [29]=code {Code :12<<8|13<<4,BitsWritten :12};_d [30]=code {Code :6<<8|8<<4,BitsWritten :12};_d [31]=code {Code :6<<8|9<<4,BitsWritten :12};_d [32]=code {Code :6<<8|10<<4,BitsWritten :12};_d [33]=code {Code :6<<8|11<<4,BitsWritten :12};_d [34]=code {Code :13<<8|2<<4,BitsWritten :12};_d [35]=code {Code :13<<8|3<<4,BitsWritten :12};_d [36]=code {Code :13<<8|4<<4,BitsWritten :12};_d [37]=code {Code :13<<8|5<<4,BitsWritten :12};_d [38]=code {Code :13<<8|6<<4,BitsWritten :12};_d [39]=code {Code :13<<8|7<<4,BitsWritten :12};_d [40]=code {Code :6<<8|12<<4,BitsWritten :12};_d [41]=code {Code :6<<8|13<<4,BitsWritten :12};_d [42]=code {Code :13<<8|10<<4,BitsWritten :12};_d [43]=code {Code :13<<8|11<<4,BitsWritten :12};_d [44]=code {Code :5<<8|4<<4,BitsWritten :12};_d [45]=code {Code :5<<8|5<<4,BitsWritten :12};_d [46]=code {Code :5<<8|6<<4,BitsWritten :12};_d [47]=code {Code :5<<8|7<<4,BitsWritten :12};_d [48]=code {Code :6<<8|4<<4,BitsWritten :12};_d [49]=code {Code :6<<8|5<<4,BitsWritten :12};_d [50]=code {Code :5<<8|2<<4,BitsWritten :12};_d [51]=code {Code :5<<8|3<<4,BitsWritten :12};_d [52]=code {Code :2<<8|4<<4,BitsWritten :12};_d [53]=code {Code :3<<8|7<<4,BitsWritten :12};_d [54]=code {Code :3<<8|8<<4,BitsWritten :12};_d [55]=code {Code :2<<8|7<<4,BitsWritten :12};_d [56]=code {Code :2<<8|8<<4,BitsWritten :12};_d [57]=code {Code :5<<8|8<<4,BitsWritten :12};_d [58]=code {Code :5<<8|9<<4,BitsWritten :12};_d [59]=code {Code :2<<8|11<<4,BitsWritten :12};_d [60]=code {Code :2<<8|12<<4,BitsWritten :12};_d [61]=code {Code :5<<8|10<<4,BitsWritten :12};_d [62]=code {Code :6<<8|6<<4,BitsWritten :12};_d [63]=code {Code :6<<8|7<<4,BitsWritten :12};_g =make (map[int ]code );_g [0]=code {Code :53<<8,BitsWritten :8};_g [1]=code {Code :7<<(2+8),BitsWritten :6};_g [2]=code {Code :7<<(4+8),BitsWritten :4};_g [3]=code {Code :8<<(4+8),BitsWritten :4};_g [4]=code {Code :11<<(4+8),BitsWritten :4};_g [5]=code {Code :12<<(4+8),BitsWritten :4};_g [6]=code {Code :14<<(4+8),BitsWritten :4};_g [7]=code {Code :15<<(4+8),BitsWritten :4};_g [8]=code {Code :19<<(3+8),BitsWritten :5};_g [9]=code {Code :20<<(3+8),BitsWritten :5};_g [10]=code {Code :7<<(3+8),BitsWritten :5};_g [11]=code {Code :8<<(3+8),BitsWritten :5};_g [12]=code {Code :8<<(2+8),BitsWritten :6};_g [13]=code {Code :3<<(2+8),BitsWritten :6};_g [14]=code {Code :52<<(2+8),BitsWritten :6};_g [15]=code {Code :53<<(2+8),BitsWritten :6};_g [16]=code {Code :42<<(2+8),BitsWritten :6};_g [17]=code {Code :43<<(2+8),BitsWritten :6};_g [18]=code {Code :39<<(1+8),BitsWritten :7};_g [19]=code {Code :12<<(1+8),BitsWritten :7};_g [20]=code {Code :8<<(1+8),BitsWritten :7};_g [21]=code {Code :23<<(1+8),BitsWritten :7};_g [22]=code {Code :3<<(1+8),BitsWritten :7};_g [23]=code {Code :4<<(1+8),BitsWritten :7};_g [24]=code {Code :40<<(1+8),BitsWritten :7};_g [25]=code {Code :43<<(1+8),BitsWritten :7};_g [26]=code {Code :19<<(1+8),BitsWritten :7};_g [27]=code {Code :36<<(1+8),BitsWritten :7};_g [28]=code {Code :24<<(1+8),BitsWritten :7};_g [29]=code {Code :2<<8,BitsWritten :8};_g [30]=code {Code :3<<8,BitsWritten :8};_g [31]=code {Code :26<<8,BitsWritten :8};_g [32]=code {Code :27<<8,BitsWritten :8};_g [33]=code {Code :18<<8,BitsWritten :8};_g [34]=code {Code :19<<8,BitsWritten :8};_g [35]=code {Code :20<<8,BitsWritten :8};_g [36]=code {Code :21<<8,BitsWritten :8};_g [37]=code {Code :22<<8,BitsWritten :8};_g [38]=code {Code :23<<8,BitsWritten :8};_g [39]=code {Code :40<<8,BitsWritten :8};_g [40]=code {Code :41<<8,BitsWritten :8};_g [41]=code {Code :42<<8,BitsWritten :8};_g [42]=code {Code :43<<8,BitsWritten :8};_g [43]=code {Code :44<<8,BitsWritten :8};_g [44]=code {Code :45<<8,BitsWritten :8};_g [45]=code {Code :4<<8,BitsWritten :8};_g [46]=code {Code :5<<8,BitsWritten :8};_g [47]=code {Code :10<<8,BitsWritten :8};_g [48]=code {Code :11<<8,BitsWritten :8};_g [49]=code {Code :82<<8,BitsWritten :8};_g [50]=code {Code :83<<8,BitsWritten :8};_g [51]=code {Code :84<<8,BitsWritten :8};_g [52]=code {Code :85<<8,BitsWritten :8};_g [53]=code {Code :36<<8,BitsWritten :8};_g [54]=code {Code :37<<8,BitsWritten :8};_g [55]=code {Code :88<<8,BitsWritten :8};_g [56]=code {Code :89<<8,BitsWritten :8};_g [57]=code {Code :90<<8,BitsWritten :8};_g [58]=code {Code :91<<8,BitsWritten :8};_g [59]=code {Code :74<<8,BitsWritten :8};_g [60]=code {Code :75<<8,BitsWritten :8};_g [61]=code {Code :50<<8,BitsWritten :8};_g [62]=code {Code :51<<8,BitsWritten :8};_g [63]=code {Code :52<<8,BitsWritten :8};_fb =make (map[int ]code );_fb [64]=code {Code :3<<8|3<<6,BitsWritten :10};_fb [128]=code {Code :12<<8|8<<4,BitsWritten :12};_fb [192]=code {Code :12<<8|9<<4,BitsWritten :12};_fb [256]=code {Code :5<<8|11<<4,BitsWritten :12};_fb [320]=code {Code :3<<8|3<<4,BitsWritten :12};_fb [384]=code {Code :3<<8|4<<4,BitsWritten :12};_fb [448]=code {Code :3<<8|5<<4,BitsWritten :12};_fb [512]=code {Code :3<<8|12<<3,BitsWritten :13};_fb [576]=code {Code :3<<8|13<<3,BitsWritten :13};_fb [640]=code {Code :2<<8|10<<3,BitsWritten :13};_fb [704]=code {Code :2<<8|11<<3,BitsWritten :13};_fb [768]=code {Code :2<<8|12<<3,BitsWritten :13};_fb [832]=code {Code :2<<8|13<<3,BitsWritten :13};_fb [896]=code {Code :3<<8|18<<3,BitsWritten :13};_fb [960]=code {Code :3<<8|19<<3,BitsWritten :13};_fb [1024]=code {Code :3<<8|20<<3,BitsWritten :13};_fb [1088]=code {Code :3<<8|21<<3,BitsWritten :13};_fb [1152]=code {Code :3<<8|22<<3,BitsWritten :13};_fb [1216]=code {Code :119<<3,BitsWritten :13};_fb [1280]=code {Code :2<<8|18<<3,BitsWritten :13};_fb [1344]=code {Code :2<<8|19<<3,BitsWritten :13};_fb [1408]=code {Code :2<<8|20<<3,BitsWritten :13};_fb [1472]=code {Code :2<<8|21<<3,BitsWritten :13};_fb [1536]=code {Code :2<<8|26<<3,BitsWritten :13};_fb [1600]=code {Code :2<<8|27<<3,BitsWritten :13};_fb [1664]=code {Code :3<<8|4<<3,BitsWritten :13};_fb [1728]=code {Code :3<<8|5<<3,BitsWritten :13};_e =make (map[int ]code );_e [64]=code {Code :27<<(3+8),BitsWritten :5};_e [128]=code {Code :18<<(3+8),BitsWritten :5};_e [192]=code {Code :23<<(2+8),BitsWritten :6};_e [256]=code {Code :55<<(1+8),BitsWritten :7};_e [320]=code {Code :54<<8,BitsWritten :8};_e [384]=code {Code :55<<8,BitsWritten :8};_e [448]=code {Code :100<<8,BitsWritten :8};_e [512]=code {Code :101<<8,BitsWritten :8};_e [576]=code {Code :104<<8,BitsWritten :8};_e [640]=code {Code :103<<8,BitsWritten :8};_e [704]=code {Code :102<<8,BitsWritten :9};_e [768]=code {Code :102<<8|1<<7,BitsWritten :9};_e [832]=code {Code :105<<8,BitsWritten :9};_e [896]=code {Code :105<<8|1<<7,BitsWritten :9};_e [960]=code {Code :106<<8,BitsWritten :9};_e [1024]=code {Code :106<<8|1<<7,BitsWritten :9};_e [1088]=code {Code :107<<8,BitsWritten :9};_e [1152]=code {Code :107<<8|1<<7,BitsWritten :9};_e [1216]=code {Code :108<<8,BitsWritten :9};_e [1280]=code {Code :108<<8|1<<7,BitsWritten :9};_e [1344]=code {Code :109<<8,BitsWritten :9};_e [1408]=code {Code :109<<8|1<<7,BitsWritten :9};_e [1472]=code {Code :76<<8,BitsWritten :9};_e [1536]=code {Code :76<<8|1<<7,BitsWritten :9};_e [1600]=code {Code :77<<8,BitsWritten :9};_e [1664]=code {Code :24<<(2+8),BitsWritten :6};_e [1728]=code {Code :77<<8|1<<7,BitsWritten :9};_ac =make (map[int ]code );_ac [1792]=code {Code :1<<8,BitsWritten :11};_ac [1856]=code {Code :1<<8|4<<5,BitsWritten :11};_ac [1920]=code {Code :1<<8|5<<5,BitsWritten :11};_ac [1984]=code {Code :1<<8|2<<4,BitsWritten :12};_ac [2048]=code {Code :1<<8|3<<4,BitsWritten :12};_ac [2112]=code {Code :1<<8|4<<4,BitsWritten :12};_ac [2176]=code {Code :1<<8|5<<4,BitsWritten :12};_ac [2240]=code {Code :1<<8|6<<4,BitsWritten :12};_ac [2304]=code {Code :1<<8|7<<4,BitsWritten :12};_ac [2368]=code {Code :1<<8|12<<4,BitsWritten :12};_ac [2432]=code {Code :1<<8|13<<4,BitsWritten :12};_ac [2496]=code {Code :1<<8|14<<4,BitsWritten :12};_ac [2560]=code {Code :1<<8|15<<4,BitsWritten :12};_acc =make (map[int ]byte );_acc [0]=0xFF;_acc [1]=0xFE;_acc [2]=0xFC;_acc [3]=0xF8;_acc [4]=0xF0;_acc [5]=0xE0;_acc [6]=0xC0;_acc [7]=0x80;_acc [8]=0x00;};func _dff (_acd []byte ,_bga bool ,_faf int )(int ,int ){_eagc :=0;for _faf < len (_acd ){if _bga {if _acd [_faf ]!=_gedf {break ;};}else {if _acd [_faf ]!=_dcc {break ;};};_eagc ++;_faf ++;};return _eagc ,_faf ;};func _bdd (_bebd [][]byte ,_bcee []byte ,_efb bool ,_fcb int )([]byte ,int ){_ab :=_bdf (_bcee ,_bebd [len (_bebd )-1],_fcb ,_efb );_dced :=_fae (_bebd [len (_bebd )-1],_ab );if _fcb ==-1{_bcee =_bgef (_bcee ,_efb ,_dced -_fcb -1);}else {_bcee =_bgef (_bcee ,_efb ,_dced -_fcb );};_fcb =_dced ;return _bcee ,_fcb ;};func init (){for _fd ,_bf :=range _g {_cbg (_eg ,_bf ,0,_fd );};for _eaf ,_ba :=range _e {_cbg (_eg ,_ba ,0,_eaf );};for _gde ,_cd :=range _d {_cbg (_bc ,_cd ,0,_gde );};for _bae ,_bge :=range _fb {_cbg (_bc ,_bge ,0,_bae );};for _ce ,_dc :=range _ac {_cbg (_eg ,_dc ,0,_ce );_cbg (_bc ,_dc ,0,_ce );};_cbg (_ff ,_gd ,0,0);_cbg (_ff ,_fbc ,0,0);_cbg (_ff ,_fe ,0,0);_cbg (_ff ,_c ,0,0);_cbg (_ff ,_de ,0,0);_cbg (_ff ,_fa ,0,0);_cbg (_ff ,_ge ,0,0);_cbg (_ff ,_gb ,0,0);_cbg (_ff ,_af ,0,0);};var (_cc =_a .New ("\u0045\u004f\u0046\u0042 c\u006f\u0064\u0065\u0020\u0069\u0073\u0020\u0063\u006f\u0072\u0072\u0075\u0070\u0074e\u0064");_ae =_a .New ("R\u0054\u0043\u0020\u0063od\u0065 \u0069\u0073\u0020\u0063\u006fr\u0072\u0075\u0070\u0074\u0065\u0064");_eb =_a .New ("\u0077\u0072o\u006e\u0067\u0020\u0063\u006f\u0064\u0065\u0020\u0069\u006e\u0020\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c\u0020mo\u0064\u0065");_bgd =_a .New ("\u006e\u006f\u0020\u0045\u004f\u004c\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0077\u0068\u0069\u006c\u0065 \u0074\u0068\u0065\u0020\u0045\u006e\u0064O\u0066\u004c\u0069\u006e\u0065\u0020\u0070\u0061\u0072\u0061\u006de\u0074\u0065\u0072\u0020\u0069\u0073\u0020\u0074\u0072\u0075\u0065");_bd =_a .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0045\u004f\u004c");_ee =_a .New ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u0032\u0044\u0020\u0063\u006f\u0064\u0065"););func _ddbd (_aea []byte ,_efg int ,_abff bool )(int ,int ){var (_cfd uint16 ;_gf int ;_gdca int ;);_gdca =_efg ;_cfd ,_gf ,_efg =_dcg (_aea ,_efg );_dbd ,_ggc :=_bbd (_cfd ,_gf ,_abff );if _dbd ==-1{return -1,_gdca ;};return _dbd ,_gdca +_ggc .BitsWritten ;};func _gfd (_fcba *decodingTreeNode ,_febf uint16 ,_gbd int )(*int ,*code ){if _fcba ==nil {return nil ,nil ;};if _gbd ==16{return _fcba .RunLen ,_fcba .Code ;};_fgef :=_eda (_febf ,_gbd );_gbd ++;var _cca *int ;var _dfc *code ;if _fgef ==1{_cca ,_dfc =_gfd (_fcba .Right ,_febf ,_gbd );}else {_cca ,_dfc =_gfd (_fcba .Left ,_febf ,_gbd );};if _cca ==nil {_cca =_fcba .RunLen ;_dfc =_fcba .Code ;};return _cca ,_dfc ;};func _fae (_cbb []byte ,_ccbc int )int {if _ccbc >=len (_cbb ){return _ccbc ;};if _ccbc < -1{_ccbc =-1;};var _ccd byte ;if _ccbc > -1{_ccd =_cbb [_ccbc ];}else {_ccd =_gedf ;};_caa :=_ccbc +1;for _caa < len (_cbb ){if _cbb [_caa ]!=_ccd {break ;};_caa ++;};return _caa ;};func _fdd (_cgab []byte ,_dfg int ,_fga code )(bool ,int ){_age :=_dfg ;var (_cfg uint16 ;_bggd int ;);_cfg ,_bggd ,_dfg =_dcg (_cgab ,_dfg );if _bggd > 3{return false ,_age ;};_cfg >>=uint (3-_bggd );_cfg <<=3;if _cfg !=_fga .Code {return false ,_age ;}else {return true ,_dfg -3+_bggd ;};};func _cef (_gggg ,_feb []byte ,_aeb int ,_da bool )([]byte ,int ,error ){_ebf :=_aeb ;var _fea int ;for _fea ,_aeb =_ddbd (_gggg ,_aeb ,_da );_fea !=-1;_fea ,_aeb =_ddbd (_gggg ,_aeb ,_da ){_feb =_bgef (_feb ,_da ,_fea );if _fea < 64{break ;};};if _fea ==-1{return _feb ,_ebf ,_eb ;};return _feb ,_aeb ,nil ;};func _gdb (_ged []byte ,_eed int )(code ,int ,bool ){var (_eafd uint16 ;_gc int ;_ddf int ;);_ddf =_eed ;_eafd ,_gc ,_eed =_dcg (_ged ,_eed );_bfe ,_cff :=_fbed (_eafd ,_gc );if !_cff {return code {},_ddf ,false ;};return _bfe ,_ddf +_bfe .BitsWritten ,true ;};func _cge (_cee []byte ,_fdb int )(bool ,int ){return _fdd (_cee ,_fdb ,_ec )};func _gab (_eaff ,_dgbg int )code {var _gfb code ;switch _dgbg -_eaff {case -1:_gfb =_c ;case -2:_gfb =_de ;case -3:_gfb =_fa ;case 0:_gfb =_fe ;case 1:_gfb =_ge ;case 2:_gfb =_gb ;case 3:_gfb =_af ;};return _gfb ;};func _abb (_fbb []byte ,_dcf int )(bool ,int ,error ){_ffd :=_dcf ;var _dea =false ;for _ecbd :=0;_ecbd < 6;_ecbd ++{_dea ,_dcf =_efc (_fbb ,_dcf );if !_dea {if _ecbd > 1{return false ,_ffd ,_ae ;}else {_dcf =_ffd ;break ;};};};return _dea ,_dcf ,nil ;};var (_gedf byte =1;_dcc byte =0;);func (_ag *Encoder )decodeG31D (_ed []byte )([][]byte ,error ){var _afe [][]byte ;var _gdg int ;for (_gdg /8)< len (_ed ){var _dd bool ;_dd ,_gdg =_bgee (_ed ,_gdg );if !_dd {if _ag .EndOfLine {return nil ,_bgd ;};}else {for _ebe :=0;_ebe < 5;_ebe ++{_dd ,_gdg =_bgee (_ed ,_gdg );if !_dd {if _ebe ==0{break ;};return nil ,_bd ;};};if _dd {break ;};};var _aec []byte ;_aec ,_gdg =_ag .decodeRow1D (_ed ,_gdg );if _ag .EncodedByteAlign &&_gdg %8!=0{_gdg +=8-_gdg %8;};_afe =append (_afe ,_aec );if _ag .Rows > 0&&!_ag .EndOfBlock &&len (_afe )>=_ag .Rows {break ;};};return _afe ,nil ;};func (_fed *Encoder )encodeG32D (_bca [][]byte )[]byte {var _aad []byte ;var _afc int ;for _egc :=0;_egc < len (_bca );_egc +=_fed .K {if _fed .Rows > 0&&!_fed .EndOfBlock &&_egc ==_fed .Rows {break ;};_cggd ,_gad :=_bcgg (_bca [_egc ],_afc ,_bg );_aad =_fed .appendEncodedRow (_aad ,_cggd ,_afc );if _fed .EncodedByteAlign {_gad =0;};_afc =_gad ;for _eae :=_egc +1;_eae < (_egc +_fed .K )&&_eae < len (_bca );_eae ++{if _fed .Rows > 0&&!_fed .EndOfBlock &&_eae ==_fed .Rows {break ;};_feff ,_ebfd :=_eeb (nil ,_afc ,_ec );var _bff ,_ccfa ,_ccfe int ;_deg :=-1;for _deg < len (_bca [_eae ]){_bff =_fae (_bca [_eae ],_deg );_ccfa =_dfcf (_bca [_eae ],_bca [_eae -1],_deg );_ccfe =_fae (_bca [_eae -1],_ccfa );if _ccfe < _bff {_feff ,_ebfd =_dfb (_feff ,_ebfd );_deg =_ccfe ;}else {if _f .Abs (float64 (_ccfa -_bff ))> 3{_feff ,_ebfd ,_deg =_ecc (_bca [_eae ],_feff ,_ebfd ,_deg ,_bff );}else {_feff ,_ebfd =_eeab (_feff ,_ebfd ,_bff ,_ccfa );_deg =_bff ;};};};_aad =_fed .appendEncodedRow (_aad ,_feff ,_afc );if _fed .EncodedByteAlign {_ebfd =0;};_afc =_ebfd %8;};};if _fed .EndOfBlock {_gae ,_ :=_faa (_afc );_aad =_fed .appendEncodedRow (_aad ,_gae ,_afc );};return _aad ;};func (_fbad *Encoder )Encode (pixels [][]byte )[]byte {if _fbad .BlackIs1 {_gedf =0;_dcc =1;}else {_gedf =1;_dcc =0;};if _fbad .K ==0{return _fbad .encodeG31D (pixels );};if _fbad .K > 0{return _fbad .encodeG32D (pixels );};if _fbad .K < 0{return _fbad .encodeG4 (pixels );};return nil ;};func (_ada *Encoder )decodeRow1D (_gcb []byte ,_bddc int )([]byte ,int ){var _dcd []byte ;_dba :=true ;var _bcfg int ;_bcfg ,_bddc =_ddbd (_gcb ,_bddc ,_dba );for _bcfg !=-1{_dcd =_bgef (_dcd ,_dba ,_bcfg );if _bcfg < 64{if len (_dcd )>=_ada .Columns {break ;};_dba =!_dba ;};_bcfg ,_bddc =_ddbd (_gcb ,_bddc ,_dba );};return _dcd ,_bddc ;};func _bcgg (_ccg []byte ,_bcae int ,_ccfeg code )([]byte ,int ){_eagd :=true ;var _ecg []byte ;_ecg ,_bcae =_eeb (nil ,_bcae ,_ccfeg );_abbe :=0;var _adae int ;for _abbe < len (_ccg ){_adae ,_abbe =_dff (_ccg ,_eagd ,_abbe );_ecg ,_bcae =_aeg (_ecg ,_bcae ,_adae ,_eagd );_eagd =!_eagd ;};return _ecg ,_bcae %8;};func _cdbc (_ca int )([]byte ,int ){var _fbf []byte ;for _beae :=0;_beae < 2;_beae ++{_fbf ,_ca =_eeb (_fbf ,_ca ,_ea );};return _fbf ,_ca %8;};func _dfb (_bdca []byte ,_cfa int )([]byte ,int ){return _eeb (_bdca ,_cfa ,_gd )};func _fac (_df [][]byte ,_bcf []byte ,_acf bool ,_gea ,_fcd int )([]byte ,int ){_gbe :=_bdf (_bcf ,_df [len (_df )-1],_gea ,_acf );_aa :=_gbe +_fcd ;if _gea ==-1{_bcf =_bgef (_bcf ,_acf ,_aa -_gea -1);}else {_bcf =_bgef (_bcf ,_acf ,_aa -_gea );};_gea =_aa ;return _bcf ,_gea ;};func _faa (_eag int )([]byte ,int ){var _ddbg []byte ;for _aecc :=0;_aecc < 6;_aecc ++{_ddbg ,_eag =_eeb (_ddbg ,_eag ,_bg );};return _ddbg ,_eag %8;};type Encoder struct{K int ;EndOfLine bool ;EncodedByteAlign bool ;Columns int ;Rows int ;EndOfBlock bool ;BlackIs1 bool ;DamagedRowsBeforeError int ;};func _dcg (_cffa []byte ,_bec int )(uint16 ,int ,int ){_cgg :=_bec ;_dge :=_bec /8;_bec %=8;if _dge >=len (_cffa ){return 0,16,_cgg ;};_ded :=byte (0xFF>>uint (_bec ));_fba :=uint16 ((_cffa [_dge ]&_ded )<<uint (_bec ))<<8;_gcf :=8-_bec ;_dge ++;_bec =0;if _dge >=len (_cffa ){return _fba >>(16-uint (_gcf )),16-_gcf ,_cgg +_gcf ;};_fba |=uint16 (_cffa [_dge ])<<(8-uint (_gcf ));_gcf +=8;_dge ++;_bec =0;if _dge >=len (_cffa ){return _fba >>(16-uint (_gcf )),16-_gcf ,_cgg +_gcf ;};if _gcf ==16{return _fba ,0,_cgg +_gcf ;};_bdag :=16-_gcf ;_fba |=uint16 (_cffa [_dge ]>>(8-uint (_bdag )));return _fba ,0,_cgg +16;};func _efc (_bdgf []byte ,_gcc int )(bool ,int ){return _fdd (_bdgf ,_gcc ,_bg )};func _bbd (_cgb uint16 ,_fef int ,_aae bool )(int ,code ){var _abg *int ;var _gbed *code ;if _aae {_abg ,_gbed =_gfd (_eg ,_cgb ,_fef );}else {_abg ,_gbed =_gfd (_bc ,_cgb ,_fef );};if _abg ==nil {return -1,code {};};return *_abg ,*_gbed ;};var (_eg =&decodingTreeNode {Val :255};_bc =&decodingTreeNode {Val :255};_ff =&decodingTreeNode {Val :255};);func _bgee (_fbef []byte ,_gba int )(bool ,int ){_ddg :=_gba ;var (_cgd uint16 ;_dae int ;);_cgd ,_dae ,_gba =_dcg (_fbef ,_gba );if _dae > 4{return false ,_ddg ;};_cgd >>=uint (4-_dae );_cgd <<=4;if _cgd !=_ea .Code {return false ,_ddg ;}else {return true ,_gba -4+_dae ;};};func (_eafb *Encoder )encodeG31D (_fgb [][]byte )[]byte {var _eea []byte ;_cba :=0;for _bcg :=range _fgb {if _eafb .Rows > 0&&!_eafb .EndOfBlock &&_bcg ==_eafb .Rows {break ;};_bdge ,_egd :=_bcgg (_fgb [_bcg ],_cba ,_ea );_eea =_eafb .appendEncodedRow (_eea ,_bdge ,_cba );if _eafb .EncodedByteAlign {_egd =0;};_cba =_egd ;};if _eafb .EndOfBlock {_fdbb ,_ :=_efd (_cba );_eea =_eafb .appendEncodedRow (_eea ,_fdbb ,_cba );};return _eea ;};func _aeg (_baad []byte ,_fcbg int ,_add int ,_fce bool )([]byte ,int ){var (_cfc code ;_acg bool ;);for !_acg {_cfc ,_add ,_acg =_aab (_add ,_fce );_baad ,_fcbg =_eeb (_baad ,_fcbg ,_cfc );};return _baad ,_fcbg ;};func _eeab (_efba []byte ,_cgef ,_gcbg ,_eadd int )([]byte ,int ){_gefe :=_gab (_gcbg ,_eadd );_efba ,_cgef =_eeb (_efba ,_cgef ,_gefe );return _efba ,_cgef ;};func _efedg (_dbaa [][]byte )[][]byte {_dfcd :=make ([]byte ,len (_dbaa [0]));for _bged :=range _dfcd {_dfcd [_bged ]=_gedf ;};_dbaa =append (_dbaa ,[]byte {});for _bgge :=len (_dbaa )-1;_bgge > 0;_bgge --{_dbaa [_bgge ]=_dbaa [_bgge -1];};_dbaa [0]=_dfcd ;return _dbaa ;};func _eda (_ced uint16 ,_dg int )byte {if _dg < 8{_ced >>=8;};_dg %=8;_cb :=byte (0x01<<(7-uint (_dg )));return (byte (_ced )&_cb )>>(7-uint (_dg ));};func _dfcf (_cbag ,_cab []byte ,_fafb int )int {_aag :=_fae (_cab ,_fafb );if _aag < len (_cab )&&(_fafb ==-1&&_cab [_aag ]==_gedf ||_fafb >=0&&_fafb < len (_cbag )&&_cbag [_fafb ]==_cab [_aag ]||_fafb >=len (_cbag )&&_cbag [_fafb -1]!=_cab [_aag ]){_aag =_fae (_cab ,_aag );};return _aag ;};func _efd (_ffb int )([]byte ,int ){var _aggf []byte ;for _efe :=0;_efe < 6;_efe ++{_aggf ,_ffb =_eeb (_aggf ,_ffb ,_ea );};return _aggf ,_ffb %8;};func _bdf (_baf ,_deb []byte ,_bef int ,_eecg bool )int {_ggb :=_fae (_deb ,_bef );if _ggb < len (_deb )&&(_bef ==-1&&_deb [_ggb ]==_gedf ||_bef >=0&&_bef < len (_baf )&&_baf [_bef ]==_deb [_ggb ]||_bef >=len (_baf )&&_eecg &&_deb [_ggb ]==_gedf ||_bef >=len (_baf )&&!_eecg &&_deb [_ggb ]==_dcc ){_ggb =_fae (_deb ,_ggb );};return _ggb ;};func _bgef (_eee []byte ,_ga bool ,_dcee int )[]byte {if _dcee < 0{return _eee ;};_cfb :=make ([]byte ,_dcee );if _ga {for _bdde :=0;_bdde < len (_cfb );_bdde ++{_cfb [_bdde ]=_gedf ;};}else {for _ceg :=0;_ceg < len (_cfb );_ceg ++{_cfb [_ceg ]=_dcc ;};};_eee =append (_eee ,_cfb ...);return _eee ;};func _ecc (_dcff ,_efgf []byte ,_eac ,_degc ,_aadb int )([]byte ,int ,int ){_aedg :=_fae (_dcff ,_aadb );_gfdb :=_degc >=0&&_dcff [_degc ]==_gedf ||_degc ==-1;_efgf ,_eac =_eeb (_efgf ,_eac ,_fbc );var _afd int ;if _degc > -1{_afd =_aadb -_degc ;}else {_afd =_aadb -_degc -1;};_efgf ,_eac =_aeg (_efgf ,_eac ,_afd ,_gfdb );_gfdb =!_gfdb ;_gbaag :=_aedg -_aadb ;_efgf ,_eac =_aeg (_efgf ,_eac ,_gbaag ,_gfdb );_degc =_aedg ;return _efgf ,_eac ,_degc ;};func (_efed *Encoder )appendEncodedRow (_facb ,_gcef []byte ,_cefd int )[]byte {if len (_facb )> 0&&_cefd !=0&&!_efed .EncodedByteAlign {_facb [len (_facb )-1]=_facb [len (_facb )-1]|_gcef [0];_facb =append (_facb ,_gcef [1:]...);}else {_facb =append (_facb ,_gcef ...);};return _facb ;};func _fbg (_egb ,_ggg []byte ,_cg int ,_bea bool ,_bdg int )([]byte ,int ,int ,error ){_ddb :=_cg ;var _ddd error ;_ggg ,_cg ,_ddd =_cef (_egb ,_ggg ,_cg ,_bea );if _ddd !=nil {return _ggg ,_ddb ,_bdg ,_ddd ;};_bea =!_bea ;_ggg ,_cg ,_ddd =_cef (_egb ,_ggg ,_cg ,_bea );if _ddd !=nil {return _ggg ,_ddb ,_bdg ,_ddd ;};_bdg =len (_ggg );return _ggg ,_cg ,_bdg ,nil ;};func (_geff *Encoder )decodeG4 (_geg []byte )([][]byte ,error ){_ef :=make ([]byte ,_geff .Columns );for _fge :=range _ef {_ef [_fge ]=_gedf ;};_dce :=make ([][]byte ,1);_dce [0]=_ef ;var (_baa bool ;_beb error ;_fbe int ;);for (_fbe /8)< len (_geg ){_baa ,_fbe ,_beb =_agd (_geg ,_fbe );if _beb !=nil {return nil ,_beb ;};if _baa {break ;};var (_dbb code ;_ad bool ;);_fca :=true ;var _gdc []byte ;_ecb :=-1;for _ecb < _geff .Columns {_dbb ,_fbe ,_ad =_gdb (_geg ,_fbe );if !_ad {return nil ,_ee ;};switch _dbb {case _gd :_gdc ,_ecb =_bdd (_dce ,_gdc ,_fca ,_ecb );case _fbc :_gdc ,_fbe ,_ecb ,_beb =_fbg (_geg ,_gdc ,_fbe ,_fca ,_ecb );if _beb !=nil {return nil ,_beb ;};case _fe :_gdc ,_ecb =_fac (_dce ,_gdc ,_fca ,_ecb ,0);_fca =!_fca ;case _c :_gdc ,_ecb =_fac (_dce ,_gdc ,_fca ,_ecb ,1);_fca =!_fca ;case _de :_gdc ,_ecb =_fac (_dce ,_gdc ,_fca ,_ecb ,2);_fca =!_fca ;case _fa :_gdc ,_ecb =_fac (_dce ,_gdc ,_fca ,_ecb ,3);_fca =!_fca ;case _ge :_gdc ,_ecb =_fac (_dce ,_gdc ,_fca ,_ecb ,-1);_fca =!_fca ;case _gb :_gdc ,_ecb =_fac (_dce ,_gdc ,_fca ,_ecb ,-2);_fca =!_fca ;case _af :_gdc ,_ecb =_fac (_dce ,_gdc ,_fca ,_ecb ,-3);_fca =!_fca ;};if len (_gdc )>=_geff .Columns {break ;};};if _geff .EncodedByteAlign &&_fbe %8!=0{_fbe +=8-_fbe %8;};_dce =append (_dce ,_gdc );if _geff .Rows > 0&&!_geff .EndOfBlock &&len (_dce )>=(_geff .Rows +1){break ;};};_dce =_dce [1:];return _dce ,nil ;};type code struct{Code uint16 ;BitsWritten int ;};var (_d map[int ]code ;_g map[int ]code ;_fb map[int ]code ;_e map[int ]code ;_ac map[int ]code ;_acc map[int ]byte ;_ea =code {Code :1<<4,BitsWritten :12};_bg =code {Code :3<<3,BitsWritten :13};_ec =code {Code :2<<3,BitsWritten :13};_gd =code {Code :1<<12,BitsWritten :4};_fbc =code {Code :1<<13,BitsWritten :3};_fe =code {Code :1<<15,BitsWritten :1};_c =code {Code :3<<13,BitsWritten :3};_de =code {Code :3<<10,BitsWritten :6};_fa =code {Code :3<<9,BitsWritten :7};_ge =code {Code :2<<13,BitsWritten :3};_gb =code {Code :2<<10,BitsWritten :6};_af =code {Code :2<<9,BitsWritten :7};);func _agd (_bgg []byte ,_fbca int )(bool ,int ,error ){_abf :=_fbca ;var _cga bool ;_cga ,_fbca =_bgee (_bgg ,_fbca );if _cga {_cga ,_fbca =_bgee (_bgg ,_fbca );if _cga {return true ,_fbca ,nil ;}else {return false ,_abf ,_cc ;};};return false ,_abf ,nil ;};func _fbed (_fdc uint16 ,_baac int )(code ,bool ){_ ,_aeag :=_gfd (_ff ,_fdc ,_baac );if _aeag ==nil {return code {},false ;};return *_aeag ,true ;};func _eeb (_gcfc []byte ,_aaeb int ,_gbb code )([]byte ,int ){_dgb :=0;for _dgb < _gbb .BitsWritten {_gbaa :=_aaeb /8;_dbf :=_aaeb %8;if _gbaa >=len (_gcfc ){_gcfc =append (_gcfc ,0);};_bgga :=8-_dbf ;_dbe :=_gbb .BitsWritten -_dgb ;if _bgga > _dbe {_bgga =_dbe ;};if _dgb < 8{_gcfc [_gbaa ]=_gcfc [_gbaa ]|byte (_gbb .Code >>uint (8+_dbf -_dgb ))&_acc [8-_bgga -_dbf ];}else {_gcfc [_gbaa ]=_gcfc [_gbaa ]|(byte (_gbb .Code <<uint (_dgb -8))&_acc [8-_bgga ])>>uint (_dbf );};_aaeb +=_bgga ;_dgb +=_bgga ;};return _gcfc ,_aaeb ;};func _aab (_bde int ,_cdg bool )(code ,int ,bool ){if _bde < 64{if _cdg {return _g [_bde ],0,true ;}else {return _d [_bde ],0,true ;};}else {_eedc :=_bde /64;if _eedc > 40{return _ac [2560],_bde -2560,false ;};if _eedc > 27{return _ac [_eedc *64],_bde -_eedc *64,false ;};if _cdg {return _e [_eedc *64],_bde -_eedc *64,false ;}else {return _fb [_eedc *64],_bde -_eedc *64,false ;};};};func (_ead *Encoder )decodeG32D (_bfd []byte )([][]byte ,error ){var (_gdd [][]byte ;_bag int ;_gg error ;);_bda :for (_bag /8)< len (_bfd ){var _bb bool ;_bb ,_bag ,_gg =_abb (_bfd ,_bag );if _gg !=nil {return nil ,_gg ;};if _bb {break ;};_bb ,_bag =_efc (_bfd ,_bag );if !_bb {if _ead .EndOfLine {return nil ,_bgd ;};};var _be []byte ;_be ,_bag =_ead .decodeRow1D (_bfd ,_bag );if _ead .EncodedByteAlign &&_bag %8!=0{_bag +=8-_bag %8;};if _be !=nil {_gdd =append (_gdd ,_be );};if _ead .Rows > 0&&!_ead .EndOfBlock &&len (_gdd )>=_ead .Rows {break ;};for _fc :=1;_fc < _ead .K &&(_bag /8)< len (_bfd );_fc ++{_bb ,_bag =_cge (_bfd ,_bag );if !_bb {_bb ,_bag ,_gg =_abb (_bfd ,_bag );if _gg !=nil {return nil ,_gg ;};if _bb {break _bda ;}else {if _ead .EndOfLine {return nil ,_bgd ;};};};var (_gded code ;_bce bool ;);_gef :=true ;var _cf []byte ;_agg :=-1;for _gded ,_bag ,_bce =_gdb (_bfd ,_bag );_bce ;_gded ,_bag ,_bce =_gdb (_bfd ,_bag ){switch _gded {case _gd :_cf ,_agg =_bdd (_gdd ,_cf ,_gef ,_agg );case _fbc :_cf ,_bag ,_agg ,_gg =_fbg (_bfd ,_cf ,_bag ,_gef ,_agg );if _gg !=nil {return nil ,_gg ;};case _fe :_cf ,_agg =_fac (_gdd ,_cf ,_gef ,_agg ,0);_gef =!_gef ;case _c :_cf ,_agg =_fac (_gdd ,_cf ,_gef ,_agg ,1);_gef =!_gef ;case _de :_cf ,_agg =_fac (_gdd ,_cf ,_gef ,_agg ,2);_gef =!_gef ;case _fa :_cf ,_agg =_fac (_gdd ,_cf ,_gef ,_agg ,3);_gef =!_gef ;case _ge :_cf ,_agg =_fac (_gdd ,_cf ,_gef ,_agg ,-1);_gef =!_gef ;case _gb :_cf ,_agg =_fac (_gdd ,_cf ,_gef ,_agg ,-2);_gef =!_gef ;case _af :_cf ,_agg =_fac (_gdd ,_cf ,_gef ,_agg ,-3);_gef =!_gef ;};if len (_cf )>=_ead .Columns {break ;};};if _ead .EncodedByteAlign &&_bag %8!=0{_bag +=8-_bag %8;};if _cf !=nil {_gdd =append (_gdd ,_cf );};if _ead .Rows > 0&&!_ead .EndOfBlock &&len (_gdd )>=_ead .Rows {break _bda ;};};};return _gdd ,nil ;};type decodingTreeNode struct{Val byte ;RunLen *int ;Code *code ;Left *decodingTreeNode ;Right *decodingTreeNode ;};func (_fcfa *Encoder )encodeG4 (_efcd [][]byte )[]byte {_gce :=make ([][]byte ,len (_efcd ));copy (_gce ,_efcd );_gce =_efedg (_gce );var _aed []byte ;var _ccb int ;for _agb :=1;_agb < len (_gce );_agb ++{if _fcfa .Rows > 0&&!_fcfa .EndOfBlock &&_agb ==(_fcfa .Rows +1){break ;};var _feag []byte ;var _fged ,_cgf ,_ddgb int ;_ecbe :=_ccb ;_agf :=-1;for _agf < len (_gce [_agb ]){_fged =_fae (_gce [_agb ],_agf );_cgf =_dfcf (_gce [_agb ],_gce [_agb -1],_agf );_ddgb =_fae (_gce [_agb -1],_cgf );if _ddgb < _fged {_feag ,_ecbe =_eeb (_feag ,_ecbe ,_gd );_agf =_ddgb ;}else {if _f .Abs (float64 (_cgf -_fged ))> 3{_feag ,_ecbe ,_agf =_ecc (_gce [_agb ],_feag ,_ecbe ,_agf ,_fged );}else {_feag ,_ecbe =_eeab (_feag ,_ecbe ,_fged ,_cgf );_agf =_fged ;};};};_aed =_fcfa .appendEncodedRow (_aed ,_feag ,_ccb );if _fcfa .EncodedByteAlign {_ecbe =0;};_ccb =_ecbe %8;};if _fcfa .EndOfBlock {_afa ,_ :=_cdbc (_ccb );_aed =_fcfa .appendEncodedRow (_aed ,_afa ,_ccb );};return _aed ;};