시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 5 3 2 100.000%

문제

연결된, 무향 그래프 G=(V, E)가 주어졌을 때, V가 정점의 집합을 나타내고, E가 간선의 집합을 나타낸다고 하자. V의 부분집합 S를 G에서 제거했을 때, 그래프가 두 개의 연결 요소로 나눠지면 S를 분리자라고 한다. 그래프에서 정점을 제거하면 제거한 정점에 연결된 간선도 함께 제거된다. 이와 같은 상황을 [S, W, B] 라는 기호로 나타내기로 하자. 이는 그래프가 분리자 S에 의해서 W와 B라는 두 개의 연결 요소로 나뉘어 진다는 의미이다.

우리는 격자 모양의 그래프에서의 분리자를 살펴보려 한다. 이 그래프에서 각각의 격자점이 정점을 이루며, 각각의 정점은 이웃한 8개의 정점들과 연결되어 있다. 아래에 6×6 격자 에 대한 예제 그림이 있다. 흰색은 W, 회색은 S, 검은색은 B를 나타낸다.

문제를 단순화하기 위해, 다음의 조건을 만족하는 분리자만 다루기로 하자.

  1. 분리자의 부분집합은 분리자를 이루지 않는다.
  2. 분리자는 그래프에서 맨 윗줄의 한 점과 맨 아랫줄의 한 점을 포함한다. 단, 0, 5, 30, 35는 제외한다.
  3. 분리자를 따라서 그래프를 위에서 아래로 이동할 때, 내려오다가 다시 올라가는 경우는 없다.

이제 다음의 두 단계를 수행하여 분리자의 크기를 줄이려고 한다.

  1. B에서 몇 개의 정점을 택해서 S에 포함시킨다. 이때 택한 정점들은 반드시 왼쪽 정점으로 S에 포함된 정점을 가지고 있어야 한다.
  2. S에서 몇 개의 정점을 제거하여 W에 포함시킨다. 단, 이전 단계에서 포함시킨 정점들은 제거할 수 없다.

이와 같은 개선 방법을 이용하여 S가 여전히 분리자이도록 하고, 이때 S의 크기를 최소로 하라. 위의 예제는 다음과 같이 하면 S의 크기가 7로 최소가 된다.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

첫째 줄에 격자의 크기를 나타내는 두 정수 N, M(3≤N,M≤200)이 주어진다. 이는 격자의 크기가 N×M이라는 의미이다. 다음 N개의 줄에는 M개의 문자가 주어지는데, 각각은 S, W, B 중의 하나이다. 이는 해당 정점이 S, W, B 중 어느 집합에 속해있는지를 나타낸다. W는 반드시 S의 왼쪽에 존재한다. 잘못된 입력이 주어지지는 않는다고 가정해도 좋다. 모든 문자는 붙어서 입력된다.

입력의 마지막 줄에는 0이 두 개 주어진다.

출력

첫째 줄에 S의 최소 크기를 출력한다.

예제 입력 1

6 6
WWSBBB
WSSBBB
WSBBBB
WSBBBB
WSSSBB
WWWSBB
0 0

예제 출력 1

