시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 (추가 시간 없음) 256 MB217322620.800%

문제

어피치는 전설 속의 보물을 찾기 위해 여행을 떠났고, 여러 관문을 돌파한 끝에 보물이 들어 있으리라 추정되는 상자를 찾았다. 하지만 그 상자는 잠금이 걸려 있었고, 거기에는 “상자를 열려면 상자 아래의 글자들을 잘 바꾸어 앞으로 읽으나 뒤로 읽으나 똑같아지도록 하라”라는 글귀가 쓰여 있었다.

상자 근처를 탐색해 보니 상자 아래에 알파벳이 쓰여 있는 석판 여러 장이 일렬로 놓여 있었다. 또한 상자의 주위에는 알파벳이 쓰여 있는 석판이 매우 많이 있었다. 아무래도 석판들을 잘 교체하여 상자 아래 일렬로 놓인 석판들을 회문(앞에서 뒤로 읽으나 뒤에서 앞으로 읽으나 똑같은 낱말이나 숫자 또는 문장)으로 만들면 상자가 열리는 듯하다. 어피치는 체력이 얼마 없기 때문에, 소모하는 체력을 최소로 하여 보물을 얻고자 한다. 각 석판은 교체하는 데 소모되는 체력이 다르다. 또한, 한 번 이동하는 데 c 만큼 체력이 소모된다. 즉, 이전 위치가 i 번째 석판이었는데 이번에 j 번째 석판을 교체하고자 한다면 그 위치까지 이동하는 동안 c * |j - i| 의 체력이 소모된다. N 개의 석판에 대해, 각각의 석판이 있는 위치에서 시작할 때 보물을 얻기 위해 소모되는 최소 체력을 구하시오.

입력

첫 줄에 테스트 케이스의 개수 T 가 주어진다. (1 ≤ T ≤ 100,000)

다음 줄부터 T 개의 테스트 케이스가 다음과 같은 형식으로 주어진다.

첫째 줄에 상자 아래 석판의 개수 N(1 ≤ N ≤ 1,000,000)과 한 칸 이동할 때 소모되는 체력 c 가 주어진다. (1 ≤ c ≤ 109)

둘째 줄에 길이 N 인 문자열이 주어진다. 문자열의 i 번째 문자는 i 번째 석판에 쓰여 있는 문자를 나타낸다. 각 문자는 알파벳 대문자이다.

셋째 줄에는 N 개의 수가 주어진다. i 번째 수는 i 번째 석판을 교체하는 데 소모되는 체력을 나타낸다. 하나의 석판을 교체할 때 소모되는 체력은 1 이상 109 이하이다.

주어지는 모든 N 의 합은 1,000,000을 초과하지 않는다.

출력

각 테스트 케이스에 대해, 각 석판이 있는 위치에서 시작했을 때 어피치가 소모해야 하는 최소 체력을 공백을 사이에 두고 한 줄로 출력한다.

예제 입력 1

2
5 1
ABCDE
7 1 4 5 1
5 1
ABCDA
7 1 4 5 1

예제 출력 1

6 5 6 6 5
2 1 2 3 4

첫 번째 테스트 케이스에 대해, 시작 위치가 첫 번째 석판일 때 최적의 방법 중 하나는 오른쪽으로 1칸 이동하여 B를 D로 바꾼 후, 3칸 이동하여 E를 A로 바꾸는 것이다.

