시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 28 12 11 40.741%

문제

격자점은 좌표가 정수인 점을 뜻한다.격자 다각형은 모든 꼭짓점이 격자점인 다각형이다.

다각형의 경계에 있는 격자점을 경계점이라 한다. (위 그림에서 열린 점) 또한 다각형 위에 있지 않은 내부의 격자점을 내부점이라 한다. (위 그림에서 닫힌 점)

다각형의 내부에 있는 어떠한 두 점을 골라 만든 선분이 모두 다각형의 내부 또는 경계에 있다면 그 다각형을 볼록하다고 한다. 즉, 내각의 크기가 모두 180도보다 작다. 다각형 내부(경계 위의 점은 제외한다)에 있는 두 점 사이의 모든 선분도 다각형의 내부에 완벽하게 들어간다.

볼록 격자 다각형의 내부점 중 수평선 상의 점에는 가장 왼쪽 점과 가장 오른쪽 점이 존재한다. (가장 왼쪽 점과 가장 오른쪽 점이 같을 수 있다) 아래 그림 A처럼 내부점이 없거나, B처럼 하나뿐인 경우가 있을 수도 있다. 그림 C의 경우 아래 그림과 같다.

볼록 격자 다각형을 아래와 같은 순서로 입력 받아, 수평선을 이루는 내부점을 모두 출력하는 프로그램을 작성하시오.

1. 첫 번째 점은 y값이 가장 큰 점이다. 만약 y값이 같은 점이 있다면 x값이 작은 순으로 주어진다.

2. 점은 시계방향으로 주어진다.

입력

입력의 첫 줄에는 테스트의 개수 P(1 ≤ P ≤ 1000)가 주어진다.

각각의 테스트 첫 줄에는 다각형 점의 개수를 나타내는 정수 N(3 ≤ N ≤ 50)이 주어진다. 나머지 줄에는 위에 설명된 순서대로 점의 x좌표와 y좌표를 나타내는 정수 두 개가 공백을 사이에 두고 주어진다.

출력

첫 줄에는 수평선의 개수를 출력한다. 만약, 수평선이 하나 이상 있다면, 수평선의 y 좌표 값을 한 줄에 하나씩 출력한다. 이때 y좌표 내림차순으로 출력한다. 각각의 y좌표 값 뒤에 공백을 사이에 두고 가장 왼쪽 x좌표와 가장 오른쪽 x좌표를 출력한다.

예제 입력 1

6
8
5 10
8 9
11 6
10 2
6 0
1 1
0 4
2 8
4
3 10
13 7
10 -3
0 0
3
1 3
3 1
1 1
3
1 4
4 1
1 1
4
0 6
2 3
3 0
1 3
6
1 3
3 3
4 2
3 1
1 1
0 2

예제 출력 1

