Matlab 自带的进度条非常棒!非常醒目!
但,用腻了!
So,自己整一个!
看效果:
使用示例:
1.实例化 Waitbar(定义一个Waitbar)
WBar = Class_Waitbar('Title', '开始处理数据', 'Width', 15, 'ColorType', 0);
WBar = Class_Waitbar('Title', '开始处理数据', 'Width', 15); % ColorType 未传入默认为 0
WBar = Class_Waitbar('Title', '开始处理数据'); % Width 未传入默认为 20
WBar = Class_Waitbar; % Title 默认为 Waitbar
Title: 显示在 Waitbar 上的信息,默认为“WaitBar”
Width: 进度条每增加一个单位的宽度,默认为 20
ColorType:
0:进度条每个单位的颜色都是随机的
1:随机渐变色,进度条增加的第一个单位颜色是随机的,后续在此基础上渐变。
2:渐变1
3:渐变2
4:渐变3
5:渐变4
默认为 0
2.进度条效果演示
WBar.AutoRun
3.改标题和进度
WBar.Per('处理图像数据', 0.2);
WBar.Per('处理图像数据'); % 只改标题
WBar.Per(0.2); % 只改进度
4.删除进度条
WBar.clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Class_Waitbar
% V02
% 使用示例:
%
% 1.实例化 Waitbar(定义一个Waitbar)
%
% WBar = Class_Waitbar('Title', '开始处理数据', 'Width', 15, 'ColorType', 0);
% WBar = Class_Waitbar('Title', '开始处理数据', 'Width', 15); % ColorType 未传入默认为 0
% WBar = Class_Waitbar('Title', '开始处理数据'); % Width 未传入默认为 15
% WBar = Class_Waitbar; % Title 默认为 Waitbar
%
% Title: 显示在 Waitbar 上的信息,默认为“WaitBar”
% Width: 进度条每增加一个单位的宽度,默认为 15
% ColorType:
% 0:进度条每个单位的颜色都是随机的
% 1:随机渐变色,进度条增加的第一个单位颜色是随机的,后续在此基础上渐变。
% 2:渐变1
% 3:渐变2
% 4:渐变3
% 5:渐变4
% 默认为 0
%
% 2.进度条效果演示
% WBar.AutoRun
%
% 3.改标题和进度
% WBar.Per('处理图像数据', 0.2);
% WBar.Per('处理图像数据'); % 只改标题
% WBar.Per(0.2); % 只改进度
%
% 4.删除进度条
% WBar.clc
%
% _________________________________________________________________________
% Version: V01
% CreatedBy: MikeFeidan
% Date: 20220121
% _________________________________________________________________________
% Version: V02
% ChangedBy: MikeFeidan
% ChangeLog: 1.由 Hey_Waitbar 更名为 Class_Waitbar
% 2.重写注释及 help
% 3.去掉进度条单位高度变化参数
% 4.去掉固定颜色的 ColorType,增加随机渐变色和其它定制渐变色。
% Date: 20240723
% _________________________________________________________________________
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
classdef Class_Waitbar
properties % 核心属性
Title = 'WaitBar'; % 进度条标题
Width = 20; % 进度条每增加一个单位的宽度
ColorType = 0; % 0:随机颜色 1:随机渐变颜色 2:渐变色1 3:渐变色2 4:渐变色3 5:渐变色4 6:渐变色5
end
properties % 其它属性
Figure; % 进度条窗口
Icon; % 图标
Steps; % 进度条所有单位句柄
Back = 'Enable'; % 进度条回退使能
Num; % 进度条单位个数
end
methods
%% Class_Waitbar
function self = Class_Waitbar( ParamType1, Param1, ParamType2, Param2, ParamType3, Param3 )
if nargin == 6 % Just remove warning
isempty( ParamType1 );
isempty( ParamType2 );
isempty( ParamType3 );
isempty( Param1 );
isempty( Param2 );
isempty( Param3 );
end
SQMark = char(39);
if mod(nargin, 2) ~= 0 % 输入参数不成对,直接保错。
error(['属性名与属性值需成对输入,例:WBar = Class_Waitbar(', ...
SQMark, 'Title', SQMark, ', ', SQMark, '开始处理数据', ...
SQMark, ', ', SQMark, 'Width', SQMark, ', 15);', char(10), ...
'运行 help Class_Waitbar 可查看帮助文档!']);
else
for Hey = 1:3
if exist(['ParamType', num2str(Hey)], 'var')
PropertyStr = eval(['self.IsProperties(ParamType', num2str(Hey), ', Param', num2str(Hey), ');']);
if isempty(PropertyStr)
error(['属性名 ', SQMark, eval(['ParamType', num2str(Hey)]), SQMark, ' 或其对应的属性值错误!运行 help Class_Waitbar 可查看帮助文档!']);
else
eval(['self.', PropertyStr, ' = Param', num2str(Hey), ';']);
end
end
if isempty(self.Title)
self.Title = 'WaitBar';
end
end
end
FigureWidth = 650;
self.Num = round((FigureWidth - 30) / self.Width);
FigureWidth = self.Width * self.Num + 30;
self.Figure = ...
figure('Name', self.Title, ...
'MenuBar', 'none', ...
'Resize', 'off', ...
'units', 'pixels', ...
'Position', [460, 385, FigureWidth, 60], ...
'NumberTitle', 'off');
self.SetGUIOnTop(self.Figure);
self.SetIcon(self.Figure);
for Jay = 1:self.Num
eval(['self.Steps.Steps', num2str(Jay), ' = ', ...
'uicontrol(self.Figure,', ...
SQMark,'Style',SQMark,',',SQMark,'text',SQMark,',', ...
SQMark,'units',SQMark,',',SQMark,'pixels',SQMark,',', ...
SQMark,'Position',SQMark,',[',num2str( 15 + (Jay - 1) * self.Width ),', 15, ',num2str(self.Width + 1),', 30]);']);
end
end
%% IsProperties
function PropertyStr = IsProperties(varargin)
[ParamStr, Param] = varargin{[2, 3]};
PropertyStr = '';
if strcmpi(ParamStr, 'Title')
if ischar(Param)
PropertyStr = 'Title';
end
end
if strcmpi(ParamStr, 'Width')
if 5 <= Param && Param <= 100
PropertyStr = 'Width';
end
end
if strcmpi(ParamStr, 'ColorType')
if 0 <= Param && Param <= 5
PropertyStr = 'ColorType';
end
end
end
%% Per
function Per(varargin)
NewPercentFlag = false;
if nargin == 3
[self, Param1, Param2] = varargin{[1, 2, 3]};
if ischar(Param1)
self.Title = Param1;
if isnumeric(Param2)
if 0 <= Param2 && Param2 <= 1
PercentStr = [' ', num2str( Param2 * 100 ), '%'];
else
error('方法 Per 的两个参数一个是标题,另一个是大于等于0且小于等于1的数!');
end
Percent = Param2;
else
error('方法 Per 的两个参数一个是标题,另一个是大于等于0且小于等于1的数!');
end
elseif ischar(Param2)
self.Title = Param2;
if isnumeric(Param1)
if 0 <= Param1 && Param1 <= 1
PercentStr = [' ', num2str( Param1 * 100 ), '%'];
else
error('方法 Per 的两个参数一个是标题,另一个是大于等于0且小于等于1的数!');
end
Percent = Param1;
else
error('方法 Per 的两个参数一个是标题,另一个是大于等于0且小于等于1的数!');
end
else
error('方法 Per 的两个参数一个是标题,另一个是大于等于0且小于等于1的数!');
end
NewPercentFlag = true;
elseif nargin == 2
[self, Param1] = varargin{[1, 2]};
if ischar(Param1)
self.Title = Param1;
PercentStr = self.Figure.Name;
Matches = regexp(PercentStr, '(\d+%)', 'tokens', 'once');
if ~isempty(Matches)
PercentStr = [' ', Matches{1}];
else
PercentStr = '';
end
elseif isnumeric(Param1)
self.Title = self.Figure.Name;
Matches = regexp(self.Title, '(.+[^\s])\s+\d+%|(.+[^\s])', 'tokens', 'once');
self.Title = Matches{1};
PercentStr = [' ', num2str(Param1 * 100), '%'];
NewPercentFlag = true;
Percent = Param1;
else
error('方法 Per 的两个参数一个是标题,另一个是大于等于0且小于等于1的数!');
end
else
return
end
if isempty(self.Title)
self.Title = 'WaitBar';
end
self.Figure.Name = [self.Title, PercentStr];
if NewPercentFlag
if isequal(self.Steps.Steps1.BackgroundColor, [0.94, 0.94 ,0.94])
if self.ColorType == 0 || self.ColorType == 1
FixedBarColor = [rand(1,1), rand(1,1), rand(1,1)];
elseif self.ColorType == 2
FixedBarColor = [0, 0, 0];
elseif self.ColorType == 3
FixedBarColor = [1, 1, 1];
elseif self.ColorType == 4
FixedBarColor = [0.5, 0, 1];
elseif self.ColorType == 5
FixedBarColor = [1, 0.5, 0];
end
else
FixedBarColor = self.Steps.Steps1.BackgroundColor;
end
ForNum = floor(self.Num * Percent);
if FixedBarColor(1) <= 0.5
FCPer1 = (1 - FixedBarColor(1)) / self.Num;
else
FCPer1 = -(FixedBarColor(1) / self.Num);
end
if FixedBarColor(2) <= 0.5
FCPer2 = (1 - FixedBarColor(2)) / self.Num;
else
FCPer2 = -(FixedBarColor(2) / self.Num);
end
if FixedBarColor(3) <= 0.5
FCPer3 = (1 - FixedBarColor(3)) / self.Num;
else
FCPer3 = -(FixedBarColor(3) / self.Num);
end
if strcmp( self.Back, 'Enable' )
for Jay = floor(self.Num * Percent) + 1:self.Num
eval(['self.Steps.Steps',num2str(Jay),'.BackgroundColor = [0.94,0.94,0.94];']);
end
end
pause(0.00001)
for Jay = 1:ForNum
if isequal( eval(['self.Steps.Steps',num2str(Jay),'.BackgroundColor']), [0.94, 0.94 ,0.94] )
if self.ColorType == 0
BarColor = '[rand(1,1), rand(1,1), rand(1,1)]';
else
if Jay == 1
BarColor = ['[', num2str(FixedBarColor(1)), ', ', num2str(FixedBarColor(2)), ', ', num2str(FixedBarColor(3)), '];'];
else
BarColor = eval(['self.Steps.Steps',num2str(Jay - 1),'.BackgroundColor;']);
BarColor = ['[', num2str(BarColor(1) + FCPer1), ', ', num2str(BarColor(2) + FCPer2), ', ', num2str(BarColor(3) + FCPer3), '];'];
end
end
eval(['self.Steps.Steps',num2str(Jay),'.BackgroundColor = ',BarColor,';']);
end
end
pause(0.00001)
end
end
%% clc
function clc(varargin)
self = varargin{1};
delete( self.Figure );
end
%% SetIcon
function SetIcon(varargin)
self = varargin{1};
if ~exist('.\IconDog.jpg', 'file')
imwrite(self.GetIconDog, '.\IconDog.jpg');
end
self.Icon = javax.swing.ImageIcon('.\IconDog.jpg');
FigFrame = get(self.Figure, 'JavaFrame');
FigFrame.setFigureIcon(self.Icon);
delete('.\IconDog.jpg');
clc
end
%% SetGUIOnTop
function SetGUIOnTop(varargin)
Fig = varargin{2};
jFrame = get(Fig, 'JavaFrame');
drawnow;
jFrame.fHG2Client.getWindow.setAlwaysOnTop(true);
clc
end
%% AutoRun
function AutoRun(varargin)
self = varargin{1};
self.Per(0);
Per = 0.01;
Count = 0.01;
while 1
self.Per(Count);
Count = Count + Per;
if Count - 1 > Per
break;
end
end
end
%% GetIconDog
function Icon = GetIconDog(varargin)
Icon(:,:,1) = uint8([ ...
201 200 199 197 196 193 191 189 186 186 180 176 146 114 134 125 126 116 113 114 136 164 162 159 155 167 182 191 177 144 141 142 142 143 146
202 201 199 198 196 195 190 188 185 184 185 185 190 169 186 168 173 193 198 209 227 238 239 242 244 251 255 254 246 201 144 141 142 142 142
203 202 199 199 196 195 191 189 185 210 239 237 243 248 247 247 245 248 249 245 238 233 231 233 233 227 216 187 166 190 163 138 141 142 143
204 203 200 199 198 195 192 188 205 238 225 226 226 228 229 229 225 223 215 202 192 183 172 160 171 148 128 122 135 177 163 137 140 142 143
203 203 201 199 198 196 193 189 216 213 152 154 161 181 187 173 160 151 136 127 118 114 114 113 113 114 120 136 145 169 150 138 139 140 141
203 203 201 200 199 197 195 191 201 184 144 118 116 118 118 114 111 110 113 110 105 102 113 120 120 128 138 152 154 168 143 138 139 139 140
203 203 200 200 199 198 196 192 191 174 156 136 122 123 123 115 112 114 128 124 114 123 144 135 132 146 153 157 161 160 139 139 139 139 140
201 201 200 199 200 199 196 194 189 168 172 148 141 166 152 121 113 124 141 156 146 143 151 152 143 165 170 160 163 163 137 138 139 141 142
200 200 200 198 199 199 197 194 197 167 188 170 182 115 73 149 168 165 176 191 192 125 27 92 176 181 172 167 164 165 136 138 140 141 142
200 201 203 200 199 200 198 197 205 186 187 203 214 59 47 209 227 199 200 191 217 172 12 94 188 192 175 171 171 166 136 138 139 141 142
200 201 203 201 200 201 198 202 206 184 182 218 232 143 153 234 230 210 204 210 219 229 187 182 195 203 188 168 172 158 136 139 141 142 143
200 201 203 202 203 200 207 214 209 183 179 219 232 229 232 235 224 211 223 239 234 231 238 223 203 186 189 171 176 155 136 139 141 142 144
200 201 203 203 202 208 221 211 210 182 168 205 225 228 229 224 199 205 217 227 237 229 233 221 190 185 177 173 180 152 137 141 142 145 147
200 200 202 201 203 222 213 209 208 199 172 193 217 220 212 204 164 147 153 176 210 204 231 217 203 180 170 179 184 153 138 142 144 148 148
202 201 203 203 215 220 200 197 195 193 165 193 200 218 206 172 108 132 157 150 142 136 176 220 202 195 194 172 185 162 139 143 147 148 150
202 201 202 209 220 215 180 171 180 179 151 194 191 205 193 110 109 143 149 140 145 141 137 214 218 214 195 176 189 188 144 143 147 149 152
202 202 203 204 205 198 171 171 171 201 177 185 191 192 122 116 130 157 144 120 142 161 163 207 222 219 199 183 189 196 169 157 164 167 169
202 202 204 204 195 168 155 157 141 189 190 182 185 165 97 140 141 138 122 107 114 123 149 188 224 228 197 179 191 185 177 167 169 169 170
203 203 203 203 203 166 124 138 126 171 185 183 177 170 120 155 146 117 154 156 152 106 123 175 220 236 206 181 187 179 167 166 168 169 170
202 202 203 202 202 192 120 121 121 167 183 175 180 199 139 156 160 95 61 70 62 60 145 187 227 237 213 187 176 153 165 164 167 169 170
202 202 203 203 201 204 188 127 111 142 185 180 184 199 134 144 153 82 18 27 11 44 150 181 232 238 211 192 172 152 165 163 167 169 171
204 203 203 202 202 201 203 185 131 114 179 183 181 172 119 123 146 115 44 30 33 91 140 193 236 228 210 196 161 161 162 164 168 170 172
204 203 203 202 202 202 200 200 181 146 165 176 173 159 115 87 96 101 66 47 63 99 177 228 220 215 216 204 160 162 163 166 168 170 173
204 204 203 202 202 202 201 202 200 185 166 187 163 191 193 139 81 80 77 64 76 129 193 233 247 240 238 196 158 162 164 166 168 171 174
204 204 204 204 202 202 201 203 202 185 162 205 201 220 172 104 129 127 97 78 111 139 102 140 180 166 121 99 162 164 167 167 168 171 175
204 204 204 204 204 202 200 201 201 184 166 191 199 161 86 70 45 37 45 41 46 12 16 37 14 5 0 52 158 149 145 162 171 171 174
206 205 204 204 204 202 202 203 194 180 191 147 100 95 124 120 50 28 23 25 35 23 52 43 62 65 64 110 117 97 92 113 148 173 174
204 204 204 204 203 202 203 205 186 184 179 128 102 102 108 100 76 66 70 87 93 80 67 77 101 97 100 97 88 91 94 98 102 139 174
206 204 204 204 203 202 203 201 173 180 161 134 115 104 112 123 125 127 131 133 129 112 83 77 117 111 83 77 69 90 99 100 106 108 128
206 204 203 204 203 203 204 190 181 190 166 153 133 114 118 152 168 172 170 165 150 125 88 95 134 145 105 82 79 91 94 94 93 103 97
204 202 201 202 203 203 205 201 202 193 181 170 142 125 131 172 197 197 189 183 165 124 104 122 157 155 99 59 49 45 41 40 40 40 41
201 201 201 201 201 203 205 211 217 197 176 171 161 145 142 164 190 195 189 189 169 123 125 139 169 149 70 47 36 36 38 39 40 40 39
198 199 200 199 198 200 200 206 233 219 186 166 172 166 145 148 176 190 191 183 156 131 145 153 178 148 64 62 71 67 60 57 54 50 49
194 196 197 196 196 197 186 189 234 226 203 185 184 185 164 145 177 192 191 185 151 144 159 169 184 149 75 86 107 84 70 59 52 47 48
193 192 193 194 193 194 157 177 220 228 212 200 198 201 186 152 185 197 198 180 158 157 171 178 183 161 50 42 41 33 30 28 26 26 25
]);
Icon(:,:,2) = uint8([ ...
203 202 201 199 198 195 192 190 184 182 180 180 151 129 148 143 141 122 119 128 142 159 155 150 145 151 154 158 156 138 137 138 138 138 138
203 203 201 200 198 197 192 190 184 182 181 178 174 150 166 155 158 165 173 179 186 191 187 189 188 189 185 183 187 172 139 137 138 138 138
205 203 201 201 198 197 193 191 187 187 185 172 177 179 177 179 178 178 180 175 166 162 159 159 167 163 155 131 117 148 148 134 137 138 139
206 205 202 201 200 197 195 191 190 180 156 155 157 158 157 159 156 155 147 137 134 133 124 113 132 111 94 89 103 141 147 133 136 138 139
206 205 202 201 200 198 196 192 182 161 106 106 114 133 137 124 113 107 95 91 89 85 84 84 83 88 96 112 121 138 138 134 135 136 137
205 204 203 202 201 199 197 194 163 133 113 89 85 86 87 83 83 82 84 85 85 78 89 96 96 108 122 138 135 138 133 135 135 135 136
205 205 203 202 201 200 198 196 154 119 134 116 97 98 95 91 94 94 109 106 95 96 112 110 112 130 142 144 141 130 130 134 135 135 136
207 206 203 201 201 201 199 197 155 113 151 132 120 128 115 97 89 104 125 141 130 113 108 114 125 152 159 144 140 138 132 133 135 137 138
208 207 204 201 201 201 200 197 163 108 164 157 159 83 56 129 152 151 165 185 183 110 18 75 160 171 159 152 140 141 133 135 135 137 138
208 208 205 203 201 201 200 196 163 121 156 193 197 44 39 197 221 190 191 183 212 165 7 75 173 182 162 155 145 141 133 135 135 137 138
208 208 206 205 203 202 201 189 155 123 146 211 226 120 135 226 226 200 196 203 211 222 176 163 181 192 177 154 145 137 133 135 137 138 139
208 208 206 206 205 203 202 178 159 126 136 210 229 220 224 229 218 203 218 236 229 226 233 216 190 175 178 157 146 135 133 135 137 138 140
208 208 206 206 206 205 194 169 163 123 118 193 219 222 223 217 188 196 210 219 230 221 226 213 181 172 166 158 148 134 134 137 138 141 143
209 208 208 207 208 198 169 166 158 137 117 177 209 215 207 196 149 128 123 150 199 192 224 206 194 166 154 162 151 137 136 138 140 144 144
212 210 209 207 202 178 148 150 140 133 108 171 188 209 198 159 77 89 110 104 103 101 156 209 191 183 179 155 150 144 136 139 143 144 146
210 209 208 199 180 164 128 119 123 132 98 169 179 197 184 83 65 95 102 95 100 95 91 197 210 206 184 159 149 155 139 140 143 145 148
212 209 207 196 162 139 114 116 114 152 120 157 180 180 103 76 85 110 102 83 101 115 111 181 215 212 188 166 145 148 154 154 160 163 165
210 210 209 205 175 116 101 102 85 131 126 157 173 153 72 92 95 107 92 73 83 93 104 154 218 224 185 161 147 136 153 164 165 165 166
211 210 211 210 206 148 74 83 72 115 122 158 165 159 96 104 100 90 123 119 120 79 83 139 213 232 197 163 142 135 156 162 164 165 166
210 211 212 212 211 192 83 65 67 113 122 147 167 187 119 109 113 64 38 43 41 39 105 153 220 231 203 169 133 112 158 163 164 165 166
210 211 211 211 209 209 182 90 64 95 124 150 170 187 115 105 107 58 11 16 7 27 106 152 226 231 198 173 146 138 160 164 163 165 167
212 213 211 211 210 208 210 178 105 75 122 152 166 159 103 94 106 86 28 17 19 59 98 176 231 220 198 180 151 158 162 163 163 166 168
213 213 211 211 211 211 207 203 173 124 123 141 157 145 97 64 67 71 41 28 41 67 154 215 207 203 205 192 157 159 162 162 164 166 169
213 213 212 211 211 210 207 205 201 180 148 162 145 179 181 120 58 51 43 35 48 105 172 217 234 226 225 183 154 159 162 162 164 166 171
213 213 213 213 211 210 207 206 206 179 140 186 186 207 160 85 101 98 60 39 81 122 77 115 165 153 114 97 158 159 163 163 164 167 172
213 213 213 213 213 211 208 207 204 172 120 156 175 132 65 56 29 25 29 26 35 10 13 30 15 12 8 61 155 148 145 159 166 167 172
213 212 212 213 213 211 210 207 196 146 135 93 55 55 87 83 24 12 9 10 19 12 35 25 52 65 65 111 116 97 92 112 146 171 172
213 212 212 213 212 211 211 211 171 133 126 76 56 60 61 53 35 28 34 50 58 47 34 42 69 93 99 96 87 90 93 98 102 137 171
211 212 212 213 212 210 212 206 132 127 109 81 64 58 66 77 78 81 82 85 87 73 44 37 72 90 82 76 68 89 98 101 107 107 127
212 212 213 211 210 209 212 168 121 135 111 97 79 63 71 105 117 117 114 110 101 80 44 49 86 109 97 81 78 90 95 96 95 102 96
213 213 214 212 209 209 208 158 140 132 118 108 87 71 77 116 142 138 128 126 112 75 57 72 105 113 82 59 49 45 42 42 42 40 41
213 213 214 213 210 209 208 170 156 134 112 107 101 87 85 104 128 133 126 127 112 73 76 86 116 105 53 46 36 36 37 38 40 39 39
211 212 213 212 211 210 207 166 173 157 123 102 107 104 85 86 113 128 129 121 97 80 93 100 124 100 56 66 75 70 64 60 58 54 54
207 209 210 209 209 212 184 139 175 164 140 122 119 121 101 81 113 128 129 125 92 89 105 115 130 102 73 93 117 93 78 66 59 55 54
204 205 206 207 206 205 124 122 164 169 149 139 137 137 122 87 121 134 138 122 100 100 115 122 126 112 45 43 42 35 30 28 27 27 25
]);
Icon(:,:,3) = uint8([ ...
201 201 200 196 195 193 192 187 182 179 176 175 149 131 150 143 138 121 116 122 135 146 142 135 127 132 132 134 136 126 125 126 126 126 127
203 202 199 196 195 194 191 188 182 179 175 168 160 131 144 134 134 136 141 142 145 146 141 141 137 138 131 123 131 135 126 125 126 126 126
204 203 199 197 195 194 191 189 185 166 141 123 122 121 120 123 121 121 126 123 113 109 106 108 114 112 106 91 82 111 131 123 125 126 127
205 204 201 199 197 194 192 190 176 131 105 103 104 105 106 106 102 102 97 91 92 96 90 79 104 87 72 70 84 113 128 124 124 126 127
206 204 202 200 198 195 193 192 153 119 81 78 78 96 102 88 79 77 72 70 68 69 69 72 70 73 82 98 105 114 123 126 125 124 125
209 205 203 202 200 198 194 194 137 101 102 72 67 65 70 68 67 70 73 72 70 65 76 83 83 94 107 123 119 116 122 123 123 123 124
212 210 208 205 201 199 196 195 136 91 122 103 81 79 79 78 78 79 93 92 82 79 91 94 96 115 127 129 123 109 121 122 123 123 124
212 212 210 205 203 200 198 196 137 81 134 119 106 103 93 81 73 87 109 130 115 91 81 86 104 140 148 130 119 114 120 122 123 125 126
211 211 210 206 205 202 199 196 141 72 142 145 142 67 51 113 138 137 151 175 173 96 20 67 142 158 148 137 116 120 121 122 123 125 126
211 211 211 209 206 203 200 194 136 86 134 184 181 38 42 185 211 180 180 170 204 165 13 68 157 169 150 139 119 120 122 122 123 125 126
211 211 211 212 208 204 202 178 120 88 120 201 213 106 126 215 215 190 185 190 201 216 170 148 170 182 166 137 119 115 122 123 125 126 127
211 211 211 212 210 205 193 147 122 90 108 198 218 211 214 222 208 192 207 227 220 216 223 204 179 162 167 142 120 117 123 123 125 126 128
211 211 211 211 211 200 166 132 126 85 84 177 208 213 214 208 175 181 197 207 220 210 216 205 168 159 152 142 119 117 123 125 126 129 131
212 211 212 213 210 178 135 131 122 98 80 159 198 204 196 187 135 106 100 130 181 179 215 198 184 153 139 144 122 120 124 126 128 132 132
214 213 213 213 189 142 111 116 106 95 68 153 175 197 189 148 61 61 78 75 77 78 140 200 178 170 166 137 117 123 124 127 131 132 134
216 212 213 193 145 121 91 87 92 101 66 150 166 184 174 67 42 64 72 67 72 65 63 186 198 194 171 144 114 126 127 128 131 133 136
214 212 213 189 127 98 80 86 85 118 83 136 168 169 92 50 54 78 78 62 78 86 77 161 205 201 175 150 109 110 135 143 148 151 153
217 216 213 207 160 87 72 72 56 91 80 135 160 142 57 61 65 91 83 64 75 81 71 128 208 213 170 143 110 97 130 152 153 153 154
220 218 214 214 210 139 49 52 41 79 79 137 153 150 81 70 70 86 123 116 120 76 57 109 202 221 181 145 105 100 137 150 151 153 154
218 216 217 214 214 195 66 37 37 78 79 127 155 179 103 77 82 61 38 41 40 40 79 126 209 220 191 151 100 83 141 150 151 153 154
218 219 220 217 212 215 181 74 42 63 78 128 158 177 98 77 76 48 13 17 8 22 75 128 217 222 186 155 119 120 143 147 150 153 155
217 217 218 219 217 216 216 174 90 52 77 125 153 148 88 72 79 67 25 17 19 41 71 162 221 210 183 162 135 142 144 148 151 154 156
218 217 217 219 220 220 213 208 170 115 87 112 144 132 79 44 45 49 31 22 27 44 133 201 192 189 187 171 141 142 148 150 152 154 157
218 218 218 219 220 220 214 212 205 180 133 139 129 163 166 104 43 33 30 23 30 84 148 194 219 208 200 162 141 144 147 150 152 154 160
218 218 221 222 220 220 217 214 211 181 127 168 169 193 159 84 82 81 39 20 58 106 60 93 155 151 128 118 144 146 150 150 152 156 161
221 222 222 222 222 220 217 215 212 171 93 131 156 110 70 71 26 25 29 25 33 18 19 48 66 76 78 109 151 143 138 149 155 156 161
224 223 223 222 221 220 220 219 204 125 99 62 31 33 65 64 19 15 14 13 20 15 36 32 75 101 104 133 129 110 101 116 142 160 162
223 223 223 222 221 220 220 223 166 98 89 44 33 36 36 26 15 14 14 24 32 25 16 21 54 101 113 111 102 104 107 108 110 139 161
224 223 223 222 222 220 222 213 107 88 73 49 38 29 35 45 44 47 46 52 54 44 23 16 43 80 93 92 84 105 114 115 121 121 131
224 223 223 223 222 221 225 155 86 99 77 64 48 32 38 71 82 81 75 75 66 53 22 21 52 86 104 97 94 106 110 111 109 117 106
224 223 223 223 221 222 221 136 99 93 80 73 54 40 44 79 101 96 85 86 76 45 25 38 70 88 78 67 58 53 50 49 48 47 47
223 223 223 222 221 221 221 146 111 89 68 69 67 55 50 68 87 88 81 83 72 40 42 50 79 78 56 53 45 46 49 51 53 51 51
220 221 222 221 220 220 218 142 131 110 78 64 72 69 49 52 73 81 82 77 59 45 56 63 88 74 67 82 91 90 81 76 74 71 69
217 218 219 218 218 222 189 111 136 119 95 82 83 85 66 46 72 83 82 84 55 53 69 79 93 76 86 113 136 112 96 83 75 70 70
211 214 215 215 215 215 110 88 129 126 104 98 102 102 85 52 81 90 93 85 66 65 80 87 91 83 55 61 59 51 47 44 42 40 42
]);
end
end
end