7
W3sicHJvYmxlbV9pZCI6IjIyODgiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWFjYTlcdWM3OTBcdWM3NTggXHViZDg0XHViOWFjXHVjNzkwIiwiZGVzY3JpcHRpb24iOiI8cD5cdWM1ZjBcdWFjYjBcdWI0MWMsIFx1YmIzNFx1ZDVhNSBcdWFkZjhcdWI3OThcdWQ1MDQgRz0oViwgRSlcdWFjMDAgXHVjOGZjXHVjNWI0XHVjODRjXHVjNzQ0IFx1YjU0YywgVlx1YWMwMCBcdWM4MTVcdWM4MTBcdWM3NTggXHVjOWQxXHVkNTY5XHVjNzQ0IFx1YjA5OFx1ZDBjMFx1YjBiNFx1YWNlMCwgRVx1YWMwMCBcdWFjMDRcdWMxMjBcdWM3NTggXHVjOWQxXHVkNTY5XHVjNzQ0IFx1YjA5OFx1ZDBjMFx1YjBiOFx1YjJlNFx1YWNlMCBcdWQ1NThcdWM3OTAuIFZcdWM3NTggXHViZDgwXHViZDg0XHVjOWQxXHVkNTY5IFNcdWI5N2MgR1x1YzVkMFx1YzExYyBcdWM4MWNcdWFjNzBcdWQ1ODhcdWM3NDQgXHViNTRjLCBcdWFkZjhcdWI3OThcdWQ1MDRcdWFjMDAgXHViNDUwIFx1YWMxY1x1Yzc1OCBcdWM1ZjBcdWFjYjAgXHVjNjk0XHVjMThjXHViODVjIFx1YjA5OFx1YjIyMFx1YzljMFx1YmE3NCBTXHViOTdjIFx1YmQ4NFx1YjlhY1x1Yzc5MFx1Yjc3Y1x1YWNlMCBcdWQ1NWNcdWIyZTQuIFx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzVkMFx1YzExYyBcdWM4MTVcdWM4MTBcdWM3NDQgXHVjODFjXHVhYzcwXHVkNTU4XHViYTc0IFx1YzgxY1x1YWM3MFx1ZDU1YyBcdWM4MTVcdWM4MTBcdWM1ZDAgXHVjNWYwXHVhY2IwXHViNDFjIFx1YWMwNFx1YzEyMFx1YjNjNCBcdWQ1NjhcdWFlZDggXHVjODFjXHVhYzcwXHViNDFjXHViMmU0LiBcdWM3NzRcdWM2NDAgXHVhYzE5XHVjNzQwIFx1YzBjMVx1ZDY2OVx1Yzc0NCBbUywgVywgQl0gXHViNzdjXHViMjk0IFx1YWUzMFx1ZDYzOFx1Yjg1YyBcdWIwOThcdWQwYzBcdWIwYjRcdWFlMzBcdWI4NWMgXHVkNTU4XHVjNzkwLiBcdWM3NzRcdWIyOTQgXHVhZGY4XHViNzk4XHVkNTA0XHVhYzAwIFx1YmQ4NFx1YjlhY1x1Yzc5MCBTXHVjNWQwIFx1Yzc1OFx1ZDU3NFx1YzExYyBXXHVjNjQwIEJcdWI3N2NcdWIyOTQgXHViNDUwIFx1YWMxY1x1Yzc1OCBcdWM1ZjBcdWFjYjAgXHVjNjk0XHVjMThjXHViODVjIFx1YjA5OFx1YjI1OFx1YzViNCBcdWM5YzRcdWIyZTRcdWIyOTQgXHVjNzU4XHViYmY4XHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM2YjBcdWI5YWNcdWIyOTQgXHVhY2E5XHVjNzkwIFx1YmFhOFx1YzU5MVx1Yzc1OCBcdWFkZjhcdWI3OThcdWQ1MDRcdWM1ZDBcdWMxMWNcdWM3NTggXHViZDg0XHViOWFjXHVjNzkwXHViOTdjIFx1YzBiNFx1ZDNiNFx1YmNmNFx1YjgyNCBcdWQ1NWNcdWIyZTQuIFx1Yzc3NCBcdWFkZjhcdWI3OThcdWQ1MDRcdWM1ZDBcdWMxMWMgXHVhYzAxXHVhYzAxXHVjNzU4IFx1YWNhOVx1Yzc5MFx1YzgxMFx1Yzc3NCBcdWM4MTVcdWM4MTBcdWM3NDQgXHVjNzc0XHViOGU4XHViYTcwLCBcdWFjMDFcdWFjMDFcdWM3NTggXHVjODE1XHVjODEwXHVjNzQwIFx1Yzc3NFx1YzZjM1x1ZDU1YyA4XHVhYzFjXHVjNzU4IFx1YzgxNVx1YzgxMFx1YjRlNFx1YWNmYyBcdWM1ZjBcdWFjYjBcdWI0MThcdWM1YjQgXHVjNzg4XHViMmU0LiBcdWM1NDRcdWI3OThcdWM1ZDAgNiZ0aW1lczs2IFx1YWNhOVx1Yzc5MCBcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YzYwOFx1YzgxYyBcdWFkZjhcdWI5YmNcdWM3NzQgXHVjNzg4XHViMmU0LiBcdWQ3NzBcdWMwYzlcdWM3NDAgVywgXHVkNjhjXHVjMGM5XHVjNzQwIFMsIFx1YWM4MFx1Yzc0MFx1YzBjOVx1Yzc0MCBCXHViOTdjIFx1YjA5OFx1ZDBjMFx1YjBiOFx1YjJlNC48XC9wPlxyXG5cclxuPHA+PGltZyBhbHQ9XCJcIiBzcmM9XCJcL0p1ZGdlT25saW5lXC91cGxvYWRcLzIwMTAwOVwvMS5QTkdcIiBzdHlsZT1cImhlaWdodDozNTJweDsgd2lkdGg6MzQ5cHhcIiBcLz48XC9wPlxyXG5cclxuPHA+XHViYjM4XHVjODFjXHViOTdjIFx1YjJlOFx1YzIxY1x1ZDY1NFx1ZDU1OFx1YWUzMCBcdWM3MDRcdWQ1NzQsIFx1YjJlNFx1Yzc0Y1x1Yzc1OCBcdWM4NzBcdWFjNzRcdWM3NDQgXHViOWNjXHVjODcxXHVkNTU4XHViMjk0IFx1YmQ4NFx1YjlhY1x1Yzc5MFx1YjljYyBcdWIyZTRcdWI4ZThcdWFlMzBcdWI4NWMgXHVkNTU4XHVjNzkwLjxcL3A+XHJcblxyXG48b2w+XHJcblx0PGxpPlx1YmQ4NFx1YjlhY1x1Yzc5MFx1Yzc1OCBcdWJkODBcdWJkODRcdWM5ZDFcdWQ1NjlcdWM3NDAgXHViZDg0XHViOWFjXHVjNzkwXHViOTdjIFx1Yzc3NFx1YjhlOFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuPFwvbGk+XHJcblx0PGxpPlx1YmQ4NFx1YjlhY1x1Yzc5MFx1YjI5NCBcdWFkZjhcdWI3OThcdWQ1MDRcdWM1ZDBcdWMxMWMgXHViOWU4IFx1YzcxN1x1YzkwNFx1Yzc1OCBcdWQ1NWMgXHVjODEwXHVhY2ZjIFx1YjllOCBcdWM1NDRcdWI3YWJcdWM5MDRcdWM3NTggXHVkNTVjIFx1YzgxMFx1Yzc0NCBcdWQzZWNcdWQ1NjhcdWQ1NWNcdWIyZTQuIFx1YjJlOCwgMCwgNSwgMzAsIDM1XHViMjk0IFx1YzgxY1x1YzY3OFx1ZDU1Y1x1YjJlNC48XC9saT5cclxuXHQ8bGk+XHViZDg0XHViOWFjXHVjNzkwXHViOTdjIFx1YjUzMFx1Yjc3Y1x1YzExYyBcdWFkZjhcdWI3OThcdWQ1MDRcdWI5N2MgXHVjNzA0XHVjNWQwXHVjMTFjIFx1YzU0NFx1Yjc5OFx1Yjg1YyBcdWM3NzRcdWIzZDlcdWQ1NjAgXHViNTRjLCBcdWIwYjRcdWI4MjRcdWM2MjRcdWIyZTRcdWFjMDAgXHViMmU0XHVjMmRjIFx1YzYyY1x1Yjc3Y1x1YWMwMFx1YjI5NCBcdWFjYmRcdWM2YjBcdWIyOTQgXHVjNWM2XHViMmU0LjxcL2xpPlxyXG48XC9vbD5cclxuXHJcbjxwPlx1Yzc3NFx1YzgxYyBcdWIyZTRcdWM3NGNcdWM3NTggXHViNDUwIFx1YjJlOFx1YWNjNFx1Yjk3YyBcdWMyMThcdWQ1ODlcdWQ1NThcdWM1ZWMgXHViZDg0XHViOWFjXHVjNzkwXHVjNzU4IFx1ZDA2Y1x1YWUzMFx1Yjk3YyBcdWM5MDRcdWM3NzRcdWI4MjRcdWFjZTAgXHVkNTVjXHViMmU0LjxcL3A+XHJcblxyXG48b2w+XHJcblx0PGxpPkJcdWM1ZDBcdWMxMWMgXHViYTg3IFx1YWMxY1x1Yzc1OCBcdWM4MTVcdWM4MTBcdWM3NDQgXHVkMGRkXHVkNTc0XHVjMTFjIFNcdWM1ZDAgXHVkM2VjXHVkNTY4XHVjMmRjXHVkMGE4XHViMmU0LiBcdWM3NzRcdWI1NGMgXHVkMGRkXHVkNTVjIFx1YzgxNVx1YzgxMFx1YjRlNFx1Yzc0MCBcdWJjMThcdWI0ZGNcdWMyZGMgXHVjNjdjXHVjYWJkIFx1YzgxNVx1YzgxMFx1YzczY1x1Yjg1YyBTXHVjNWQwIFx1ZDNlY1x1ZDU2OFx1YjQxYyBcdWM4MTVcdWM4MTBcdWM3NDQgXHVhYzAwXHVjOWMwXHVhY2UwIFx1Yzc4OFx1YzViNFx1YzU3YyBcdWQ1NWNcdWIyZTQuPFwvbGk+XHJcblx0PGxpPlNcdWM1ZDBcdWMxMWMgXHViYTg3IFx1YWMxY1x1Yzc1OCBcdWM4MTVcdWM4MTBcdWM3NDQgXHVjODFjXHVhYzcwXHVkNTU4XHVjNWVjIFdcdWM1ZDAgXHVkM2VjXHVkNTY4XHVjMmRjXHVkMGE4XHViMmU0LiBcdWIyZTgsIFx1Yzc3NFx1YzgwNCBcdWIyZThcdWFjYzRcdWM1ZDBcdWMxMWMgXHVkM2VjXHVkNTY4XHVjMmRjXHVkMGE4IFx1YzgxNVx1YzgxMFx1YjRlNFx1Yzc0MCBcdWM4MWNcdWFjNzBcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1YjJlNC48XC9saT5cclxuPFwvb2w+XHJcblxyXG48cD5cdWM3NzRcdWM2NDAgXHVhYzE5XHVjNzQwIFx1YWMxY1x1YzEyMCBcdWJjMjlcdWJjOTVcdWM3NDQgXHVjNzc0XHVjNmE5XHVkNTU4XHVjNWVjIFNcdWFjMDAgXHVjNWVjXHVjODA0XHVkNzg4IFx1YmQ4NFx1YjlhY1x1Yzc5MFx1Yzc3NFx1YjNjNFx1Yjg1ZCBcdWQ1NThcdWFjZTAsIFx1Yzc3NFx1YjU0YyBTXHVjNzU4IFx1ZDA2Y1x1YWUzMFx1Yjk3YyBcdWNkNWNcdWMxOGNcdWI4NWMgXHVkNTU4XHViNzdjLiBcdWM3MDRcdWM3NTggXHVjNjA4XHVjODFjXHViMjk0IFx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWM3NzQgXHVkNTU4XHViYTc0IFNcdWM3NTggXHVkMDZjXHVhZTMwXHVhYzAwIDdcdWI4NWMgXHVjZDVjXHVjMThjXHVhYzAwIFx1YjQxY1x1YjJlNC48XC9wPlxyXG5cclxuPHA+PGltZyBhbHQ9XCJcIiBzcmM9XCJcL0p1ZGdlT25saW5lXC91cGxvYWRcLzIwMTAwOVwvMi5QTkdcIiBzdHlsZT1cImhlaWdodDozNTJweDsgd2lkdGg6MzQ5cHhcIiBcLz48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlx1Yzc4NVx1YjgyNVx1Yzc0MCBcdWM1ZWNcdWI3ZWMgXHVhYzFjXHVjNzU4IFx1ZDE0Y1x1YzJhNFx1ZDJiOCBcdWNmMDBcdWM3NzRcdWMyYTRcdWI4NWMgXHVjNzc0XHViOGU4XHVjNWI0XHVjODM4IFx1Yzc4OFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMCBcdWFjYTlcdWM3OTBcdWM3NTggXHVkMDZjXHVhZTMwXHViOTdjIFx1YjA5OFx1ZDBjMFx1YjBiNFx1YjI5NCBcdWI0NTAgXHVjODE1XHVjMjE4IE4sIE0oMyZsZTtOLE0mbGU7MjAwKVx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIFx1Yzc3NFx1YjI5NCBcdWFjYTlcdWM3OTBcdWM3NTggXHVkMDZjXHVhZTMwXHVhYzAwIE4mdGltZXM7TVx1Yzc3NFx1Yjc3Y1x1YjI5NCBcdWM3NThcdWJiZjhcdWM3NzRcdWIyZTQuIFx1YjJlNFx1Yzc0YyBOXHVhYzFjXHVjNzU4IFx1YzkwNFx1YzVkMFx1YjI5NCBNXHVhYzFjXHVjNzU4IFx1YmIzOFx1Yzc5MFx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzBcdWIyOTRcdWIzNzAsIFx1YWMwMVx1YWMwMVx1Yzc0MCBTLCBXLCBCIFx1YzkxMVx1Yzc1OCBcdWQ1NThcdWIwOThcdWM3NzRcdWIyZTQuIFx1Yzc3NFx1YjI5NCBcdWQ1NzRcdWIyZjkgXHVjODE1XHVjODEwXHVjNzc0IFMsIFcsIEIgXHVjOTExIFx1YzViNFx1YjI5MCBcdWM5ZDFcdWQ1NjlcdWM1ZDAgXHVjMThkXHVkNTc0XHVjNzg4XHViMjk0XHVjOWMwXHViOTdjIFx1YjA5OFx1ZDBjMFx1YjBiOFx1YjJlNC4gV1x1YjI5NCBcdWJjMThcdWI0ZGNcdWMyZGMgU1x1Yzc1OCBcdWM2N2NcdWNhYmRcdWM1ZDAgXHVjODc0XHVjN2FjXHVkNTVjXHViMmU0LiBcdWM3OThcdWJhYmJcdWI0MWMgXHVjNzg1XHViODI1XHVjNzc0IFx1YzhmY1x1YzViNFx1YzljMFx1YzljMFx1YjI5NCBcdWM1NGFcdWIyOTRcdWIyZTRcdWFjZTAgXHVhYzAwXHVjODE1XHVkNTc0XHViM2M0IFx1Yzg4Ylx1YjJlNC4gXHViYWE4XHViNGUwIFx1YmIzOFx1Yzc5MFx1YjI5NCBcdWJkOTlcdWM1YjRcdWMxMWMgXHVjNzg1XHViODI1XHViNDFjXHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM3ODVcdWI4MjVcdWM3NTggXHViOWM4XHVjOWMwXHViOWM5IFx1YzkwNFx1YzVkMFx1YjI5NCAwXHVjNzc0IFx1YjQ1MCBcdWFjMWMgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPlx1Y2NhYlx1YzlmOCBcdWM5MDRcdWM1ZDAgU1x1Yzc1OCBcdWNkNWNcdWMxOGMgXHVkMDZjXHVhZTMwXHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwicHJvYmxlbV9sYW5nX2NvZGUiOiJcdWQ1NWNcdWFkNmRcdWM1YjQifSx7InByb2JsZW1faWQiOiIyMjg4IiwicHJvYmxlbV9sYW5nIjoiMSIsInRpdGxlIjoiVGhlIFNlcGFyYXRvciBpbiBHcmlkIiwiZGVzY3JpcHRpb24iOiI8cD5HaXZlbiBhIGNvbm5lY3RlZCwgdW5kaXJlY3RlZCBncmFwaCBHID0gKFYsIEUpLCB3aGVyZSBWIGlzIHRoZSB2ZXJ0ZXggc2V0IGNvbnNpc3RpbmcgYSBjb2xsZWN0aW9uIG9mIG5vZGVzLCBhbmQgRSBpcyB0aGUgc2V0IG9mIGVkZ2VzLCBlYWNoIG9mIHdoaWNoIGNvbm5lY3RzIHR3byBub2RlcyBmcm9tIFYuIEEgdmVydGV4IHN1YnNldCBTIGlzIGEgc2VwYXJhdG9yIGlmIHRoZSBzdWJncmFwaCBpbmR1Y2VkIGJ5IHRoZSB2ZXJ0aWNlcyBpbiBWLCBidXQgbm90IGluIFMsIGhhcyB0d28gY29ubmVjdGVkIGNvbXBvbmVudHMuIFdlIHNoYWxsIHVzZSB0aGUgbm90YXRpb24gW1MsIFcsIEJdIHRvIHJlcHJlc2VudCB0aGUgcGFydGl0aW9uLCB3aGVyZSB0aGUgcmVtb3ZhbCBvZiB0aGUgc2VwYXJhdG9yIFMgd2lsbCBnaXZlIHR3byBjb25uZWN0ZWQgY29tcG9uZW50cyBXIGFuZCBCLiZuYnNwOzxcL3A+XHJcblxyXG5cclxuXHJcbjx0YWJsZSBjbGFzcz1cInRhYmxlXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+XHJcblx0PHRib2R5PlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGQgc3R5bGU9XCJ3aWR0aDo1MCVcIj48aW1nIGFsdD1cIlwiIHNyYz1cIlwvSnVkZ2VPbmxpbmVcL3VwbG9hZFwvMjAxMDA5XC8xLlBOR1wiIHN0eWxlPVwiaGVpZ2h0OjM1MnB4OyBvcGFjaXR5OjAuOTsgd2lkdGg6MzQ5cHhcIiBcLz48XC90ZD5cclxuXHRcdFx0PHRkIHN0eWxlPVwid2lkdGg6NTAlXCI+PGltZyBhbHQ9XCJcIiBzcmM9XCJcL0p1ZGdlT25saW5lXC91cGxvYWRcLzIwMTAwOVwvMi5QTkdcIiBzdHlsZT1cImhlaWdodDozNTJweDsgb3BhY2l0eTowLjk7IHdpZHRoOjM0OXB4XCIgXC8+PFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRkPkZpZ3VyZS0xLiBQYXJ0aXRpb24gKFMsVyxCKTxcL3RkPlxyXG5cdFx0XHQ8dGQ+RmlndXJlLTIuIE5ldyBQYXJ0aXRpb248XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdDxcL3Rib2R5PlxyXG48XC90YWJsZT5cclxuXHJcbjxwPkluIHRoaXMgcHJvYmxlbSwgd2UgY29uc2lkZXIgdGhlIHNlcGFyYXRvcnMgaW4gZ3JpZHMuIEVhY2ggbm9kZSBpbiBhIGdyaWQgaXMgY29ubmVjdGVkIHRvIGl0cyBlaWdodCBuZWlnaGJvcnMgKGlmIHRoZXkgZXhpc3QpLiBJbiBGaWd1cmUtMSwgd2UgaWxsdXN0cmF0ZSBhIHBhcnRpdGlvbiBvZiBhIDYqNiBncmlkIHdpdGggYSA5LXBvaW50IHNlcGFyYXRvciAoZ3JheSBub2RlcyBpbiB0aGUgZmlndXJlKS4gVGhlIG5vZGVzIG9uIHRoZSBsZWZ0IG9mIHRoZSBzZXBhcmF0b3IgYXJlIGluIHNldCBXICh3aGl0ZSBub2RlcyksIGFuZCB0aGUgbm9kZXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBzZXBhcmF0b3IgYXJlIGluIHNldCBCIChibGFjayBub2RlcykuJm5ic3A7PFwvcD5cclxuXHJcbjxwPlRvIHNpbXBsaWZ5IHRoZSBwcm9ibGVtLCB5b3UgY2FuIGFzc3VtZSB0aGF0IGFsbCB0aGUgc2VwYXJhdG9ycyByZWZlcnJlZCBpbiB0aGlzIHByb2JsZW0gc2F0aXNmeSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczombmJzcDs8XC9wPlxyXG5cclxuPG9sPlxyXG5cdDxsaT5JdCZyc3F1bztzIGEgbWluaW1hbCBzZXBhcmF0b3IuIEEgc2VwYXJhdG9yIGlzIG1pbmltYWwgaWYgbm8gc3Vic2V0IG9mIGl0IGZvcm1zIGEgc2VwYXJhdG9yLiZuYnNwOzxcL2xpPlxyXG5cdDxsaT5JdCBiZWdpbnMgZnJvbSBhIG5vZGUgb24gdGhlIHRvcCBsaW5lIG9mIHRoZSBncmlkLCBleGNlcHQgdGhlIGNvcm5lciAoaS5lLiAzMCBhbmQgMzUgaW4gdGhlIGZpZ3VyZXMpLCBhbmQgZW5kcyB3aXRoIGEgbm9kZSBvbiB0aGUgYm90dG9tIGxpbmUgb2YgdGhlIGdyaWQsIGFsc28gZXhjZXB0IHRoZSBjb3JuZXIgKGkuZS4gMCBhbmQgNSBpbiB0aGUgZmlndXJlcykuPFwvbGk+XHJcblx0PGxpPk9uIGl0cyB3YXkgZnJvbSB0b3AgdG8gYm90dG9tLCBpdCBjYW4gZ28gbGVmdCwgcmlnaHQgb3IgZG93biwgYnV0IG5ldmVyIGdvIHVwLiZuYnNwOzxcL2xpPlxyXG48XC9vbD5cclxuXHJcbjxwPk5vdyB3ZSBkZXNjcmliZSBhIG1ldGhvZCB0byBpbXByb3ZlIGEgZ2l2ZW4gcGFydGl0aW9uIG9uIGEgZ3JpZCwgdGhyb3VnaCB3aGljaCB3ZSBjYW4gcmVkdWNlIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIHNlcGFyYXRvci4gVGhpcyBtZXRob2QgY29udGFpbnMgdHdvIHN0ZXBzOiZuYnNwOzxcL3A+XHJcblxyXG48b2w+XHJcblx0PGxpPlNlbGVjdCBzZXZlcmFsIG5vZGVzIGZyb20gQiBhbmQgYWRkIHRoZW0gaW50byBTLiBBbnkgb2YgdGhlIHNlbGVjdGVkIG5vZGVzIG11c3QgaGF2ZSBhIGxlZnQgbmVpZ2hib3Igd2hpY2ggaXMgaW4gUy4mbmJzcDs8XC9saT5cclxuXHQ8bGk+UmVtb3ZlIHNldmVyYWwgbm9kZXMgZnJvbSBTIChleGNsdWRpbmcgdGhlIG5vZGVzIGFkZGVkIGluIHRoZSBmb3JtZXIgc3RlcCksIGFuZCBhZGQgdGhlbSBpbnRvIFcuJm5ic3A7PFwvbGk+XHJcbjxcL29sPlxyXG5cclxuPHA+QWZ0ZXIgdGhlIGltcHJvdmVtZW50LCB3ZSBzaG91bGQgZW5zdXJlIFMgaXMgc3RpbGwgYSBzZXBhcmF0b3IsIGFuZCBtYWtlIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gUyBhcyBzbWFsbCBhcyBwb3NzaWJsZS4gQXMgZm9yIEZpZ3VyZS0xLCB3ZSBzaG91bGQgYWRkIDE0IGFuZCAyMCBpbnRvIFMsIGFuZCByZW1vdmUgNywgMTMsIDE5IGFuZCAyNSBmcm9tIFMuIEFmdGVyIHRoYXQsIHdlIG9idGFpbiBhIG5ldyBwYXJ0aXRpb24gd2l0aCBhIDctcG9pbnQgc2VwYXJhdG9yIHNob3duIGluIEZpZ3VyZS0yLiZuYnNwOzxcL3A+XHJcblxyXG48cD5Zb3VyIHRhc2sgaXMsIGdpdmVuIGEgcGFydGl0aW9uIG9uIGEgZ3JpZCwgdG8gZGV0ZXJtaW5lIHRoZSBsZWFzdCBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgaW1wcm92ZW1lbnQuJm5ic3A7PFwvcD5cclxuIiwiaW5wdXQiOiI8cD5UaGVyZSBhcmUgc2V2ZXJhbCB0ZXN0IGNhc2VzLiBFYWNoIGNhc2UgYmVnaW5zIHdpdGggYSBsaW5lIGNvbnRhaW5pbmcgdHdvIGludGVnZXJzLCBOIGFuZCBNICgzICZsZTsgTSwgTiAmbGU7Jm5ic3A7MjAwKS4gSW4gZWFjaCBvZiB0aGUgZm9sbG93aW5nIE4gbGluZXMsIHRoZXJlIGFyZSBNIGNoYXJhY3RlcnMsIGRlc2NyaWJpbmcgdGhlIGluaXRpYWwgcGFydGl0aW9uIG9mIHRoZSBNKk4gZ3JpZC4gRXZlcnkgY2hhcmFjdGVyIGlzICYjMzk7UyYjMzk7LCAmIzM5O1cmIzM5OyBvciAmIzM5O0ImIzM5Oy4gSXQgaXMgY29uZmlybWVkIHRoYXQgZWFjaCBvZiB0aGVzZSB0aHJlZSBjaGFyYWN0ZXJzIGFwcGVhcnMgYXQgbGVhc3Qgb25jZSBpbiBlYWNoIGxpbmUsIGFuZCAmIzM5O1cmIzM5O3MgYXJlIGFsd2F5cyBvbiB0aGUgbGVmdCBvZiAmIzM5O1MmIzM5O3MuJm5ic3A7PFwvcD5cclxuXHJcbjxwPkEgdGVzdCBjYXNlIG9mIE4gPSAwIGFuZCBNID0gMCBpbmRpY2F0ZXMgdGhlIGVuZCBvZiBpbnB1dCwgYW5kIHNob3VsZCBub3QgYmUgcHJvY2Vzc2VkLiZuYnNwOzxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPkZvciBlYWNoIHRlc3QgY2FzZSwgeW91IHNob3VsZCBvdXRwdXQgb25lIGxpbmUgY29udGFpbmluZyBvbmUgaW50ZWdlciwgd2hpY2ggaXMgdGhlIGxlYXN0IG51bWJlciBvZiBub2RlcyBpbiB0aGUgc2VwYXJhdG9yIGFmdGVyIHRoZSBpbXByb3ZlbWVudC48XC9wPlxyXG5cclxuPHA+Jm5ic3A7PFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMSIsInByb2JsZW1fbGFuZ19jb2RlIjoiXHVjNjAxXHVjNWI0In1d