W3sicHJvYmxlbV9pZCI6IjE2MDAxIiwicHJvYmxlbV9sYW5nIjoiMCIsInRpdGxlIjoiXHViY2Y0XHViYjNjIFx1YzBjMVx1Yzc5MCBcdWM1ZjRcdWFlMzAiLCJkZXNjcmlwdGlvbiI6IjxwPlx1YzViNFx1ZDUzY1x1Y2U1OFx1YjI5NCBcdWM4MDRcdWMxMjQgXHVjMThkXHVjNzU4IFx1YmNmNFx1YmIzY1x1Yzc0NCBcdWNjM2VcdWFlMzAgXHVjNzA0XHVkNTc0IFx1YzVlY1x1ZDU4OVx1Yzc0NCBcdWI1YTBcdWIwYWNcdWFjZTAsIFx1YzVlY1x1YjdlYyBcdWFkMDBcdWJiMzhcdWM3NDQgXHViM2NjXHVkMzBjXHVkNTVjIFx1YjA1ZFx1YzVkMCBcdWJjZjRcdWJiM2NcdWM3NzQgXHViNGU0XHVjNWI0IFx1Yzc4OFx1YzczY1x1YjlhY1x1Yjc3YyBcdWNkOTRcdWM4MTVcdWI0MThcdWIyOTQgXHVjMGMxXHVjNzkwXHViOTdjIFx1Y2MzZVx1YzU1OFx1YjJlNC4gXHVkNTU4XHVjOWMwXHViOWNjIFx1YWRmOCBcdWMwYzFcdWM3OTBcdWIyOTQgXHVjN2EwXHVhZTA4XHVjNzc0IFx1YWM3OFx1YjgyNCBcdWM3ODhcdWM1YzhcdWFjZTAsIFx1YWM3MFx1YWUzMFx1YzVkMFx1YjI5NCAmbGRxdW87XHVjMGMxXHVjNzkwXHViOTdjIFx1YzVmNFx1YjgyNFx1YmE3NCBcdWMwYzFcdWM3OTAgXHVjNTQ0XHViNzk4XHVjNzU4IFx1YWUwMFx1Yzc5MFx1YjRlNFx1Yzc0NCBcdWM3OTggXHViYzE0XHVhZmI4XHVjNWI0IFx1YzU1ZVx1YzczY1x1Yjg1YyBcdWM3N2RcdWM3M2NcdWIwOTggXHViNGE0XHViODVjIFx1Yzc3ZFx1YzczY1x1YjA5OCBcdWI2MTFcdWFjMTlcdWM1NDRcdWM5YzBcdWIzYzRcdWI4NWQgXHVkNTU4XHViNzdjJnJkcXVvO1x1Yjc3Y1x1YjI5NCBcdWFlMDBcdWFkYzBcdWFjMDAgXHVjNGYwXHVjNWVjIFx1Yzc4OFx1YzVjOFx1YjJlNC48XC9wPlxyXG5cclxuPHA+PGltZyBhbHQ9XCJcIiBzcmM9XCJodHRwczpcL1wvdXBsb2FkLmFjbWljcGMubmV0XC9lOTY0NDI4NS1mNmEwLTRmOGMtYWZlMC0wZGNkODExMTQ5Y2JcLy1cL3ByZXZpZXdcL1wiIFwvPjxcL3A+XHJcblxyXG48cD5cdWMwYzFcdWM3OTAgXHVhZGZjXHVjYzk4XHViOTdjIFx1ZDBkMFx1YzBjOVx1ZDU3NCBcdWJjZjRcdWIyYzggXHVjMGMxXHVjNzkwIFx1YzU0NFx1Yjc5OFx1YzVkMCBcdWM1NGNcdWQzMGNcdWJjYjNcdWM3NzQgXHVjNGYwXHVjNWVjIFx1Yzc4OFx1YjI5NCBcdWMxMWRcdWQzMTAgXHVjNWVjXHViN2VjIFx1YzdhNVx1Yzc3NCBcdWM3N2NcdWI4MmNcdWI4NWMgXHViMTkzXHVjNWVjIFx1Yzc4OFx1YzVjOFx1YjJlNC4gXHViNjEwXHVkNTVjIFx1YzBjMVx1Yzc5MFx1Yzc1OCBcdWM4ZmNcdWM3MDRcdWM1ZDBcdWIyOTQgXHVjNTRjXHVkMzBjXHViY2IzXHVjNzc0IFx1YzRmMFx1YzVlYyBcdWM3ODhcdWIyOTQgXHVjMTFkXHVkMzEwXHVjNzc0IFx1YjllNFx1YzZiMCBcdWI5Y2VcdWM3NzQgXHVjNzg4XHVjNWM4XHViMmU0LiBcdWM1NDRcdWJiMzRcdWI3OThcdWIzYzQgXHVjMTFkXHVkMzEwXHViNGU0XHVjNzQ0IFx1Yzc5OCBcdWFkNTBcdWNjYjRcdWQ1NThcdWM1ZWMgXHVjMGMxXHVjNzkwIFx1YzU0NFx1Yjc5OCBcdWM3N2NcdWI4MmNcdWI4NWMgXHViMTkzXHVjNzc4IFx1YzExZFx1ZDMxMFx1YjRlNFx1Yzc0NCBcdWQ2OGNcdWJiMzgoXHVjNTVlXHVjNWQwXHVjMTFjIFx1YjRhNFx1Yjg1YyBcdWM3N2RcdWM3M2NcdWIwOTggXHViNGE0XHVjNWQwXHVjMTFjIFx1YzU1ZVx1YzczY1x1Yjg1YyBcdWM3N2RcdWM3M2NcdWIwOTggXHViNjExXHVhYzE5XHVjNzQwIFx1YjBiMVx1YjlkMFx1Yzc3NFx1YjA5OCBcdWMyMmJcdWM3OTAgXHViNjEwXHViMjk0IFx1YmIzOFx1YzdhNSlcdWM3M2NcdWI4NWMgXHViOWNjXHViNGU0XHViYTc0IFx1YzBjMVx1Yzc5MFx1YWMwMCBcdWM1ZjRcdWI5YWNcdWIyOTQgXHViNGVmXHVkNTU4XHViMmU0LiBcdWM1YjRcdWQ1M2NcdWNlNThcdWIyOTQgXHVjY2I0XHViODI1XHVjNzc0IFx1YzViY1x1YjljOCBcdWM1YzZcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwLCBcdWMxOGNcdWJhYThcdWQ1NThcdWIyOTQgXHVjY2I0XHViODI1XHVjNzQ0IFx1Y2Q1Y1x1YzE4Y1x1Yjg1YyBcdWQ1NThcdWM1ZWMgXHViY2Y0XHViYjNjXHVjNzQ0IFx1YzViYlx1YWNlMFx1Yzc5MCBcdWQ1NWNcdWIyZTQuIFx1YWMwMSBcdWMxMWRcdWQzMTBcdWM3NDAgXHVhZDUwXHVjY2I0XHVkNTU4XHViMjk0IFx1YjM3MCBcdWMxOGNcdWJhYThcdWI0MThcdWIyOTQgXHVjY2I0XHViODI1XHVjNzc0IFx1YjJlNFx1Yjk3NFx1YjJlNC4gXHViNjEwXHVkNTVjLCBcdWQ1NWMgXHViYzg4IFx1Yzc3NFx1YjNkOVx1ZDU1OFx1YjI5NCBcdWIzNzAgPGVtPmMgPFwvZW0+XHViOWNjXHVkMDdjIFx1Y2NiNFx1YjgyNVx1Yzc3NCBcdWMxOGNcdWJhYThcdWI0MWNcdWIyZTQuIFx1Yzk4OSwgXHVjNzc0XHVjODA0IFx1YzcwNFx1Y2U1OFx1YWMwMCA8ZW0+aSA8XC9lbT5cdWJjODhcdWM5ZjggXHVjMTFkXHVkMzEwXHVjNzc0XHVjNWM4XHViMjk0XHViMzcwIFx1Yzc3NFx1YmM4OFx1YzVkMCA8ZW0+aiA8XC9lbT5cdWJjODhcdWM5ZjggXHVjMTFkXHVkMzEwXHVjNzQ0IFx1YWQ1MFx1Y2NiNFx1ZDU1OFx1YWNlMFx1Yzc5MCBcdWQ1NWNcdWIyZTRcdWJhNzQgXHVhZGY4IFx1YzcwNFx1Y2U1OFx1YWU0Y1x1YzljMCBcdWM3NzRcdWIzZDlcdWQ1NThcdWIyOTQgXHViM2Q5XHVjNTQ4IDxlbT5jPFwvZW0+ICogfDxlbT5qIDxcL2VtPi0gPGVtPmk8XC9lbT58IFx1Yzc1OCBcdWNjYjRcdWI4MjVcdWM3NzQgXHVjMThjXHViYWE4XHViNDFjXHViMmU0LiA8ZW0+TiA8XC9lbT5cdWFjMWNcdWM3NTggXHVjMTFkXHVkMzEwXHVjNWQwIFx1YjMwMFx1ZDU3NCwgXHVhYzAxXHVhYzAxXHVjNzU4IFx1YzExZFx1ZDMxMFx1Yzc3NCBcdWM3ODhcdWIyOTQgXHVjNzA0XHVjZTU4XHVjNWQwXHVjMTFjIFx1YzJkY1x1Yzc5MVx1ZDU2MCBcdWI1NGMgXHViY2Y0XHViYjNjXHVjNzQ0IFx1YzViYlx1YWUzMCBcdWM3MDRcdWQ1NzQgXHVjMThjXHViYWE4XHViNDE4XHViMjk0IFx1Y2Q1Y1x1YzE4YyBcdWNjYjRcdWI4MjVcdWM3NDQgXHVhZDZjXHVkNTU4XHVjMmRjXHVjNjI0LjxcL3A+XHJcbiIsImlucHV0IjoiPHA+XHVjY2FiIFx1YzkwNFx1YzVkMCBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNzU4IFx1YWMxY1x1YzIxOCA8ZW0+VCA8XC9lbT5cdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiAoMSAmbGU7IDxlbT5UPFwvZW0+ICZsZTsgMTAwLDAwMCk8XC9wPlxyXG5cclxuPHA+XHViMmU0XHVjNzRjIFx1YzkwNFx1YmQ4MFx1ZDEzMCBUIFx1YWMxY1x1Yzc1OCBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVhYzAwIFx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWM3NDAgXHVkNjE1XHVjMmRkXHVjNzNjXHViODVjIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMCBcdWMwYzFcdWM3OTAgXHVjNTQ0XHViNzk4IFx1YzExZFx1ZDMxMFx1Yzc1OCBcdWFjMWNcdWMyMTggPGVtPk48XC9lbT4oMSAmbGU7IDxlbT5OPFwvZW0+ICZsZTsgMSwwMDAsMDAwKVx1YWNmYyBcdWQ1NWMgXHVjZTc4IFx1Yzc3NFx1YjNkOVx1ZDU2MCBcdWI1NGMgXHVjMThjXHViYWE4XHViNDE4XHViMjk0IFx1Y2NiNFx1YjgyNSA8ZW0+YyA8XC9lbT5cdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiAoMSAmbGU7IGMgJmxlOyAxMDxzdXA+OTxcL3N1cD4pPFwvcD5cclxuXHJcbjxwPlx1YjQ1OFx1YzlmOCBcdWM5MDRcdWM1ZDAgXHVhZTM4XHVjNzc0IDxlbT5OIDxcL2VtPlx1Yzc3OCBcdWJiMzhcdWM3OTBcdWM1ZjRcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWJiMzhcdWM3OTBcdWM1ZjRcdWM3NTggPGVtPmkgPFwvZW0+XHViYzg4XHVjOWY4IFx1YmIzOFx1Yzc5MFx1YjI5NCA8ZW0+aSA8XC9lbT5cdWJjODhcdWM5ZjggXHVjMTFkXHVkMzEwXHVjNWQwIFx1YzRmMFx1YzVlYyBcdWM3ODhcdWIyOTQgXHViYjM4XHVjNzkwXHViOTdjIFx1YjA5OFx1ZDBjMFx1YjBiOFx1YjJlNC4gXHVhYzAxIFx1YmIzOFx1Yzc5MFx1YjI5NCBcdWM1NGNcdWQzMGNcdWJjYjMgXHViMzAwXHViYjM4XHVjNzkwXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWMxNGJcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IDxlbT5OIDxcL2VtPlx1YWMxY1x1Yzc1OCBcdWMyMThcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiA8ZW0+aSA8XC9lbT5cdWJjODhcdWM5ZjggXHVjMjE4XHViMjk0IDxlbT5pIDxcL2VtPlx1YmM4OFx1YzlmOCBcdWMxMWRcdWQzMTBcdWM3NDQgXHVhZDUwXHVjY2I0XHVkNTU4XHViMjk0IFx1YjM3MCBcdWMxOGNcdWJhYThcdWI0MThcdWIyOTQgXHVjY2I0XHViODI1XHVjNzQ0IFx1YjA5OFx1ZDBjMFx1YjBiOFx1YjJlNC4gXHVkNTU4XHViMDk4XHVjNzU4IFx1YzExZFx1ZDMxMFx1Yzc0NCBcdWFkNTBcdWNjYjRcdWQ1NjAgXHViNTRjIFx1YzE4Y1x1YmFhOFx1YjQxOFx1YjI5NCBcdWNjYjRcdWI4MjVcdWM3NDAgMSBcdWM3NzRcdWMwYzEgMTA8c3VwPjk8XC9zdXA+IFx1Yzc3NFx1ZDU1OFx1Yzc3NFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjOGZjXHVjNWI0XHVjOWMwXHViMjk0IFx1YmFhOFx1YjRlMCA8ZW0+TiA8XC9lbT5cdWM3NTggXHVkNTY5XHVjNzQwIDEsMDAwLDAwMFx1Yzc0NCBcdWNkMDhcdWFjZmNcdWQ1NThcdWM5YzAgXHVjNTRhXHViMjk0XHViMmU0LjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPlx1YWMwMSBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU3NCwgXHVhYzAxIFx1YzExZFx1ZDMxMFx1Yzc3NCBcdWM3ODhcdWIyOTQgXHVjNzA0XHVjZTU4XHVjNWQwXHVjMTFjIFx1YzJkY1x1Yzc5MVx1ZDU4OFx1Yzc0NCBcdWI1NGMgXHVjNWI0XHVkNTNjXHVjZTU4XHVhYzAwIFx1YzE4Y1x1YmFhOFx1ZDU3NFx1YzU3YyBcdWQ1NThcdWIyOTQgXHVjZDVjXHVjMThjIFx1Y2NiNFx1YjgyNVx1Yzc0NCBcdWFjZjVcdWJjMzFcdWM3NDQgXHVjMGFjXHVjNzc0XHVjNWQwIFx1YjQ1MFx1YWNlMCBcdWQ1NWMgXHVjOTA0XHViODVjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIxIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJLb3JlYW4iLCJzYW1wbGVfZXhwbGFpbl8xIjoiPHA+XHVjY2FiIFx1YmM4OFx1YzlmOCBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU3NCwgXHVjMmRjXHVjNzkxIFx1YzcwNFx1Y2U1OFx1YWMwMCBcdWNjYWIgXHViYzg4XHVjOWY4IFx1YzExZFx1ZDMxMFx1Yzc3YyBcdWI1NGMgXHVjZDVjXHVjODAxXHVjNzU4IFx1YmMyOVx1YmM5NSBcdWM5MTEgXHVkNTU4XHViMDk4XHViMjk0IFx1YzYyNFx1Yjk3OFx1Y2FiZFx1YzczY1x1Yjg1YyAxXHVjZTc4IFx1Yzc3NFx1YjNkOVx1ZDU1OFx1YzVlYyBCXHViOTdjIERcdWI4NWMgXHViYzE0XHVhZmJjIFx1ZDZjNCwgM1x1Y2U3OCBcdWM3NzRcdWIzZDlcdWQ1NThcdWM1ZWMgRVx1Yjk3YyBBXHViODVjIFx1YmMxNFx1YWZiOFx1YjI5NCBcdWFjODNcdWM3NzRcdWIyZTQuPFwvcD5cclxuIn0seyJwcm9ibGVtX2lkIjoiMTYwMDEiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJUcmVhc3VyZSBCb3giLCJkZXNjcmlwdGlvbiI6IjxwPllvdSBhcmUgcGxheWluZyBhIFZSIGdhbWUgYWJvdXQgYWR2ZW50dXJlcyBpbiBhbiBhbmNpZW50IHdvcmxkLiBZb3Ugd2VyZSBvbiBhIGpvdXJuZXkgdG8gZmluZCB0aGUgbGVnZW5kYXJ5IHRyZWFzdXJlLCBhbmQgYWZ0ZXIgYnJlYWtpbmcgdGhyb3VnaCBzZXZlcmFsIGdhdGVzLCB5b3UgZm91bmQgYSBib3ggdGhhdCB3YXMgc3VwcG9zZWQgdG8gY29udGFpbiB0aGUgdHJlYXN1cmUuIEJ1dCB0aGUgYm94IGhhZCBhIGxvY2sgb24gaXQgd2l0aCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6ICZxdW90O1RvIG9wZW4gdGhlIGJveCwgY2hhbmdlIHRoZSBsZXR0ZXJzIHVuZGVyIHRoZSBib3ggd2VsbCwgc28gdGhhdCBpdCByZWFkcyB0aGUgc2FtZSBmb3J3YXJkIGFuZCBiYWNrd2FyZC4mcXVvdDs8XC9wPlxyXG5cclxuPHA+QWZ0ZXIgbG9va2luZyB1bmRlciB0aGUgYm94LCB5b3UgZm91bmQgYSBzdHJpbmcgY29uc2lzdGluZyBvZiAkTiQgY2hhcmFjdGVycyBpbiBhIHJvdy4gVGhlICRpJC10aCBjaGFyYWN0ZXIgaXMgbG9jYXRlZCBhdCBwb3NpdGlvbiAkKGksIDApJCwgc28gZGlzdGFuY2VzIGJldHdlZW4gYWRqYWNlbnQgY2hhcmFjdGVycyBhcmUgJDEkLjxcL3A+XHJcblxyXG48cD5JdCBzZWVtcyB0aGF0IHRoZSBib3ggY2FuIGJlIG9wZW5lZCBieSByZXBsYWNpbmcgdGhlIGNoYXJhY3RlcnMgdW5kZXIgdGhlIGJveCBhbmQgbWFraW5nIGl0IGEgcGFsaW5kcm9tZS4gVG8gZG8gdGhhdCwgeW91IHN0YXJ0IGF0IHNvbWUgcG9zaXRpb24sIGFuZCB5b3UgY2FuIHJlcGVhdGVkbHkgbW92ZSB0byBhbm90aGVyIHBvc2l0aW9uIGFuZCByZXBsYWNlIHRoZSBjaGFyYWN0ZXIgYXQgdGhhdCBwb3NpdGlvbiBieSBhbnkgb3RoZXIgY2hhcmFjdGVyLCB1bnRpbCB0aGUgc3RyaW5nIGJlY29tZXMgYSBwYWxpbmRyb21lLjxcL3A+XHJcblxyXG48cD5TaW5jZSB5b3VyIEhQIGlzIGxpbWl0ZWQsIHlvdSB3YW50IHRvIGdhaW4gdGhlIHRyZWFzdXJlIHVzaW5nIG1pbmltdW0gSFAuIEVhY2ggcG9zaXRpb24gcmVxdWlyZXMgYSBkaWZmZXJlbnQgYW1vdW50IG9mIEhQIHRvIHJlcGxhY2UgdGhlIHJlc3BlY3RpdmUgY2hhcmFjdGVyLiBBbHNvLCBpdCBjb25zdW1lcyAkQyQgSFAgdG8gbW92ZSBhIHVuaXQgZGlzdGFuY2UuIFRoYXQgaXMsIGlmIHlvdSB3ZXJlIGF0IHBvc2l0aW9uICQoaSwgMCkkLCBhbmQgeW91IHdhbnQgdG8gbW92ZSB0byBwb3NpdGlvbiAkKGosIDApJCB0byByZXBsYWNlIHRoZSAkaiQtdGggY2hhcmFjdGVyLCB0aGUgbW92ZW1lbnQgd2lsbCBkZWNyZWFzZSB5b3VyIEhQIGJ5ICRDIFxcY2RvdCB8aiAtIGl8JC48XC9wPlxyXG5cclxuPHA+Rm9yIGVhY2ggaW50ZWdlciAkaSQgc3VjaCB0aGF0ICQxIFxcbGUgaSBcXGxlIE4kLCBmaW5kIHRoZSBtaW5pbXVtIEhQIGNvbnN1bWVkIHRvIG9idGFpbiB0aGUgdHJlYXN1cmUgaWYgeW91IHN0YXJ0IGF0IHBvc2l0aW9uICQoaSwgMCkkLjxcL3A+XHJcbiIsImlucHV0IjoiPHA+VGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW4gaW50ZWdlciAkVCQsIHRoZSBudW1iZXIgb2YgdGVzdCBjYXNlcyAoJDEgXFxsZSBUIFxcbGUgMTAwXFwsMDAwJCkuIFRoZSB0ZXN0IGNhc2VzIGZvbGxvdy48XC9wPlxyXG5cclxuPHA+VGhlIGZpcnN0IGxpbmUgb2YgZWFjaCB0ZXN0IGNhc2UgY29udGFpbnMgdHdvIGludGVnZXJzOiAkTiQsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB1bmRlciB0aGUgYm94ICgkMSBcXGxlIE4gXFxsZSAxXFwsMDAwXFwsMDAwJCksIGFuZCAkQyQsIHRoZSBhbW91bnQgb2YgSFAgY29uc3VtZWQgd2hlbiBtb3ZpbmcgYSB1bml0IGRpc3RhbmNlICgkMSBcXGxlIEMgXFxsZSAxMF45JCkuPFwvcD5cclxuXHJcbjxwPlRoZSBzZWNvbmQgbGluZSBjb25zaXN0cyBvZiAkTiQgY2hhcmFjdGVycy4gSXQgcmVwcmVzZW50cyB0aGUgc3RyaW5nIHVuZGVyIHRoZSBib3guIEVhY2ggbGV0dGVyIGlzIGFuIHVwcGVyY2FzZSBFbmdsaXNoIGxldHRlci48XC9wPlxyXG5cclxuPHA+VGhlIHRoaXJkIGxpbmUgY29udGFpbnMgJE4kIGludGVnZXJzLiBUaGUgJGkkLXRoIGludGVnZXIgcmVwcmVzZW50cyB0aGUgSFAgY29uc3VtZWQgdG8gcmVwbGFjZSB0aGUgJGkkLXRoIGNoYXJhY3Rlci4gRWFjaCBvZiB0aGVzZSBpbnRlZ2VycyBpcyBiZXR3ZWVuICQxJCBhbmQgJDEwXjkkLjxcL3A+XHJcblxyXG48cD5UaGUgc3VtIG9mICROJCBvdmVyIGFsbCB0ZXN0IGNhc2VzIGRvZXMgbm90IGV4Y2VlZCAkMVxcLDAwMFxcLDAwMCQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+Rm9yIGVhY2ggdGVzdCBjYXNlLCBwcmludCAkTiQgaW50ZWdlcnMgb24gYSBzaW5nbGUgbGluZS4gVGhlICRpJC10aCBpbnRlZ2VyIG11c3QgYmUgdGhlIG1pbmltdW0gSFAgY29uc3VtZWQgd2hlbiBzdGFydGluZyBhdCBwb3NpdGlvbiAkKGksIDApJC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJFbmdsaXNoIiwic2FtcGxlX2V4cGxhaW5fMSI6IjxwPkZvciB0aGUgZmlyc3QgdGVzdCBjYXNlLCB3aGVuIHRoZSBzdGFydGluZyBwb3NpdGlvbiBpcyAkKDEsIDApJCwgb25lIG9mIHRoZSBvcHRpbWFsIHdheXMgaXMgdG8gZmlyc3QgbW92ZSB0byBwb3NpdGlvbiAkKDIsIDApJCBhbmQgY2hhbmdlICZxdW90Ozxjb2RlPkI8XC9jb2RlPiZxdW90OyB0byAmcXVvdDs8Y29kZT5EPFwvY29kZT4mcXVvdDssIHRoZW4gbW92ZSB0byBwb3NpdGlvbiAkKDUsIDApJCBhbmQgY2hhbmdlICZxdW90Ozxjb2RlPkU8XC9jb2RlPiZxdW90OyB0byAmcXVvdDs8Y29kZT5BPFwvY29kZT4mcXVvdDsuPFwvcD5cclxuIn1d