9
9 4 7
8 3 8
7 2 9
6 2 10
5 1 10
4 1 10
3 1 10
2 1 9
1 2 7
12
9 3 6
8 3 9
7 3 12
6 2 12
5 2 12
4 2 12
3 1 11
2 1 11
1 1 11
0 1 10
-1 4 10
-2 7 10
0
1
2 2 2
2
4 1 1
2 2 2
1
2 1 3
W3sicHJvYmxlbV9pZCI6IjI3MDAiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWJjZmNcdWI4NWQgXHVhY2E5XHVjNzkwIFx1YjJlNFx1YWMwMVx1ZDYxNVx1Yzc1OCBcdWIwYjRcdWJkODBcdWM4MTAiLCJkZXNjcmlwdGlvbiI6IjxwPlxyXG5cdFx1YWNhOVx1Yzc5MFx1YzgxMFx1Yzc0MCBcdWM4OGNcdWQ0NWNcdWFjMDAgXHVjODE1XHVjMjE4XHVjNzc4IFx1YzgxMFx1Yzc0NCBcdWI3M2JcdWQ1NWNcdWIyZTQuXHVhY2E5XHVjNzkwIFx1YjJlNFx1YWMwMVx1ZDYxNVx1Yzc0MCBcdWJhYThcdWI0ZTAgXHVhZjJkXHVjOWQzXHVjODEwXHVjNzc0IFx1YWNhOVx1Yzc5MFx1YzgxMFx1Yzc3OCBcdWIyZTRcdWFjMDFcdWQ2MTVcdWM3NzRcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlxyXG5cdDxpbWcgYWx0PVwiXCIgc3JjPVwiXC91cGxvYWRcL2ltYWdlc1wvcDFwMS5wbmdcIiBzdHlsZT1cIndpZHRoOiA1MDJweDsgaGVpZ2h0OiAyMjVweDtcIiBcLz48XC9wPlxyXG5cclxuPHA+XHJcblx0XHViMmU0XHVhYzAxXHVkNjE1XHVjNzU4IFx1YWNiZFx1YWNjNFx1YzVkMCBcdWM3ODhcdWIyOTQgXHVhY2E5XHVjNzkwXHVjODEwXHVjNzQ0IFx1YWNiZFx1YWNjNFx1YzgxMFx1Yzc3NFx1Yjc3YyBcdWQ1NWNcdWIyZTQuIChcdWM3MDQgXHVhZGY4XHViOWJjXHVjNWQwXHVjMTFjIFx1YzVmNFx1YjliMCBcdWM4MTApIFx1YjYxMFx1ZDU1YyBcdWIyZTRcdWFjMDFcdWQ2MTUgXHVjNzA0XHVjNWQwIFx1Yzc4OFx1YzljMCBcdWM1NGFcdWM3NDAgXHViMGI0XHViZDgwXHVjNzU4IFx1YWNhOVx1Yzc5MFx1YzgxMFx1Yzc0NCBcdWIwYjRcdWJkODBcdWM4MTBcdWM3NzRcdWI3N2MgXHVkNTVjXHViMmU0LiAoXHVjNzA0IFx1YWRmOFx1YjliY1x1YzVkMFx1YzExYyBcdWIyZWJcdWQ3OGMgXHVjODEwKTxcL3A+XHJcblxyXG48cD5cclxuXHRcdWIyZTRcdWFjMDFcdWQ2MTVcdWM3NTggXHViMGI0XHViZDgwXHVjNWQwIFx1Yzc4OFx1YjI5NCBcdWM1YjRcdWI1YTBcdWQ1NWMgXHViNDUwIFx1YzgxMFx1Yzc0NCBcdWFjZThcdWI3N2MgXHViOWNjXHViNGUwIFx1YzEyMFx1YmQ4NFx1Yzc3NCBcdWJhYThcdWI0NTAgXHViMmU0XHVhYzAxXHVkNjE1XHVjNzU4IFx1YjBiNFx1YmQ4MCBcdWI2MTBcdWIyOTQgXHVhY2JkXHVhY2M0XHVjNWQwIFx1Yzc4OFx1YjJlNFx1YmE3NCBcdWFkZjggXHViMmU0XHVhYzAxXHVkNjE1XHVjNzQ0IFx1YmNmY1x1Yjg1ZFx1ZDU1OFx1YjJlNFx1YWNlMCBcdWQ1NWNcdWIyZTQuIFx1Yzk4OSwgXHViMGI0XHVhYzAxXHVjNzU4IFx1ZDA2Y1x1YWUzMFx1YWMwMCBcdWJhYThcdWI0NTAgMTgwXHViM2M0XHViY2Y0XHViMmU0IFx1Yzc5MVx1YjJlNC4gXHViMmU0XHVhYzAxXHVkNjE1IFx1YjBiNFx1YmQ4MChcdWFjYmRcdWFjYzQgXHVjNzA0XHVjNzU4IFx1YzgxMFx1Yzc0MCBcdWM4MWNcdWM2NzhcdWQ1NWNcdWIyZTQpXHVjNWQwIFx1Yzc4OFx1YjI5NCBcdWI0NTAgXHVjODEwIFx1YzBhY1x1Yzc3NFx1Yzc1OCBcdWJhYThcdWI0ZTAgXHVjMTIwXHViZDg0XHViM2M0IFx1YjJlNFx1YWMwMVx1ZDYxNVx1Yzc1OCBcdWIwYjRcdWJkODBcdWM1ZDAgXHVjNjQ0XHViY2JkXHVkNTU4XHVhYzhjIFx1YjRlNFx1YzViNFx1YWMwNFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHJcblx0XHViY2ZjXHViODVkIFx1YWNhOVx1Yzc5MCBcdWIyZTRcdWFjMDFcdWQ2MTVcdWM3NTggXHViMGI0XHViZDgwXHVjODEwIFx1YzkxMSBcdWMyMThcdWQzYzlcdWMxMjAgXHVjMGMxXHVjNzU4IFx1YzgxMFx1YzVkMFx1YjI5NCBcdWFjMDBcdWM3YTUgXHVjNjdjXHVjYWJkIFx1YzgxMFx1YWNmYyBcdWFjMDBcdWM3YTUgXHVjNjI0XHViOTc4XHVjYWJkIFx1YzgxMFx1Yzc3NCBcdWM4NzRcdWM3YWNcdWQ1NWNcdWIyZTQuIChcdWFjMDBcdWM3YTUgXHVjNjdjXHVjYWJkIFx1YzgxMFx1YWNmYyBcdWFjMDBcdWM3YTUgXHVjNjI0XHViOTc4XHVjYWJkIFx1YzgxMFx1Yzc3NCBcdWFjMTlcdWM3NDQgXHVjMjE4IFx1Yzc4OFx1YjJlNCkgXHVjNTQ0XHViNzk4IFx1YWRmOFx1YjliYyBBXHVjYzk4XHViN2ZjIFx1YjBiNFx1YmQ4MFx1YzgxMFx1Yzc3NCBcdWM1YzZcdWFjNzBcdWIwOTgsIEJcdWNjOThcdWI3ZmMgXHVkNTU4XHViMDk4XHViZmQwXHVjNzc4IFx1YWNiZFx1YzZiMFx1YWMwMCBcdWM3ODhcdWM3NDQgXHVjMjE4XHViM2M0IFx1Yzc4OFx1YjJlNC4gXHVhZGY4XHViOWJjIENcdWM3NTggXHVhY2JkXHVjNmIwIFx1YzU0NFx1Yjc5OCBcdWFkZjhcdWI5YmNcdWFjZmMgXHVhYzE5XHViMmU0LjxcL3A+XHJcblxyXG48cD5cclxuXHQ8aW1nIGFsdD1cIlwiIHNyYz1cIlwvdXBsb2FkXC9pbWFnZXNcL3AycDIucG5nXCIgc3R5bGU9XCJ3aWR0aDogNDYwcHg7IGhlaWdodDogMTU4cHg7XCIgXC8+PFwvcD5cclxuXHJcbjxwPlxyXG5cdFx1YmNmY1x1Yjg1ZCBcdWFjYTlcdWM3OTAgXHViMmU0XHVhYzAxXHVkNjE1XHVjNzQ0IFx1YzU0NFx1Yjc5OFx1YzY0MCBcdWFjMTlcdWM3NDAgXHVjMjFjXHVjMTFjXHViODVjIFx1Yzc4NVx1YjgyNSBcdWJjMWJcdWM1NDQsIFx1YzIxOFx1ZDNjOVx1YzEyMFx1Yzc0NCBcdWM3NzRcdWI4ZThcdWIyOTQgXHViMGI0XHViZDgwXHVjODEwXHVjNzQ0IFx1YmFhOFx1YjQ1MCBcdWNkOWNcdWI4MjVcdWQ1NThcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU1OFx1YzJkY1x1YzYyNC48XC9wPlxyXG5cclxuPHA+XHJcblx0MS4gXHVjY2FiIFx1YmM4OFx1YzlmOCBcdWM4MTBcdWM3NDAgeVx1YWMxMlx1Yzc3NCBcdWFjMDBcdWM3YTUgXHVkMDcwIFx1YzgxMFx1Yzc3NFx1YjJlNC4gXHViOWNjXHVjNTdkIHlcdWFjMTJcdWM3NzQgXHVhYzE5XHVjNzQwIFx1YzgxMFx1Yzc3NCBcdWM3ODhcdWIyZTRcdWJhNzQgeFx1YWMxMlx1Yzc3NCBcdWM3OTFcdWM3NDAgXHVjMjFjXHVjNzNjXHViODVjIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC48XC9wPlxyXG48cD5cclxuXHQyLiBcdWM4MTBcdWM3NDAgXHVjMmRjXHVhY2M0XHViYzI5XHVkNWE1XHVjNzNjXHViODVjIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlxyXG5cdFx1Yzc4NVx1YjgyNVx1Yzc1OCBcdWNjYWIgXHVjOTA0XHVjNWQwXHViMjk0IFx1ZDE0Y1x1YzJhNFx1ZDJiOFx1Yzc1OCBcdWFjMWNcdWMyMTggUCgxICZsZTsgUCAmbGU7IDEwMDApXHVhYzAwIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHJcblx0XHVhYzAxXHVhYzAxXHVjNzU4IFx1ZDE0Y1x1YzJhNFx1ZDJiOCBcdWNjYWIgXHVjOTA0XHVjNWQwXHViMjk0IFx1YjJlNFx1YWMwMVx1ZDYxNSBcdWM4MTBcdWM3NTggXHVhYzFjXHVjMjE4XHViOTdjIFx1YjA5OFx1ZDBjMFx1YjBiNFx1YjI5NCBcdWM4MTVcdWMyMTggTigzICZsZTsgTiAmbGU7IDUwKVx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIFx1YjA5OFx1YmEzOFx1YzljMCBcdWM5MDRcdWM1ZDBcdWIyOTQgXHVjNzA0XHVjNWQwIFx1YzEyNFx1YmE4NVx1YjQxYyBcdWMyMWNcdWMxMWNcdWIzMDBcdWI4NWMgXHVjODEwXHVjNzU4IHhcdWM4OGNcdWQ0NWNcdWM2NDAgeVx1Yzg4Y1x1ZDQ1Y1x1Yjk3YyBcdWIwOThcdWQwYzBcdWIwYjRcdWIyOTQgXHVjODE1XHVjMjE4IFx1YjQ1MCBcdWFjMWNcdWFjMDAgXHVhY2Y1XHViYzMxXHVjNzQ0IFx1YzBhY1x1Yzc3NFx1YzVkMCBcdWI0NTBcdWFjZTAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPlxyXG5cdFx1Y2NhYiBcdWM5MDRcdWM1ZDBcdWIyOTQgXHVjMjE4XHVkM2M5XHVjMTIwXHVjNzU4IFx1YWMxY1x1YzIxOFx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuIFx1YjljY1x1YzU3ZCwgXHVjMjE4XHVkM2M5XHVjMTIwXHVjNzc0IFx1ZDU1OFx1YjA5OCBcdWM3NzRcdWMwYzEgXHVjNzg4XHViMmU0XHViYTc0LCBcdWMyMThcdWQzYzlcdWMxMjBcdWM3NTggeSBcdWM4OGNcdWQ0NWMgXHVhYzEyXHVjNzQ0IFx1ZDU1YyBcdWM5MDRcdWM1ZDAgXHVkNTU4XHViMDk4XHVjNTI5IFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC4gXHVjNzc0XHViNTRjIHlcdWM4OGNcdWQ0NWMgXHViMGI0XHViOWJjXHVjYzI4XHVjMjFjXHVjNzNjXHViODVjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC4gXHVhYzAxXHVhYzAxXHVjNzU4IHlcdWM4OGNcdWQ0NWMgXHVhYzEyIFx1YjRhNFx1YzVkMCBcdWFjZjVcdWJjMzFcdWM3NDQgXHVjMGFjXHVjNzc0XHVjNWQwIFx1YjQ1MFx1YWNlMCBcdWFjMDBcdWM3YTUgXHVjNjdjXHVjYWJkIHhcdWM4OGNcdWQ0NWNcdWM2NDAgXHVhYzAwXHVjN2E1IFx1YzYyNFx1Yjk3OFx1Y2FiZCB4XHVjODhjXHVkNDVjXHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwicHJvYmxlbV9sYW5nX2NvZGUiOiJcdWQ1NWNcdWFkNmRcdWM1YjQifSx7InByb2JsZW1faWQiOiIyNzAwIiwicHJvYmxlbV9sYW5nIjoiMSIsInRpdGxlIjoiSW50ZXJpb3IgUG9pbnRzIG9mIExhdHRpY2UgUG9seWdvbnMiLCJkZXNjcmlwdGlvbiI6IjxwPkEgbGF0dGljZSBwb2ludCBpcyBhIHBvaW50IHdpdGggaW50ZWdlciBjb29yZGluYXRlcy4gQSBsYXR0aWNlIHBvbHlnb24gaXMgYSBwb2x5Z29uIHdpdGggYWxsIHZlcnRpY2VzIGxhdHRpY2UgcG9pbnRzLiZuYnNwOzxcL3A+XHJcblxyXG48cD48aW1nIGFsdD1cIlwiIHNyYz1cIlwvdXBsb2FkXC9pbWFnZXNcL3AxcDEucG5nXCIgc3R5bGU9XCJoZWlnaHQ6MjI1cHg7IG9wYWNpdHk6MC45OyB3aWR0aDo1MDJweFwiIFwvPjxcL3A+XHJcblxyXG48cD5UaGUgbGF0dGljZSBwb2ludHMgb24gdGhlIGJvdW5kYXJ5IG9mIHRoZSBwb2x5Z29uIGFyZSBib3VuZGFyeSBwb2ludHMgKG9wZW4gZG90cyBpbiB0aGUgZmlndXJlIGFib3ZlKSBhbmQgdGhlIHBvaW50cyBpbnNpZGUgYW5kIG5vdCBvbiB0aGUgcG9seWdvbiBhcmUgaW50ZXJpb3IgcG9pbnRzIChmaWxsZWQgaW4gZG90cyBpbiB0aGUgZmlndXJlIGFib3ZlKS4mbmJzcDs8XC9wPlxyXG5cclxuPHA+QSBwb2x5Z29uIGlzIGNvbnZleCBpZiBhbnkgbGluZSBzZWdtZW50IGJldHdlZW4gdHdvIHBvaW50cyBvZiB0aGUgcG9seWdvbiBpcyBpbnNpZGUgKG9yIG9uIHRoZSBib3VuZGFyeSBvZikgdGhlIHBvbHlnb24uIEVxdWl2YWxlbnRseSwgdGhlIGludGVyaW9yIGFuZ2xlIGF0IGVhY2ggcG9seWdvbiB2ZXJ0ZXggaXMgbGVzcyB0aGFuIDE4MCBkZWdyZWVzLiBOb3RlIHRoYXQgYW55IGxpbmUgYmV0d2VlbiB0d28gcG9pbnRzIGluc2lkZSAoYW5kIG5vdCBvbiB0aGUgYm91bmRhcnkgb2YpIHRoZSBwb2x5Z29uIGlzIGVudGlyZWx5IGluc2lkZSAoYW5kIG5vdCBvbiB0aGUgYm91bmRhcnkgb2YpIHRoZSBwb2x5Z29uLjxcL3A+XHJcblxyXG48cD5UaGUgaW50ZXJpb3IgcG9pbnRzIG9mIGEgY29udmV4IGxhdHRpY2UgcG9seWdvbiBvbiBhbnkgaG9yaXpvbnRhbCBsaW5lIGZvcm0gYSBzaW5nbGUgc2VnbWVudCBmcm9tIGEgbGVmdG1vc3QgcG9pbnQgdG8gYSByaWdodG1vc3QgcG9pbnQgKHdoaWNoIG1heSBiZSB0aGUgc2FtZSkuIE5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgbm8gaW50ZXJpb3IgcG9pbnRzIChBKSwgb3Igb25seSBvbmUgKEIpLCBvciBpc29sYXRlZCBwb2ludHMgKEMpIGFzIHNob3duIGluIHRoZSBmaWd1cmVzIGJlbG93LiZuYnNwOzxcL3A+XHJcblxyXG48cD48aW1nIGFsdD1cIlwiIHNyYz1cIlwvdXBsb2FkXC9pbWFnZXNcL3AycDIucG5nXCIgc3R5bGU9XCJoZWlnaHQ6MTU4cHg7IHdpZHRoOjQ2MHB4XCIgXC8+PFwvcD5cclxuXHJcbjxwPldyaXRlIGEgcHJvZ3JhbSB0aGF0IHJlYWRzIHRoZSB2ZXJ0aWNlcyBvZiBhIGNvbnZleCBsYXR0aWNlIHBvbHlnb24gaW4gc3RhbmRhcmQgb3JkZXIgYW5kIG91dHB1dHMgdGhlIGludGVyaW9yIHBvaW50cyBhcyBhIGxpc3Qgb2YgaG9yaXpvbnRhbCBsaW5lIHNlZ21lbnRzLiBUaGUgdmVydGljZXMgb2YgYSBsYXR0aWNlIHBvbHlnb24gYXJlIGluIHN0YW5kYXJkIG9yZGVyIGlmOiZuYnNwOzxcL3A+XHJcblxyXG48cD5UaGUgZmlyc3QgdmVydGV4IGlzIHRoZSBvbmUgd2l0aCB0aGUgbGFyZ2VzdCB5IHZhbHVlLiBJZiB0d28gdmVydGljZXMgaGF2ZSB0aGUgc2FtZSB5IHZhbHVlLCB0aGUgb25lIHdpdGggdGhlIHNtYWxsZXIgeCB2YWx1ZSBpcyB0aGUgZmlyc3QuJm5ic3A7PGJyIFwvPlxyXG5WZXJ0aWNlcyBhcmUgZ2l2ZW4gaW4gY2xvY2t3aXNlIG9yZGVyIGFyb3VuZCB0aGUgcG9seWdvbi48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlRoZSBmaXJzdCBsaW5lIG9mIGlucHV0IGNvbnRhaW5zIGEgc2luZ2xlIGludGVnZXIgUCwgKDEgJmxlOyBQICZsZTsgMTAwMCksIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgZGF0YSBzZXRzIHRoYXQgZm9sbG93LiBUaGUgZmlyc3QgbGluZSBvZiBlYWNoIGRhdGEgc2V0IGNvbnRhaW5zIHRoZSBkYXRhIHNldCBudW1iZXIsIGZvbGxvd2VkIGJ5IGEgc3BhY2UsIGZvbGxvd2VkIGJ5IGEgZGVjaW1hbCBpbnRlZ2VyIGdpdmluZyB0aGUgbnVtYmVyIHZlcnRpY2VzIE4sICgzICZsZTsgTiAmbGU7IDUwKSwgb2YgdGhlIHBvbHlnb24uIFRoZSByZW1haW5pbmcgbGluZXMgaW4gdGhlIGRhdGEgc2V0IGNvbnRhaW4gdGhlIHZlcnRpY2VzLCBvbmUgcGVyIGxpbmUgaW4gc3RhbmRhcmQgb3JkZXIuIEVhY2ggbGluZSBjb250YWlucyB0aGUgZGVjaW1hbCBpbnRlZ2VyIHggY29vcmRpbmF0ZSwgYSBzcGFjZSBhbmQgdGhlIGRlY2ltYWwgaW50ZWdlciB5IGNvb3JkaW5hdGUuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+Rm9yIGVhY2ggZGF0YSBzZXQgdGhlcmUgYXJlIG11bHRpcGxlIGxpbmVzIG9mIG91dHB1dC4gVGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYSBkZWNpbWFsIGludGVnZXIgZ2l2aW5nIHRoZSBkYXRhIHNldCBudW1iZXIgZm9sbG93ZWQgYnkgYSBzaW5nbGUgc3BhY2UsIGZvbGxvd2VkIGJ5IGEgZGVjaW1hbCBpbnRlZ2VyIGdpdmluZyB0aGUgbnVtYmVyIG9mIGhvcml6b250YWwgbGluZXMgd2hpY2ggY29udGFpbiBpbnRlcmlvciBwb2ludHMgKHRoaXMgbWF5IGJlIHplcm8gKDApIG9yIG1vcmUpLiBUaGUgbGluZXMgb2YgaW50ZXJpb3IgcG9pbnRzLCBpZiBhbnksIGZvbGxvdywgb25lIHBlciBsaW5lIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgeSB2YWx1ZS4gRWFjaCBsaW5lIGNvbnRhaW5zIHRoZSBkZWNpbWFsIGludGVnZXIgeSBjb29yZGluYXRlLCBhIHNpbmdsZSBzcGFjZSBhbmQgdGhlIGRlY2ltYWwgaW50ZWdlciB4IGNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgbW9zdCBwb2ludCwgYSBzaW5nbGUgc3BhY2UgYW5kIHRoZSBkZWNpbWFsIGludGVnZXIgeCBjb29yZGluYXRlIG9mIHRoZSByaWdodCBtb3N0IHBvaW50LjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjEiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1YzYwMVx1YzViNCJ9XQ==