Release de CPI de SEK de abr-26. Conteúdo:
- Tabela de inflação em diversas medidas (Mom, SAAR e YoY)
- Sazonalidade da inflação nas várias aberturas.
- Inflação YOY e SAAR nas principais aberturas.
Risco do petróleo

Tabela do CPI
|
MoM |
SAAR |
YoY |
| Grupo |
Nome |
fev/26 |
mar/26 |
abr/26 |
fev/26 |
mar/26 |
abr/26 |
fev/26 |
mar/26 |
abr/26 |
| Headline |
CPI all items |
0.6 |
-0.6 |
-0.6 |
0.6 |
1.5 |
0.5 |
0.5 |
0.5 |
-0.1 |
| Categoria |
Food and Nonalcoholic Beverages |
0.4 |
-1.0 |
-5.5 |
1.8 |
-0.8 |
-9.7 |
1.8 |
0.0 |
-5.7 |
| Alcoholic Beverages, Tobacco and Narcotics |
0.3 |
0.4 |
-0.1 |
2.7 |
2.7 |
2.5 |
2.6 |
2.4 |
2.3 |
| Clothing and Footwear |
2.3 |
2.2 |
0.9 |
0.1 |
2.7 |
2.7 |
-0.3 |
1.6 |
1.2 |
| Housing, Water, Electricity, Gas and Other Fuels |
0.4 |
-2.8 |
-0.7 |
12.0 |
13.1 |
4.6 |
5.3 |
3.5 |
3.2 |
| Furnishings, Household Equipment and Routine Household Maintenance |
-0.2 |
-0.2 |
0.3 |
-4.5 |
-1.9 |
-2.2 |
-3.2 |
-3.6 |
-2.0 |
| Health |
1.3 |
0.0 |
-0.5 |
-16.3 |
-25.1 |
-17.7 |
-4.1 |
-4.6 |
-5.3 |
| Transport |
0.3 |
4.0 |
2.4 |
-0.8 |
2.2 |
8.8 |
-1.2 |
3.3 |
5.2 |
| Information and Communication |
1.0 |
-0.3 |
-0.7 |
-3.3 |
-1.0 |
0.1 |
-2.9 |
-1.8 |
-2.1 |
| Recreation, Sport and Culture |
0.6 |
-2.9 |
0.0 |
-2.8 |
-5.3 |
-5.6 |
-0.5 |
-0.6 |
-2.4 |
| Education Services |
0.2 |
-0.3 |
0.0 |
3.2 |
2.8 |
2.2 |
3.5 |
3.2 |
2.7 |
| Restaurants and Accommodation Services |
1.6 |
0.0 |
0.7 |
0.3 |
1.7 |
4.2 |
3.8 |
3.3 |
4.0 |
| Insurance and Financial Services |
0.2 |
0.1 |
0.5 |
-0.0 |
-0.5 |
0.8 |
3.5 |
3.4 |
1.3 |
| Personal Care, Social Protection and Miscellaneous Goods and Services |
0.6 |
0.3 |
-0.1 |
2.5 |
1.6 |
2.0 |
3.0 |
2.9 |
2.2 |
| Core |
CPIF excluding energy and unprocessed food |
0.4 |
-0.7 |
-0.7 |
0.6 |
0.8 |
-0.0 |
1.3 |
1.1 |
0.2 |
| Core - TRIM85 |
-0.1 |
-0.9 |
-1.3 |
1.0 |
0.8 |
0.1 |
1.7 |
1.8 |
0.7 |
| Core - TRIM1 |
0.8 |
-1.3 |
0.3 |
1.0 |
0.7 |
0.5 |
1.8 |
2.1 |
1.5 |
| Core - UND24 |
-1.0 |
-0.7 |
-0.8 |
0.7 |
0.2 |
-0.6 |
1.4 |
1.3 |
0.5 |
| Core - KPIFPC |
-0.2 |
-0.1 |
-0.7 |
1.4 |
1.3 |
0.6 |
2.1 |
1.8 |
1.2 |
| Services |
0.8 |
-0.3 |
0.2 |
1.2 |
0.8 |
1.1 |
2.4 |
2.2 |
1.7 |
| Goods |
0.5 |
-1.0 |
-1.5 |
3.3 |
5.0 |
0.5 |
1.0 |
0.9 |
-0.3 |
| Durable goods |
0.5 |
-0.0 |
-0.4 |
-2.8 |
1.0 |
0.9 |
-2.7 |
-2.0 |
-1.8 |
| Semidurable goods |
-0.3 |
0.3 |
1.9 |
-1.9 |
-1.5 |
-1.5 |
-2.0 |
-1.2 |
-0.6 |
| Nondurable goods |
0.6 |
-1.7 |
-2.8 |
5.2 |
5.2 |
-0.8 |
2.9 |
2.3 |
0.2 |
Contribuições para a inflação

Sazonalidade
Headline

Core ex-alimentos e energia

Core Trimmed means 85

Core Trimmed means 1

Core Und24 - reponderação dos pesos

Core KPIFPC - core estatÃstico por PCA

Core Services

Core Goods

Inflação nas medidas SAAR e YoY
Headline

Core ex-food and energy

Core TRIM 85

Core TRIM 1

Core UND 24

Core KPIFPC - estatÃstico por PCA

Core services

Core goods

LS0tDQp0aXRsZTogIkNQSSByZWxlYXNlIC0gU0VLIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KDQpgYGB7ciBwYWNrYWdlcywgaW5jbHVkZSA9IEZ9DQpybShsaXN0ID0gbHMoKSkNCnN1cHByZXNzV2FybmluZ3MobGlicmFyeSh5YW1sKSkNCnN1cHByZXNzV2FybmluZ3MobGlicmFyeShkcGx5cikpDQpzdXBwcmVzc1dhcm5pbmdzKGxpYnJhcnkocmVhZHhsKSkNCnN1cHByZXNzV2FybmluZ3MobGlicmFyeShyb2xsKSkNCnN1cHByZXNzV2FybmluZ3MobGlicmFyeShrbml0cikpDQpzdXBwcmVzc1dhcm5pbmdzKGxpYnJhcnkoa2FibGVFeHRyYSkpDQoNCnNldHdkKCJDOi9Vc2Vycy9MRlNJSEtKL09uZURyaXZlIC0gQmFuY28gSXRhw7ogU0EvRG9jdW1lbnRvcy9NYWNyby9TRUsvQ1BJL2NoYXJ0Ym9vayIpDQpzb3VyY2UoInV0aWxzX2NwaV9jaGFydGJvb2suUiIpDQpgYGANCg0KYGBge3IgcGFyYW1ldGVycywgaW5jbHVkZT1GfQ0KDQpjb25maWdzX2NwaSA9IHJlYWRfeWFtbCgiY29uZmlnLnltbCIpDQpwYXRoX2RhdGEgPSAiREJfY2hhcnRib29rX0NQSV9TRUsueGxzeCINCmNwaV90YXJnZXQgPSAyDQpzdGFydF9kYXRlX3NlYXMgPSBhcy5EYXRlKCIyMDAwLTAxLTAxIikgIyBEYXRhIGRlIGluw61jaW8gcGFyYSBjYWxjdWxhciBhcyBtZWRpZGFzIGRlIHNhem9uYWxpZGFkZQ0KbnBlcl95b3kgPSAyNCAjIE7Dum1lcm8gZGUgbWVzZXMgcGFyYSBwbG90YXIgbyBncsOhZmljbyBkYXMgaW5mbGHDp8O1ZXMgWU9ZIGUgU0FBUg0KbGFiZWxzX3dlaWdodHMgPSBjKCJGb29kIGFuZCBOb25hbGNvaG9saWMgQmV2ZXJhZ2VzIC0gV2VpZ2h0IiwNCiAgICAgICAgICAgICAgICAgICAiQWxjb2hvbGljIEJldmVyYWdlcywgVG9iYWNjbyBhbmQgTmFyY290aWNzIC0gV2VpZ2h0IiwNCiAgICAgICAgICAgICAgICAgICAiQ2xvdGhpbmcgYW5kIEZvb3R3ZWFyIC0gV2VpZ2h0IiwNCiAgICAgICAgICAgICAgICAgICAiSG91c2luZywgV2F0ZXIsIEVsZWN0cmljaXR5LCBHYXMgYW5kIE90aGVyIEZ1ZWxzIC0gV2VpZ2h0IiwNCiAgICAgICAgICAgICAgICAgICAiRnVybmlzaGluZ3MsIEhvdXNlaG9sZCBFcXVpcG1lbnQgYW5kIFJvdXRpbmUgSG91c2Vob2xkIE1haW50ZW5hbmNlIC0gV2VpZ2h0IiwNCiAgICAgICAgICAgICAgICAgICAiSGVhbHRoIC0gV2VpZ2h0IiwNCiAgICAgICAgICAgICAgICAgICAiVHJhbnNwb3J0IC0gV2VpZ2h0IiwNCiAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24gYW5kIENvbW11bmljYXRpb24gLSBXZWlnaHQiLA0KICAgICAgICAgICAgICAgICAgICJSZWNyZWF0aW9uLCBTcG9ydCBhbmQgQ3VsdHVyZSAtIFdlaWdodCIsDQogICAgICAgICAgICAgICAgICAgIkVkdWNhdGlvbiBTZXJ2aWNlcyAtIFdlaWdodCIsDQogICAgICAgICAgICAgICAgICAgIlJlc3RhdXJhbnRzIGFuZCBBY2NvbW1vZGF0aW9uIFNlcnZpY2VzIC0gV2VpZ2h0IiwNCiAgICAgICAgICAgICAgICAgICAiSW5zdXJhbmNlIGFuZCBGaW5hbmNpYWwgU2VydmljZXMgLSBXZWlnaHQiLA0KICAgICAgICAgICAgICAgICAgICJQZXJzb25hbCBDYXJlLCBTb2NpYWwgUHJvdGVjdGlvbiBhbmQgTWlzY2VsbGFuZW91cyBHb29kcyBhbmQgU2VydmljZXMgLSBXZWlnaHQiKQ0KDQpgYGANCg0KDQpgYGB7ciBkYXRhYmFzZSwgaW5jbHVkZSA9IEYsIGVjaG8gPSBGfQ0KZGJfbnNhID0gcmVhZF9leGNlbChwYXRoX2RhdGEsIHNoZWV0ID0gIkhhdmVyIiwgY29sX3R5cGVzID0gInRleHQiKQ0KZGJfbnNhID0gZ2V0X2NsZWFuZWRfZGF0YWJhc2UoZGJfbnNhLCBjb25maWdzX2NwaSkNCmRiX3dlaWdodHMgPSBkYl9uc2FbLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxzX3dlaWdodHMpXQ0KZGJfbnNhID0gZGJfbnNhWyxzZXRkaWZmKGNvbG5hbWVzKGRiX25zYSksIGxhYmVsc193ZWlnaHRzKV0NCmRiX25zYV9tb20gPSBkYl9uc2ENCmRiX25zYV9tb21bLC0xXSA9IDEwMCAqIChkYl9uc2FfbW9tWywtMV0gLyBsYWcoZGJfbnNhX21vbVssLTFdKSAtIDEpDQpkYl9uc2FfeW95ID0gZGJfbnNhDQpkYl9uc2FfeW95WywtMV0gPSAxMDAgKiAoZGJfbnNhX3lveVssLTFdIC8gbGFnKGRiX25zYV95b3lbLC0xXSwgMTIpIC0gMSkNCmRiX3NhID0gZ2V0X3NlYXNvbmFsbHlfYWRqdXN0ZWQoZGJfbnNhLCBjb25maWdzX2NwaSkNCmRiX3NhX3NhYXIgPSBkYl9zYQ0KZGJfc2Ffc2FhclssLTFdID0gc2FwcGx5KGRiX3NhX3NhYXJbLC0xXSwgZnVuY3Rpb24oeCkgcm9sbF9tZWFuKHgsIHdpZHRoID0gMywgbWluX29icyA9IDMpKQ0KZGJfc2Ffc2FhclssLTFdID0gMTAwICogKChkYl9zYV9zYWFyWywtMV0gLyBsYWcoZGJfc2Ffc2FhclssLTFdLCAzKSkgXiA0IC0xKQ0KbGFzdF9kYXRlX3JlbGVhc2UgPSB0YWlsKG5hLm9taXQoZGJfbnNhKSRkYXRlU2Vzc2lvbiwxKQ0KbGFzdF9kYXRlX3JlbGVhc2UgPSB0b2xvd2VyKGZvcm1hdChsYXN0X2RhdGVfcmVsZWFzZSwgIiViLSV5IikpDQpgYGANCg0KDQpSZWxlYXNlIGRlIENQSSBkZSBTRUsgZGUgKipgciBsYXN0X2RhdGVfcmVsZWFzZWAqKi4gQ29udGXDumRvOg0KDQoxLiBUYWJlbGEgZGUgaW5mbGHDp8OjbyBlbSBkaXZlcnNhcyBtZWRpZGFzIChNb20sIFNBQVIgZSBZb1kpDQoyLiBTYXpvbmFsaWRhZGUgZGEgaW5mbGHDp8OjbyBuYXMgdsOhcmlhcyBhYmVydHVyYXMuDQozLiBJbmZsYcOnw6NvIFlPWSBlIFNBQVIgbmFzIHByaW5jaXBhaXMgYWJlcnR1cmFzLg0KDQojICoqUmlzY28gZG8gcGV0csOzbGVvKioNCg0KYGBge3IgY3BpX29pbF9yaXNrLCBlY2hvPUYsIHdhcm5pbmc9RiwgbWVzc2FnZT1GfQ0KDQpkYl9jcGlfb2lsID0gZGJfbnNhWyxjKCJkYXRlU2Vzc2lvbiIsICJPaWwgQnJlbnQiLCAiRXhjaGFuZ2UgcmF0ZSIsICJQcm9kdWNlciBQcmljZSBJbmRleCIsICJDUEkgYWxsIGl0ZW1zIiwgIkNQSUYgZXhjbHVkaW5nIGVuZXJneSBhbmQgdW5wcm9jZXNzZWQgZm9vZCIpXQ0KZGJfY3BpX29pbCA9IGRiX2NwaV9vaWwgJT4lIG11dGF0ZSgNCiAgT2lsX2xvY2FsID0gYE9pbCBCcmVudGAgKiBgRXhjaGFuZ2UgcmF0ZWANCikNCg0KZGJfY3BpX29pbFssLTFdID0gMTAwICogKGRiX2NwaV9vaWxbLC0xXSAvIGxhZyhkYl9jcGlfb2lsWywtMV0sIDEyKSAtIDEpDQoNCmRiX2NwaV9vaWxfY2hhcnQgPSBkYl9jcGlfb2lsWyxzZXRkaWZmKGNvbG5hbWVzKGRiX2NwaV9vaWwpLCBjKCJPaWwgQnJlbnQiLCAiRXhjaGFuZ2UgcmF0ZSIpKV0NCg0KZGJfY3BpX29pbF9jaGFydCA9IHRhaWwoZGJfY3BpX29pbF9jaGFydCwgNjApDQoNCiMgVGlja3Mgc2VwYXJhZG9zDQp0aWNrc19sZWZ0ICA8LSBwcmV0dHkobmEub21pdChkYl9jcGlfb2lsX2NoYXJ0JE9pbF9sb2NhbCkpDQp0aWNrc19yaWdodCA8LSBwcmV0dHkobmEub21pdCh1bmxpc3QoZGJfY3BpX29pbF9jaGFydFssYygiUHJvZHVjZXIgUHJpY2UgSW5kZXgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNQSSBhbGwgaXRlbXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNQSUYgZXhjbHVkaW5nIGVuZXJneSBhbmQgdW5wcm9jZXNzZWQgZm9vZCIpXSkpKQ0KDQojID09PT09IEVJWE8gRVNRVUVSRE86IE9JTCA9PT09PQ0KcGxvdChkYl9jcGlfb2lsX2NoYXJ0JGRhdGVTZXNzaW9uLCBkYl9jcGlfb2lsX2NoYXJ0JE9pbF9sb2NhbCwNCiAgICAgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgbHdkID0gMywNCiAgICAgeGxhYiA9ICJEYXRlIiwgeWxhYiA9ICIlIFlvWSIsDQogICAgIHlsaW0gPSByYW5nZSh0aWNrc19sZWZ0KSwNCiAgICAgbWFpbiA9ICJJbmZsYcOnw6NvIHZlcnN1cyBvaWwiLA0KICAgICB5YXh0ID0gIm4iKQ0KDQpheGlzKDIsIGF0ID0gdGlja3NfbGVmdCwgY29sLmF4aXMgPSAiZGFya2JsdWUiLCBsYXMgPSAxKQ0KDQojID09PT09IFNPQlJFUE9SID09PT09DQpwYXIobmV3ID0gVFJVRSkNCg0KIyA9PT09PSBFSVhPIERJUkVJVE86IFBQSSArIENQSSArIENPUkUgPT09PT0NCnBsb3QoZGJfY3BpX29pbF9jaGFydCRkYXRlU2Vzc2lvbiwNCiAgICAgZGJfY3BpX29pbF9jaGFydCRgUHJvZHVjZXIgUHJpY2UgSW5kZXhgLA0KICAgICB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgbHdkID0gMywNCiAgICAgYXhlcyA9IEZBTFNFLCB4bGFiID0gIiIsIHlsYWIgPSAiIiwNCiAgICAgeWxpbSA9IHJhbmdlKHRpY2tzX3JpZ2h0KSkNCg0KIyBPdXRyYXMgc8OpcmllcyBubyBlaXhvIGRpcmVpdG8NCmxpbmVzKGRiX2NwaV9vaWxfY2hhcnQkZGF0ZVNlc3Npb24sDQogICAgICBkYl9jcGlfb2lsX2NoYXJ0JGBDUEkgYWxsIGl0ZW1zYCwNCiAgICAgIGNvbCA9ICJkYXJrZ3JlZW4iLCBsd2QgPSAzKQ0KDQpsaW5lcyhkYl9jcGlfb2lsX2NoYXJ0JGRhdGVTZXNzaW9uLA0KICAgICAgZGJfY3BpX29pbF9jaGFydCRgQ1BJRiBleGNsdWRpbmcgZW5lcmd5IGFuZCB1bnByb2Nlc3NlZCBmb29kYCwNCiAgICAgIGNvbCA9ICJkYXJrcmVkIiwgbHdkID0gMykNCg0KIyBFaXhvIGRpcmVpdG8NCmF4aXMoNCwgYXQgPSB0aWNrc19yaWdodCwgY29sLmF4aXMgPSAiYmxhY2siLCBsYXMgPSAxKQ0KbXRleHQoIiUgWW9ZIiwgc2lkZSA9IDQsIGxpbmUgPSAzKQ0KDQojIExlZ2VuZGENCmxlZ2VuZCgidG9wcmlnaHQiLA0KICAgICAgIGMoIk9pbCAoRXNxLikiLCAiUFBJIChEaXIuKSIsICJDUEkgKERpci4pIiwgIkNvcmUgKERpci4pIiksDQogICAgICAgY29sID0gYygiZGFya2JsdWUiLCAicHVycGxlIiwgImRhcmtncmVlbiIsICJkYXJrcmVkIiksDQogICAgICAgbHdkID0gMywgY2V4ID0gMC43LCBidHkgPSAibiIpDQoNCmdyaWQoKQ0KDQoNCg0KYGBgDQoNCiMgKipUYWJlbGEgZG8gQ1BJKioNCg0KYGBge3IgY3BpX3RhYmxlLCBlY2hvPUYsIHdhcm5pbmc9RiwgbWVzc2FnZT1GfQ0KDQoNCml0ZW1zX3RibCA8LSBkYXRhLmZyYW1lKA0KICBHcnVwbyA9IGMoDQogICAgIkhlYWRsaW5lIiwNCiAgICByZXAoIkNhdGVnb3JpYSIsIDEzKSwNCiAgICByZXAoIkNvcmUiLCAxMCkNCiAgKSwNCiAgTm9tZSA9IGMoDQogICAgIkNQSSBhbGwgaXRlbXMiLA0KICAgICJGb29kIGFuZCBOb25hbGNvaG9saWMgQmV2ZXJhZ2VzIiwNCiAgICAiQWxjb2hvbGljIEJldmVyYWdlcywgVG9iYWNjbyBhbmQgTmFyY290aWNzIiwNCiAgICAiQ2xvdGhpbmcgYW5kIEZvb3R3ZWFyIiwNCiAgICAiSG91c2luZywgV2F0ZXIsIEVsZWN0cmljaXR5LCBHYXMgYW5kIE90aGVyIEZ1ZWxzIiwNCiAgICAiRnVybmlzaGluZ3MsIEhvdXNlaG9sZCBFcXVpcG1lbnQgYW5kIFJvdXRpbmUgSG91c2Vob2xkIE1haW50ZW5hbmNlIiwNCiAgICAiSGVhbHRoIiwNCiAgICAiVHJhbnNwb3J0IiwNCiAgICAiSW5mb3JtYXRpb24gYW5kIENvbW11bmljYXRpb24iLA0KICAgICJSZWNyZWF0aW9uLCBTcG9ydCBhbmQgQ3VsdHVyZSIsDQogICAgIkVkdWNhdGlvbiBTZXJ2aWNlcyIsDQogICAgIlJlc3RhdXJhbnRzIGFuZCBBY2NvbW1vZGF0aW9uIFNlcnZpY2VzIiwNCiAgICAiSW5zdXJhbmNlIGFuZCBGaW5hbmNpYWwgU2VydmljZXMiLA0KICAgICJQZXJzb25hbCBDYXJlLCBTb2NpYWwgUHJvdGVjdGlvbiBhbmQgTWlzY2VsbGFuZW91cyBHb29kcyBhbmQgU2VydmljZXMiLA0KICAgICJDUElGIGV4Y2x1ZGluZyBlbmVyZ3kgYW5kIHVucHJvY2Vzc2VkIGZvb2QiLA0KICAgICJDb3JlIC0gVFJJTTg1IiwNCiAgICAiQ29yZSAtIFRSSU0xIiwNCiAgICAiQ29yZSAtIFVORDI0IiwNCiAgICAiQ29yZSAtIEtQSUZQQyIsDQogICAgIlNlcnZpY2VzIiwNCiAgICAiR29vZHMiLA0KICAgICJEdXJhYmxlIGdvb2RzIiwNCiAgICAiU2VtaWR1cmFibGUgZ29vZHMiLA0KICAgICJOb25kdXJhYmxlIGdvb2RzIg0KICApLA0KICBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UNCikNCg0KDQpnZXRfbGFzdF9kYXRlcyA8LSBmdW5jdGlvbihkYiwgbiA9IDMpIHsNCiAgZGIgJT4lDQogICAgZmlsdGVyKCFpcy5uYShkYXRlU2Vzc2lvbikpICU+JQ0KICAgIGFycmFuZ2UoZGF0ZVNlc3Npb24pICU+JQ0KICAgIHRhaWwobikgJT4lDQogICAgcHVsbChkYXRlU2Vzc2lvbikNCn0NCg0KDQojIFVzYXIgb3Mgw7psdGltb3MgMyBtZXNlcyBkaXNwb27DrXZlaXMgZW0gY2FkYSBtZWRpZGENCmRhdGVzX21vbSAgPC0gZ2V0X2xhc3RfZGF0ZXMobmEub21pdChkYl9uc2FfbW9tKSwgMykNCmRhdGVzX3NhYXIgPC0gZ2V0X2xhc3RfZGF0ZXMobmEub21pdChkYl9zYV9zYWFyKSwgMykNCmRhdGVzX3lveSAgPC0gZ2V0X2xhc3RfZGF0ZXMobmEub21pdChkYl9uc2FfeW95KSwgMykNCg0KZm9ybWF0X21vbnRoX2xhYmVsIDwtIGZ1bmN0aW9uKHgpIHsNCiAgbWVzZXNfcHQgPC0gYygNCiAgICAiamFuIiwgImZldiIsICJtYXIiLCAiYWJyIiwgIm1haSIsICJqdW4iLA0KICAgICJqdWwiLCAiYWdvIiwgInNldCIsICJvdXQiLCAibm92IiwgImRleiINCiAgKQ0KICANCiAgcGFzdGUwKA0KICAgIG1lc2VzX3B0W2FzLmludGVnZXIoZm9ybWF0KHgsICIlbSIpKV0sDQogICAgIi8iLA0KICAgIGZvcm1hdCh4LCAiJXkiKQ0KICApDQp9DQoNCmNvbHNfbW9tICA8LSBmb3JtYXRfbW9udGhfbGFiZWwoZGF0ZXNfbW9tKQ0KY29sc19zYWFyIDwtIGZvcm1hdF9tb250aF9sYWJlbChkYXRlc19zYWFyKQ0KY29sc195b3kgIDwtIGZvcm1hdF9tb250aF9sYWJlbChkYXRlc195b3kpDQoNCmV4dHJhY3RfdmFsdWVzIDwtIGZ1bmN0aW9uKGRiLCBpdGVtcywgZGF0ZXMpIHsNCiAgDQogIGRiX2F1eCA8LSBkYiAlPiUNCiAgICBmaWx0ZXIoZGF0ZVNlc3Npb24gJWluJSBkYXRlcykgJT4lDQogICAgYXJyYW5nZShkYXRlU2Vzc2lvbikNCiAgDQogIG91dCA8LSBzYXBwbHkoaXRlbXMsIGZ1bmN0aW9uKGl0ZW0pIHsNCiAgICANCiAgICBpZiAoIWl0ZW0gJWluJSBuYW1lcyhkYl9hdXgpKSB7DQogICAgICByZXAoTkFfcmVhbF8sIGxlbmd0aChkYXRlcykpDQogICAgfSBlbHNlIHsNCiAgICAgIGFzLm51bWVyaWMoZGJfYXV4W1tpdGVtXV0pDQogICAgfQ0KICAgIA0KICB9KQ0KICANCiAgb3V0IDwtIHQob3V0KQ0KICBvdXQgPC0gYXMuZGF0YS5mcmFtZShvdXQpDQogIA0KICByZXR1cm4ob3V0KQ0KfQ0KDQoNCm1vbV92YWx1ZXMgIDwtIGV4dHJhY3RfdmFsdWVzKGRiX25zYV9tb20sIGl0ZW1zX3RibCROb21lLCBkYXRlc19tb20pDQpzYWFyX3ZhbHVlcyA8LSBleHRyYWN0X3ZhbHVlcyhkYl9zYV9zYWFyLCBpdGVtc190YmwkTm9tZSwgZGF0ZXNfc2FhcikNCnlveV92YWx1ZXMgIDwtIGV4dHJhY3RfdmFsdWVzKGRiX25zYV95b3ksIGl0ZW1zX3RibCROb21lLCBkYXRlc195b3kpDQoNCm5hbWVzKG1vbV92YWx1ZXMpICA8LSBjb2xzX21vbQ0KbmFtZXMoc2Fhcl92YWx1ZXMpIDwtIGNvbHNfc2Fhcg0KbmFtZXMoeW95X3ZhbHVlcykgIDwtIGNvbHNfeW95DQoNCmluZmxhdGlvbl90YWJsZSA8LSBiaW5kX2NvbHMoDQogIGl0ZW1zX3RibCwNCiAgbW9tX3ZhbHVlcywNCiAgc2Fhcl92YWx1ZXMsDQogIHlveV92YWx1ZXMNCikNCg0KDQppbmZsYXRpb25fdGFibGVfZm10IDwtIGluZmxhdGlvbl90YWJsZQ0KDQpudW1fY29scyA8LSAzOm5jb2woaW5mbGF0aW9uX3RhYmxlX2ZtdCkNCg0KaW5mbGF0aW9uX3RhYmxlX2ZtdFtudW1fY29sc10gPC0gbGFwcGx5KA0KICBpbmZsYXRpb25fdGFibGVfZm10W251bV9jb2xzXSwNCiAgZnVuY3Rpb24oeCkgaWZlbHNlKGlzLm5hKHgpLCAiIiwgc3ByaW50ZigiJS4xZiIsIGFzLm51bWVyaWMoeCkpKQ0KKQ0KDQojIEdyw6FmaWNvDQoNCg0Ka2FibGUoDQogIGluZmxhdGlvbl90YWJsZV9mbXQsDQogIGZvcm1hdCA9ICJodG1sIiwNCiAgZXNjYXBlID0gRkFMU0UsDQogIHJvdy5uYW1lcyA9IEZBTFNFLA0KICBhbGlnbiA9IGMoImwiLCAibCIsIHJlcCgiciIsIDkpKSwNCiAgY29sLm5hbWVzID0gYygNCiAgICAiR3J1cG8iLA0KICAgICJOb21lIiwNCiAgICBjb2xzX21vbSwNCiAgICBjb2xzX3NhYXIsDQogICAgY29sc195b3kNCiAgKQ0KKSAlPiUNCiAgYWRkX2hlYWRlcl9hYm92ZSgNCiAgICBjKA0KICAgICAgIiAiID0gMiwNCiAgICAgICJNb00iID0gMywNCiAgICAgICJTQUFSIiA9IDMsDQogICAgICAiWW9ZIiA9IDMNCiAgICApDQogICkgJT4lDQogIGNvbHVtbl9zcGVjKDIsIGJvcmRlcl9yaWdodCA9IFRSVUUpICU+JQ0KICBjb2x1bW5fc3BlYyg1LCBib3JkZXJfcmlnaHQgPSBUUlVFKSAlPiUNCiAgY29sdW1uX3NwZWMoOCwgYm9yZGVyX3JpZ2h0ID0gVFJVRSkgJT4lDQogIGthYmxlX3N0eWxpbmcoDQogICAgZnVsbF93aWR0aCA9IEZBTFNFLA0KICAgIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJjb25kZW5zZWQiLCAiaG92ZXIiKQ0KICApICU+JQ0KICByb3dfc3BlYygNCiAgICAxLA0KICAgIGJvbGQgPSBUUlVFDQogICkgJT4lDQogIGNvbGxhcHNlX3Jvd3MoDQogICAgY29sdW1ucyA9IDEsDQogICAgdmFsaWduID0gIm1pZGRsZSINCiAgKQ0KDQoNCg0KYGBgDQoNCiMgKipDb250cmlidWnDp8O1ZXMgcGFyYSBhIGluZmxhw6fDo28qKg0KDQpgYGB7ciBjcGlfY29udHJpYiwgZWNobz1GLCB3YXJuaW5nPUYsIG1lc3NhZ2U9Rn0NCg0KbGFiZWxzX2NvbnRyaWIgPSBjKCJDUEkgYWxsIGl0ZW1zIiwNCiAgICAgICAgICAgICAgICAgICAiRm9vZCBhbmQgTm9uYWxjb2hvbGljIEJldmVyYWdlcyIsDQogICAgICAgICAgICAgICAgICAgIkFsY29ob2xpYyBCZXZlcmFnZXMsIFRvYmFjY28gYW5kIE5hcmNvdGljcyIsDQogICAgICAgICAgICAgICAgICAgIkNsb3RoaW5nIGFuZCBGb290d2VhciIsDQogICAgICAgICAgICAgICAgICAgIkhvdXNpbmcsIFdhdGVyLCBFbGVjdHJpY2l0eSwgR2FzIGFuZCBPdGhlciBGdWVscyIsDQogICAgICAgICAgICAgICAgICAgIkZ1cm5pc2hpbmdzLCBIb3VzZWhvbGQgRXF1aXBtZW50IGFuZCBSb3V0aW5lIEhvdXNlaG9sZCBNYWludGVuYW5jZSIsDQogICAgICAgICAgICAgICAgICAgIkhlYWx0aCIsDQogICAgICAgICAgICAgICAgICAgIlRyYW5zcG9ydCIsDQogICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uIGFuZCBDb21tdW5pY2F0aW9uIiwNCiAgICAgICAgICAgICAgICAgICAiUmVjcmVhdGlvbiwgU3BvcnQgYW5kIEN1bHR1cmUiLA0KICAgICAgICAgICAgICAgICAgICJFZHVjYXRpb24gU2VydmljZXMiLA0KICAgICAgICAgICAgICAgICAgICJSZXN0YXVyYW50cyBhbmQgQWNjb21tb2RhdGlvbiBTZXJ2aWNlcyIsDQogICAgICAgICAgICAgICAgICAgIkluc3VyYW5jZSBhbmQgRmluYW5jaWFsIFNlcnZpY2VzIiwNCiAgICAgICAgICAgICAgICAgICAiUGVyc29uYWwgQ2FyZSwgU29jaWFsIFByb3RlY3Rpb24gYW5kIE1pc2NlbGxhbmVvdXMgR29vZHMgYW5kIFNlcnZpY2VzIg0KICAgICAgICAgICAgICAgICAgICkNCg0KZGJfY3BpX2NvbnRyaWIgPSBkYl9uc2FfbW9tWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsc19jb250cmliKV0NCmRiX2NwaV9jb250cmliID0gbGVmdF9qb2luKGRiX2NwaV9jb250cmliLCBkYl93ZWlnaHRzKQ0KDQpkYl9jcGlfY29udHJpYiA9IGRiX2NwaV9jb250cmliICU+JSBtdXRhdGUoDQogIA0KICBmb29kID0gYEZvb2QgYW5kIE5vbmFsY29ob2xpYyBCZXZlcmFnZXNgICogYEZvb2QgYW5kIE5vbmFsY29ob2xpYyBCZXZlcmFnZXMgLSBXZWlnaHRgLzEwMDAsDQogIGJldmVyYWdlID0gYEFsY29ob2xpYyBCZXZlcmFnZXMsIFRvYmFjY28gYW5kIE5hcmNvdGljc2AgKiBgQWxjb2hvbGljIEJldmVyYWdlcywgVG9iYWNjbyBhbmQgTmFyY290aWNzIC0gV2VpZ2h0YC8xMDAwLA0KICBjbG90aGluZyA9IGBDbG90aGluZyBhbmQgRm9vdHdlYXJgICogYENsb3RoaW5nIGFuZCBGb290d2VhciAtIFdlaWdodGAvMTAwMCwNCiAgaG91c2luZyA9IGBIb3VzaW5nLCBXYXRlciwgRWxlY3RyaWNpdHksIEdhcyBhbmQgT3RoZXIgRnVlbHNgICogYEhvdXNpbmcsIFdhdGVyLCBFbGVjdHJpY2l0eSwgR2FzIGFuZCBPdGhlciBGdWVscyAtIFdlaWdodGAvMTAwMCwNCiAgZnVybmlzaGluZyA9IGBGdXJuaXNoaW5ncywgSG91c2Vob2xkIEVxdWlwbWVudCBhbmQgUm91dGluZSBIb3VzZWhvbGQgTWFpbnRlbmFuY2VgICogYEZ1cm5pc2hpbmdzLCBIb3VzZWhvbGQgRXF1aXBtZW50IGFuZCBSb3V0aW5lIEhvdXNlaG9sZCBNYWludGVuYW5jZSAtIFdlaWdodGAvMTAwMCwNCiAgaGVhbHRoID0gYEhlYWx0aGAgKiBgSGVhbHRoIC0gV2VpZ2h0YC8xMDAwLA0KICB0cmFuc3BvcnQgPSBgVHJhbnNwb3J0YCAqIGBUcmFuc3BvcnQgLSBXZWlnaHRgLzEwMDAsDQogIGluZm9ybWF0aW9uID0gYEluZm9ybWF0aW9uIGFuZCBDb21tdW5pY2F0aW9uYCAqIGBJbmZvcm1hdGlvbiBhbmQgQ29tbXVuaWNhdGlvbiAtIFdlaWdodGAvMTAwMCwNCiAgcmVjcmVhdGlvbiA9IGBSZWNyZWF0aW9uLCBTcG9ydCBhbmQgQ3VsdHVyZWAgKiBgUmVjcmVhdGlvbiwgU3BvcnQgYW5kIEN1bHR1cmUgLSBXZWlnaHRgLzEwMDAsDQogIGVkdWNhdGlvbiA9IGBFZHVjYXRpb24gU2VydmljZXNgICogYEVkdWNhdGlvbiBTZXJ2aWNlcyAtIFdlaWdodGAvMTAwMCwNCiAgcmVzdGF1cmFudHMgPSBgUmVzdGF1cmFudHMgYW5kIEFjY29tbW9kYXRpb24gU2VydmljZXNgICogYFJlc3RhdXJhbnRzIGFuZCBBY2NvbW1vZGF0aW9uIFNlcnZpY2VzIC0gV2VpZ2h0YC8xMDAwLA0KICBpbnN1cmFuY2UgPSBgSW5zdXJhbmNlIGFuZCBGaW5hbmNpYWwgU2VydmljZXNgICogYEluc3VyYW5jZSBhbmQgRmluYW5jaWFsIFNlcnZpY2VzIC0gV2VpZ2h0YC8xMDAwLA0KICBwZXJzb25hbCA9IGBQZXJzb25hbCBDYXJlLCBTb2NpYWwgUHJvdGVjdGlvbiBhbmQgTWlzY2VsbGFuZW91cyBHb29kcyBhbmQgU2VydmljZXNgICogYFBlcnNvbmFsIENhcmUsIFNvY2lhbCBQcm90ZWN0aW9uIGFuZCBNaXNjZWxsYW5lb3VzIEdvb2RzIGFuZCBTZXJ2aWNlcyAtIFdlaWdodGAvMTAwMCwNCiAgDQopDQoNCmRiX2NwaV9jb250cmliID0gZGJfY3BpX2NvbnRyaWJbLHNldGRpZmYoY29sbmFtZXMoZGJfY3BpX2NvbnRyaWIpLCBjKGxhYmVsc19jb250cmliLCBsYWJlbHNfd2VpZ2h0cykpXQ0KZGJfY3BpX2NvbnRyaWIkVG90YWwgPSByb3dTdW1zKGRiX2NwaV9jb250cmliWywtMV0pDQoNCiMgQ2hhcnQNCg0KZGJfY3BpX2NvbnRyaWIgPSB0YWlsKG5hLm9taXQoZGJfY3BpX2NvbnRyaWIpLCAxMikNCg0KIyBDb2x1bmFzIGRlIGNvbnRyaWJ1acOnw6NvIChleGNsdWkgZGF0YSBlIHRvdGFsKQ0KY29udHJpYl9jb2xzIDwtIHNldGRpZmYobmFtZXMoZGJfY3BpX2NvbnRyaWIpLCBjKCJkYXRlU2Vzc2lvbiIsICJUb3RhbCIpKQ0KDQojIE1hdHJpeg0KbWF0IDwtIGFzLm1hdHJpeChkYl9jcGlfY29udHJpYlssIGNvbnRyaWJfY29sc10pDQoNCiMgVHJhbnNwb3IgKGZvcm1hdG8gcGFyYSBiYXJwbG90KQ0KbWF0X3QgPC0gdChtYXQpDQoNCiMgR2FyYW50aXIgbm9tZXMgKElNUE9SVEFOVEUgcGFyYSBsZWdlbmRhKQ0Kcm93bmFtZXMobWF0X3QpIDwtIGNvbnRyaWJfY29scw0KDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBDT1JFUyAoYWp1c3RlIGxpdnJlKQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09DQoNCmNvcmVzIDwtIGMoDQogICIjMWY3N2I0IiwgIiNmZjdmMGUiLCAiIzJjYTAyYyIsICIjZDYyNzI4IiwNCiAgIiM5NDY3YmQiLCAiIzhjNTY0YiIsICIjZTM3N2MyIiwgIiM3ZjdmN2YiLA0KICAiI2JjYmQyMiIsICIjMTdiZWNmIiwgIiMzOTNiNzkiLCAiIzYzNzkzOSIsDQogICIjOGM2ZDMxIg0KKVsxOm5yb3cobWF0X3QpXQ0KDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHUsOBRklDTzogQkFSUkFTIEVNUElMSEFEQVMNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpicCA8LSBiYXJwbG90KG1hdF90LA0KICAgICAgICAgICAgICBjb2wgPSBjb3JlcywNCiAgICAgICAgICAgICAgYm9yZGVyID0gTkEsDQogICAgICAgICAgICAgIHNwYWNlID0gMCwNCiAgICAgICAgICAgICAgeGF4dCA9ICJuIiwNCiAgICAgICAgICAgICAgeWxhYiA9ICJwcCIsDQogICAgICAgICAgICAgIG1haW4gPSAiQ1BJIENvbnRyaWJ1dGlvbnMiKQ0KDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBFSVhPIFggKERBVEFTKQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09DQoNCmF4aXMoMSwNCiAgICAgYXQgPSBicCwNCiAgICAgbGFiZWxzID0gZm9ybWF0KGRiX2NwaV9jb250cmliJGRhdGVTZXNzaW9uLCAiJWItJXkiKSwNCiAgICAgbGFzID0gMiwNCiAgICAgY2V4LmF4aXMgPSAwLjcpDQoNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09DQojIExJTkhBIERPIFRPVEFMDQojID09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KbGluZXMoYnAsDQogICAgICBkYl9jcGlfY29udHJpYiRUb3RhbCwNCiAgICAgIGNvbCA9ICJibGFjayIsDQogICAgICBsd2QgPSAzKQ0KDQpwb2ludHMoYnAsDQogICAgICAgZGJfY3BpX2NvbnRyaWIkVG90YWwsDQogICAgICAgY29sID0gImJsYWNrIiwNCiAgICAgICBwY2ggPSAxOSwNCiAgICAgICBjZXggPSAwLjYpDQoNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09DQojIExFR0VOREENCiMgPT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpsZWdlbmQoInRvcGxlZnQiLA0KICAgICAgIGxlZ2VuZCA9IHJvd25hbWVzKG1hdF90KSwNCiAgICAgICBmaWxsID0gY29yZXMsDQogICAgICAgY2V4ID0gMC42LA0KICAgICAgIGJ0eSA9ICJuIikNCg0KbGVnZW5kKCJ0b3ByaWdodCIsDQogICAgICAgbGVnZW5kID0gIlRvdGFsIiwNCiAgICAgICBjb2wgPSAiYmxhY2siLA0KICAgICAgIGx3ZCA9IDMsDQogICAgICAgYnR5ID0gIm4iKQ0KDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHUklEDQojID09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KZ3JpZCgpDQoNCg0KDQpgYGANCg0KIyAqKlNhem9uYWxpZGFkZSoqDQoNCiMjIEhlYWRsaW5lDQoNCmBgYHtyIGNwaV9oZWFkbGluZV9zZWFzb25hbCwgZWNobyA9IEYsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KbGFiZWxfY3BpID0gIkNQSSBhbGwgaXRlbXMiDQoNCmRiX2NwaV9zZWFzID0gc3Vic2V0KGRiX25zYV9tb21bLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxfY3BpKV0sIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2NwaV9zZWFzID0gZ2V0X3NlYXNvbmFsX3BhdHRlcm4oZGJfY3BpX3NlYXMpDQoNCiMgR3LDoWZpY29zDQoNCnBsb3QoZGJfY3BpX3NlYXMkbW9udGgsIGRiX2NwaV9zZWFzJHEwNSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHhsYWIgPSAiTW9udGhzIiwgeWxhYiA9ICIlLCBNb00iLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY3BpX3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJTYXpvbmFsaWRhZGUgZGEgaW5mbGHDp8OjbyBoZWFkbGluZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY3BpX3NlYXMkbW9udGgsIGRiX2NwaV9zZWFzJHE1MCwgdHlwZSA9ICJsIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jcGlfc2VhcyRtb250aCwgZGJfY3BpX3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jcGlfc2VhcyRtb250aCwgZGJfY3BpX3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jcGlfc2VhcyRtb250aCwgZGJfY3BpX3NlYXMkYDIwMjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2dyZWVuIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jcGlfc2VhcyRtb250aCwgZGJfY3BpX3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgiYm90dG9tcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQpgYGANCg0KIyMgSGVhZGxpbmUgLSBhYmVydHVyYQ0KDQpgYGB7ciBjcGlfZm9vZF9zZWFzLCBlY2hvID0gRiwgbWVzc2FnZT1GLCB3YXJuaW5nPUZ9DQpsYWJlbF9mb29kID0gIkZvb2QgYW5kIE5vbmFsY29ob2xpYyBCZXZlcmFnZXMiDQpsYWJlbF9iZXZlcmFnZXMgPSAiQWxjb2hvbGljIEJldmVyYWdlcywgVG9iYWNjbyBhbmQgTmFyY290aWNzIg0KDQpkYl9mb29kX3NlYXMgPSBzdWJzZXQoZGJfbnNhX21vbVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9mb29kKV0sIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2Zvb2Rfc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2Zvb2Rfc2VhcykNCg0KZGJfYmV2ZXJhZ2VzX3NlYXMgPSBzdWJzZXQoZGJfbnNhX21vbVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9iZXZlcmFnZXMpXSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfYmV2ZXJhZ2VzX3NlYXMgPSBnZXRfc2Vhc29uYWxfcGF0dGVybihkYl9iZXZlcmFnZXNfc2VhcykNCg0KDQoNCiMgR3LDoWZpY29zDQoNCnBhcihtZnJvdz1jKDEsMikpDQoNCnBsb3QoZGJfZm9vZF9zZWFzJG1vbnRoLCBkYl9mb29kX3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9mb29kX3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJGb29kIGFuZCBub25hbGMuIGJldmVyYWdlcyIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfZm9vZF9zZWFzJG1vbnRoLCBkYl9mb29kX3NlYXMkcTUwLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2Zvb2Rfc2VhcyRtb250aCwgZGJfZm9vZF9zZWFzJHE5NSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfZm9vZF9zZWFzJG1vbnRoLCBkYl9mb29kX3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9mb29kX3NlYXMkbW9udGgsIGRiX2Zvb2Rfc2VhcyRgMjAyNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2Zvb2Rfc2VhcyRtb250aCwgZGJfZm9vZF9zZWFzJGAyMDI2YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoImJvdHRvbXJpZ2h0IiwgYygicTA1IiwgInE1MCIsICJxOTUiLCAiMjAyNCIsICIyMDI1IiwgIjIwMjYiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgInJlZCIsICJwdXJwbGUiLCAiZGFya2dyZWVuIiwgImRhcmtibHVlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAwLjYpDQpncmlkKCkNCg0KDQpwbG90KGRiX2JldmVyYWdlc19zZWFzJG1vbnRoLCBkYl9iZXZlcmFnZXNfc2VhcyRxMDUsIHR5cGUgPSAibCIsIGNvbCA9ICJyZWQiLCB4bGFiID0gIk1vbnRocyIsIHlsYWIgPSAiJSwgTW9NIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2JldmVyYWdlc19zZWFzWywtMV0pKSksIG1haW4gPSAiQWxjb2hvbGljIGJldmVyYWdlcyIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfYmV2ZXJhZ2VzX3NlYXMkbW9udGgsIGRiX2JldmVyYWdlc19zZWFzJHE1MCwgdHlwZSA9ICJsIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9iZXZlcmFnZXNfc2VhcyRtb250aCwgZGJfYmV2ZXJhZ2VzX3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9iZXZlcmFnZXNfc2VhcyRtb250aCwgZGJfYmV2ZXJhZ2VzX3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9iZXZlcmFnZXNfc2VhcyRtb250aCwgZGJfYmV2ZXJhZ2VzX3NlYXMkYDIwMjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2dyZWVuIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9iZXZlcmFnZXNfc2VhcyRtb250aCwgZGJfYmV2ZXJhZ2VzX3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgidG9wcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQoNCmBgYA0KDQpgYGB7ciBjcGlfY2xvdGhpbmdfc2VhcywgZWNobyA9IEYsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KDQpsYWJlbF9jbG90aGluZyA9ICJDbG90aGluZyBhbmQgRm9vdHdlYXIiDQpsYWJlbF9ob3VzaW5nID0gIkhvdXNpbmcsIFdhdGVyLCBFbGVjdHJpY2l0eSwgR2FzIGFuZCBPdGhlciBGdWVscyINCg0KZGJfY2xvdGhpbmdfc2VhcyA9IHN1YnNldChkYl9uc2FfbW9tWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2Nsb3RoaW5nKV0sIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2Nsb3RoaW5nX3NlYXMgPSBnZXRfc2Vhc29uYWxfcGF0dGVybihkYl9jbG90aGluZ19zZWFzKQ0KDQpkYl9ob3VzaW5nX3NlYXMgPSBzdWJzZXQoZGJfbnNhX21vbVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9ob3VzaW5nKV0sIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2hvdXNpbmdfc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2hvdXNpbmdfc2VhcykNCg0KDQojIEdyw6FmaWNvcw0KDQpwYXIobWZyb3c9YygxLDIpKQ0KDQpwbG90KGRiX2Nsb3RoaW5nX3NlYXMkbW9udGgsIGRiX2Nsb3RoaW5nX3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jbG90aGluZ19zZWFzWywtMV0pKSksIG1haW4gPSAiQ2xvdGhpbmciLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2Nsb3RoaW5nX3NlYXMkbW9udGgsIGRiX2Nsb3RoaW5nX3NlYXMkcTUwLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2Nsb3RoaW5nX3NlYXMkbW9udGgsIGRiX2Nsb3RoaW5nX3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jbG90aGluZ19zZWFzJG1vbnRoLCBkYl9jbG90aGluZ19zZWFzJGAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gInB1cnBsZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfY2xvdGhpbmdfc2VhcyRtb250aCwgZGJfY2xvdGhpbmdfc2VhcyRgMjAyNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2Nsb3RoaW5nX3NlYXMkbW9udGgsIGRiX2Nsb3RoaW5nX3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgiYm90dG9tcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQoNCnBsb3QoZGJfaG91c2luZ19zZWFzJG1vbnRoLCBkYl9ob3VzaW5nX3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9ob3VzaW5nX3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJIb3VzaW5nIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9ob3VzaW5nX3NlYXMkbW9udGgsIGRiX2hvdXNpbmdfc2VhcyRxNTAsIHR5cGUgPSAibCIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfaG91c2luZ19zZWFzJG1vbnRoLCBkYl9ob3VzaW5nX3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9ob3VzaW5nX3NlYXMkbW9udGgsIGRiX2hvdXNpbmdfc2VhcyRgMjAyNGAsIHR5cGUgPSAibCIsIGNvbCA9ICJwdXJwbGUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2hvdXNpbmdfc2VhcyRtb250aCwgZGJfaG91c2luZ19zZWFzJGAyMDI1YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtncmVlbiIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfaG91c2luZ19zZWFzJG1vbnRoLCBkYl9ob3VzaW5nX3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgidG9wcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQoNCmBgYA0KDQpgYGB7ciBjcGlfZnVybmlzaGluZ19zZWFzLCBlY2hvID0gRiwgbWVzc2FnZT1GLCB3YXJuaW5nPUZ9DQoNCmxhYmVsX2Z1cm5pc2hpbmcgPSAiRnVybmlzaGluZ3MsIEhvdXNlaG9sZCBFcXVpcG1lbnQgYW5kIFJvdXRpbmUgSG91c2Vob2xkIE1haW50ZW5hbmNlIg0KbGFiZWxfaGVhbHRoID0gIkhlYWx0aCINCg0KZGJfZnVybmlzaGluZ19zZWFzID0gc3Vic2V0KGRiX25zYV9tb21bLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxfZnVybmlzaGluZyldLCBkYXRlU2Vzc2lvbiA+PSBzdGFydF9kYXRlX3NlYXMpDQpkYl9mdXJuaXNoaW5nX3NlYXMgPSBnZXRfc2Vhc29uYWxfcGF0dGVybihkYl9mdXJuaXNoaW5nX3NlYXMpDQoNCmRiX2hlYWx0aF9zZWFzID0gc3Vic2V0KGRiX25zYV9tb21bLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxfaGVhbHRoKV0sIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2hlYWx0aF9zZWFzID0gZ2V0X3NlYXNvbmFsX3BhdHRlcm4oZGJfaGVhbHRoX3NlYXMpDQoNCg0KIyBHcsOhZmljb3MNCg0KcGFyKG1mcm93PWMoMSwyKSkNCg0KcGxvdChkYl9mdXJuaXNoaW5nX3NlYXMkbW9udGgsIGRiX2Z1cm5pc2hpbmdfc2VhcyRxMDUsIHR5cGUgPSAibCIsIGNvbCA9ICJyZWQiLCB4bGFiID0gIk1vbnRocyIsIHlsYWIgPSAiJSwgTW9NIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2Z1cm5pc2hpbmdfc2Vhc1ssLTFdKSkpLCBtYWluID0gIkZ1cm5pc2hpbmciLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2Z1cm5pc2hpbmdfc2VhcyRtb250aCwgZGJfZnVybmlzaGluZ19zZWFzJHE1MCwgdHlwZSA9ICJsIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9mdXJuaXNoaW5nX3NlYXMkbW9udGgsIGRiX2Z1cm5pc2hpbmdfc2VhcyRxOTUsIHR5cGUgPSAibCIsIGNvbCA9ICJyZWQiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2Z1cm5pc2hpbmdfc2VhcyRtb250aCwgZGJfZnVybmlzaGluZ19zZWFzJGAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gInB1cnBsZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfZnVybmlzaGluZ19zZWFzJG1vbnRoLCBkYl9mdXJuaXNoaW5nX3NlYXMkYDIwMjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2dyZWVuIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9mdXJuaXNoaW5nX3NlYXMkbW9udGgsIGRiX2Z1cm5pc2hpbmdfc2VhcyRgMjAyNmAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJib3R0b21yaWdodCIsIGMoInEwNSIsICJxNTAiLCAicTk1IiwgIjIwMjQiLCAiMjAyNSIsICIyMDI2IiksIGNvbCA9IGMoInJlZCIsICJibGFjayIsICJyZWQiLCAicHVycGxlIiwgImRhcmtncmVlbiIsICJkYXJrYmx1ZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMC42KQ0KZ3JpZCgpDQoNCg0KcGxvdChkYl9oZWFsdGhfc2VhcyRtb250aCwgZGJfaGVhbHRoX3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9oZWFsdGhfc2Vhc1ssLTFdKSkpLCBtYWluID0gIkhlYWx0aCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfaGVhbHRoX3NlYXMkbW9udGgsIGRiX2hlYWx0aF9zZWFzJHE1MCwgdHlwZSA9ICJsIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9oZWFsdGhfc2VhcyRtb250aCwgZGJfaGVhbHRoX3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9oZWFsdGhfc2VhcyRtb250aCwgZGJfaGVhbHRoX3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9oZWFsdGhfc2VhcyRtb250aCwgZGJfaGVhbHRoX3NlYXMkYDIwMjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2dyZWVuIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9oZWFsdGhfc2VhcyRtb250aCwgZGJfaGVhbHRoX3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgiYm90dG9tcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQoNCmBgYA0KDQpgYGB7ciBjcGlfdHJhbnNwb3J0X3NlYXMsIGVjaG8gPSBGLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0NCg0KbGFiZWxfdHJhbnNwb3J0ID0gIlRyYW5zcG9ydCINCmxhYmVsX2luZm9ybWF0aW9uID0gIkluZm9ybWF0aW9uIGFuZCBDb21tdW5pY2F0aW9uIg0KDQpkYl90cmFuc3BvcnRfc2VhcyA9IHN1YnNldChkYl9uc2FfbW9tWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX3RyYW5zcG9ydCldLCBkYXRlU2Vzc2lvbiA+PSBzdGFydF9kYXRlX3NlYXMpDQpkYl90cmFuc3BvcnRfc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX3RyYW5zcG9ydF9zZWFzKQ0KDQpkYl9pbmZvcm1hdGlvbl9zZWFzID0gc3Vic2V0KGRiX25zYV9tb21bLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxfaW5mb3JtYXRpb24pXSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfaW5mb3JtYXRpb25fc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2luZm9ybWF0aW9uX3NlYXMpDQoNCg0KIyBHcsOhZmljb3MNCg0KcGFyKG1mcm93PWMoMSwyKSkNCg0KcGxvdChkYl90cmFuc3BvcnRfc2VhcyRtb250aCwgZGJfdHJhbnNwb3J0X3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl90cmFuc3BvcnRfc2Vhc1ssLTFdKSkpLCBtYWluID0gIlRyYW5zcG9ydCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfdHJhbnNwb3J0X3NlYXMkbW9udGgsIGRiX3RyYW5zcG9ydF9zZWFzJHE1MCwgdHlwZSA9ICJsIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl90cmFuc3BvcnRfc2VhcyRtb250aCwgZGJfdHJhbnNwb3J0X3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl90cmFuc3BvcnRfc2VhcyRtb250aCwgZGJfdHJhbnNwb3J0X3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl90cmFuc3BvcnRfc2VhcyRtb250aCwgZGJfdHJhbnNwb3J0X3NlYXMkYDIwMjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2dyZWVuIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl90cmFuc3BvcnRfc2VhcyRtb250aCwgZGJfdHJhbnNwb3J0X3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgiYm90dG9tcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQoNCnBsb3QoZGJfaW5mb3JtYXRpb25fc2VhcyRtb250aCwgZGJfaW5mb3JtYXRpb25fc2VhcyRxMDUsIHR5cGUgPSAibCIsIGNvbCA9ICJyZWQiLCB4bGFiID0gIk1vbnRocyIsIHlsYWIgPSAiJSwgTW9NIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2luZm9ybWF0aW9uX3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJJbmZvcm1hdGlvbiIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfaW5mb3JtYXRpb25fc2VhcyRtb250aCwgZGJfaW5mb3JtYXRpb25fc2VhcyRxNTAsIHR5cGUgPSAibCIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfaW5mb3JtYXRpb25fc2VhcyRtb250aCwgZGJfaW5mb3JtYXRpb25fc2VhcyRxOTUsIHR5cGUgPSAibCIsIGNvbCA9ICJyZWQiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2luZm9ybWF0aW9uX3NlYXMkbW9udGgsIGRiX2luZm9ybWF0aW9uX3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9pbmZvcm1hdGlvbl9zZWFzJG1vbnRoLCBkYl9pbmZvcm1hdGlvbl9zZWFzJGAyMDI1YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtncmVlbiIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfaW5mb3JtYXRpb25fc2VhcyRtb250aCwgZGJfaW5mb3JtYXRpb25fc2VhcyRgMjAyNmAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJib3R0b21yaWdodCIsIGMoInEwNSIsICJxNTAiLCAicTk1IiwgIjIwMjQiLCAiMjAyNSIsICIyMDI2IiksIGNvbCA9IGMoInJlZCIsICJibGFjayIsICJyZWQiLCAicHVycGxlIiwgImRhcmtncmVlbiIsICJkYXJrYmx1ZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMC42KQ0KZ3JpZCgpDQoNCg0KYGBgDQoNCmBgYHtyIGNwaV9yZWNyZWF0aW9uX3NlYXMsIGVjaG8gPSBGLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0NCg0KbGFiZWxfcmVjcmVhdGlvbiA9ICJSZWNyZWF0aW9uLCBTcG9ydCBhbmQgQ3VsdHVyZSINCmxhYmVsX2VkdWNhdGlvbiA9ICJFZHVjYXRpb24gU2VydmljZXMiDQoNCmRiX3JlY3JlYXRpb25fc2VhcyA9IHN1YnNldChkYl9uc2FfbW9tWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX3JlY3JlYXRpb24pXSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfcmVjcmVhdGlvbl9zZWFzID0gZ2V0X3NlYXNvbmFsX3BhdHRlcm4oZGJfcmVjcmVhdGlvbl9zZWFzKQ0KDQpkYl9lZHVjYXRpb25fc2VhcyA9IHN1YnNldChkYl9uc2FfbW9tWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2VkdWNhdGlvbildLCBkYXRlU2Vzc2lvbiA+PSBzdGFydF9kYXRlX3NlYXMpDQpkYl9lZHVjYXRpb25fc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2VkdWNhdGlvbl9zZWFzKQ0KDQoNCiMgR3LDoWZpY29zDQoNCnBhcihtZnJvdz1jKDEsMikpDQoNCnBsb3QoZGJfcmVjcmVhdGlvbl9zZWFzJG1vbnRoLCBkYl9yZWNyZWF0aW9uX3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9yZWNyZWF0aW9uX3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJSZWNyZWF0aW9uIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9yZWNyZWF0aW9uX3NlYXMkbW9udGgsIGRiX3JlY3JlYXRpb25fc2VhcyRxNTAsIHR5cGUgPSAibCIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfcmVjcmVhdGlvbl9zZWFzJG1vbnRoLCBkYl9yZWNyZWF0aW9uX3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9yZWNyZWF0aW9uX3NlYXMkbW9udGgsIGRiX3JlY3JlYXRpb25fc2VhcyRgMjAyNGAsIHR5cGUgPSAibCIsIGNvbCA9ICJwdXJwbGUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX3JlY3JlYXRpb25fc2VhcyRtb250aCwgZGJfcmVjcmVhdGlvbl9zZWFzJGAyMDI1YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtncmVlbiIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfcmVjcmVhdGlvbl9zZWFzJG1vbnRoLCBkYl9yZWNyZWF0aW9uX3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgiYm90dG9tcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQoNCnBsb3QoZGJfZWR1Y2F0aW9uX3NlYXMkbW9udGgsIGRiX2VkdWNhdGlvbl9zZWFzJHEwNSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHhsYWIgPSAiTW9udGhzIiwgeWxhYiA9ICIlLCBNb00iLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfZWR1Y2F0aW9uX3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJFZHVjYXRpb24iLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2VkdWNhdGlvbl9zZWFzJG1vbnRoLCBkYl9lZHVjYXRpb25fc2VhcyRxNTAsIHR5cGUgPSAibCIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfZWR1Y2F0aW9uX3NlYXMkbW9udGgsIGRiX2VkdWNhdGlvbl9zZWFzJHE5NSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfZWR1Y2F0aW9uX3NlYXMkbW9udGgsIGRiX2VkdWNhdGlvbl9zZWFzJGAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gInB1cnBsZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfZWR1Y2F0aW9uX3NlYXMkbW9udGgsIGRiX2VkdWNhdGlvbl9zZWFzJGAyMDI1YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtncmVlbiIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfZWR1Y2F0aW9uX3NlYXMkbW9udGgsIGRiX2VkdWNhdGlvbl9zZWFzJGAyMDI2YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoInRvcHJpZ2h0IiwgYygicTA1IiwgInE1MCIsICJxOTUiLCAiMjAyNCIsICIyMDI1IiwgIjIwMjYiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgInJlZCIsICJwdXJwbGUiLCAiZGFya2dyZWVuIiwgImRhcmtibHVlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAwLjYpDQpncmlkKCkNCg0KDQpgYGANCg0KYGBge3IgY3BpX3Jlc3RhdXJhbnRzX3NlYXMsIGVjaG8gPSBGLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0NCg0KbGFiZWxfcmVzdGF1cmFudHMgPSAiUmVzdGF1cmFudHMgYW5kIEFjY29tbW9kYXRpb24gU2VydmljZXMiDQpsYWJlbF9pbnN1cmFuY2UgPSAiSW5zdXJhbmNlIGFuZCBGaW5hbmNpYWwgU2VydmljZXMiDQoNCmRiX3Jlc3RhdXJhbnRzX3NlYXMgPSBzdWJzZXQoZGJfbnNhX21vbVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9yZXN0YXVyYW50cyldLCBkYXRlU2Vzc2lvbiA+PSBzdGFydF9kYXRlX3NlYXMpDQpkYl9yZXN0YXVyYW50c19zZWFzID0gZ2V0X3NlYXNvbmFsX3BhdHRlcm4oZGJfcmVzdGF1cmFudHNfc2VhcykNCg0KZGJfaW5zdXJhbmNlX3NlYXMgPSBzdWJzZXQoZGJfbnNhX21vbVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9pbnN1cmFuY2UpXSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfaW5zdXJhbmNlX3NlYXMgPSBnZXRfc2Vhc29uYWxfcGF0dGVybihkYl9pbnN1cmFuY2Vfc2VhcykNCg0KDQojIEdyw6FmaWNvcw0KDQpwYXIobWZyb3c9YygxLDIpKQ0KDQpwbG90KGRiX3Jlc3RhdXJhbnRzX3NlYXMkbW9udGgsIGRiX3Jlc3RhdXJhbnRzX3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9yZXN0YXVyYW50c19zZWFzWywtMV0pKSksIG1haW4gPSAiUmVzdGF1cmFudHMiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX3Jlc3RhdXJhbnRzX3NlYXMkbW9udGgsIGRiX3Jlc3RhdXJhbnRzX3NlYXMkcTUwLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX3Jlc3RhdXJhbnRzX3NlYXMkbW9udGgsIGRiX3Jlc3RhdXJhbnRzX3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9yZXN0YXVyYW50c19zZWFzJG1vbnRoLCBkYl9yZXN0YXVyYW50c19zZWFzJGAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gInB1cnBsZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfcmVzdGF1cmFudHNfc2VhcyRtb250aCwgZGJfcmVzdGF1cmFudHNfc2VhcyRgMjAyNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX3Jlc3RhdXJhbnRzX3NlYXMkbW9udGgsIGRiX3Jlc3RhdXJhbnRzX3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgidG9wcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQoNCnBsb3QoZGJfaW5zdXJhbmNlX3NlYXMkbW9udGgsIGRiX2luc3VyYW5jZV9zZWFzJHEwNSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHhsYWIgPSAiTW9udGhzIiwgeWxhYiA9ICIlLCBNb00iLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfaW5zdXJhbmNlX3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJJbnN1cmFuY2UiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2luc3VyYW5jZV9zZWFzJG1vbnRoLCBkYl9pbnN1cmFuY2Vfc2VhcyRxNTAsIHR5cGUgPSAibCIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfaW5zdXJhbmNlX3NlYXMkbW9udGgsIGRiX2luc3VyYW5jZV9zZWFzJHE5NSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfaW5zdXJhbmNlX3NlYXMkbW9udGgsIGRiX2luc3VyYW5jZV9zZWFzJGAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gInB1cnBsZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfaW5zdXJhbmNlX3NlYXMkbW9udGgsIGRiX2luc3VyYW5jZV9zZWFzJGAyMDI1YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtncmVlbiIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfaW5zdXJhbmNlX3NlYXMkbW9udGgsIGRiX2luc3VyYW5jZV9zZWFzJGAyMDI2YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoInRvcHJpZ2h0IiwgYygicTA1IiwgInE1MCIsICJxOTUiLCAiMjAyNCIsICIyMDI1IiwgIjIwMjYiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgInJlZCIsICJwdXJwbGUiLCAiZGFya2dyZWVuIiwgImRhcmtibHVlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAwLjYpDQpncmlkKCkNCg0KDQpgYGANCg0KIyMgQ29yZSBleC1hbGltZW50b3MgZSBlbmVyZ2lhDQoNCmBgYHtyIGNwaV9jb3JlX2V4Zm9vZF9zZWFzLCBlY2hvID0gRiwgbWVzc2FnZT1GLCB3YXJuaW5nPUZ9DQoNCmxhYmVsX2NvcmUgPSAiQ1BJRiBleGNsdWRpbmcgZW5lcmd5IGFuZCB1bnByb2Nlc3NlZCBmb29kIg0KDQpkYl9jb3JlX3NlYXMgPSBzdWJzZXQoZGJfbnNhX21vbVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlKV0sIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2NvcmVfc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2NvcmVfc2VhcykNCg0KIyBHcsOhZmljbw0KDQpwbG90KGRiX2NvcmVfc2VhcyRtb250aCwgZGJfY29yZV9zZWFzJHEwNSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHhsYWIgPSAiTW9udGhzIiwgeWxhYiA9ICIlLCBNb00iLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY29yZV9zZWFzWywtMV0pKSksIG1haW4gPSAiU2F6b25hbGlkYWRlIGRhIGluZmxhw6fDo28gY29yZSBleC1hbGltZW50b3MgZSBlbmVyZ2lhIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jb3JlX3NlYXMkbW9udGgsIGRiX2NvcmVfc2VhcyRxNTAsIHR5cGUgPSAibCIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfY29yZV9zZWFzJG1vbnRoLCBkYl9jb3JlX3NlYXMkcTk1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jb3JlX3NlYXMkbW9udGgsIGRiX2NvcmVfc2VhcyRgMjAyNGAsIHR5cGUgPSAibCIsIGNvbCA9ICJwdXJwbGUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfc2VhcyRtb250aCwgZGJfY29yZV9zZWFzJGAyMDI1YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtncmVlbiIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfY29yZV9zZWFzJG1vbnRoLCBkYl9jb3JlX3NlYXMkYDIwMjZgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgidG9wcmlnaHQiLCBjKCJxMDUiLCAicTUwIiwgInE5NSIsICIyMDI0IiwgIjIwMjUiLCAiMjAyNiIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAicmVkIiwgInB1cnBsZSIsICJkYXJrZ3JlZW4iLCAiZGFya2JsdWUiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDAuNikNCmdyaWQoKQ0KDQpgYGANCg0KDQojIyBDb3JlIFRyaW1tZWQgbWVhbnMgODUNCg0KDQpgYGB7ciBjcGlfY29yZV90cmltODVfc2VhcywgZWNobyA9IEYsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KDQpsYWJlbF9jb3JlX3RyaW04NSA9ICJDb3JlIC0gVFJJTTg1Ig0KDQpkYl9jb3JlX3RyaW04NV9zZWFzID0gc3Vic2V0KGRiX25zYV9tb21bLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxfY29yZV90cmltODUpXSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfY29yZV90cmltODVfc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2NvcmVfdHJpbTg1X3NlYXMpDQoNCiMgR3LDoWZpY28NCg0KcGxvdChkYl9jb3JlX3RyaW04NV9zZWFzJG1vbnRoLCBkYl9jb3JlX3RyaW04NV9zZWFzJHEwNSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHhsYWIgPSAiTW9udGhzIiwgeWxhYiA9ICIlLCBNb00iLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY29yZV90cmltODVfc2Vhc1ssLTFdKSkpLCBtYWluID0gIlNhem9uYWxpZGFkZSBkYSBpbmZsYcOnw6NvIGNvcmUgVHJpbSA4NSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV90cmltODVfc2VhcyRtb250aCwgZGJfY29yZV90cmltODVfc2VhcyRxNTAsIHR5cGUgPSAibCIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfY29yZV90cmltODVfc2VhcyRtb250aCwgZGJfY29yZV90cmltODVfc2VhcyRxOTUsIHR5cGUgPSAibCIsIGNvbCA9ICJyZWQiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2NvcmVfdHJpbTg1X3NlYXMkbW9udGgsIGRiX2NvcmVfdHJpbTg1X3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jb3JlX3RyaW04NV9zZWFzJG1vbnRoLCBkYl9jb3JlX3RyaW04NV9zZWFzJGAyMDI1YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtncmVlbiIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoZGJfY29yZV90cmltODVfc2VhcyRtb250aCwgZGJfY29yZV90cmltODVfc2VhcyRgMjAyNmAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJ0b3ByaWdodCIsIGMoInEwNSIsICJxNTAiLCAicTk1IiwgIjIwMjQiLCAiMjAyNSIsICIyMDI2IiksIGNvbCA9IGMoInJlZCIsICJibGFjayIsICJyZWQiLCAicHVycGxlIiwgImRhcmtncmVlbiIsICJkYXJrYmx1ZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMC42KQ0KZ3JpZCgpDQoNCmBgYA0KDQoNCiMjIENvcmUgVHJpbW1lZCBtZWFucyAxDQoNCmBgYHtyIGNwaV9jb3JlX3RyaW0xX3NlYXMsIGVjaG8gPSBGLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0NCg0KbGFiZWxfY29yZV90cmltMSA9ICJDb3JlIC0gVFJJTTEiDQoNCmRiX2NvcmVfdHJpbTFfc2VhcyA9IHN1YnNldChkYl9uc2FfbW9tWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2NvcmVfdHJpbTEpXSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfY29yZV90cmltMV9zZWFzID0gZ2V0X3NlYXNvbmFsX3BhdHRlcm4oZGJfY29yZV90cmltMV9zZWFzKQ0KDQojIEdyw6FmaWNvDQoNCnBsb3QoZGJfY29yZV90cmltMV9zZWFzJG1vbnRoLCBkYl9jb3JlX3RyaW0xX3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jb3JlX3RyaW0xX3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJTYXpvbmFsaWRhZGUgZGEgaW5mbGHDp8OjbyBjb3JlIFRyaW0gMSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV90cmltMV9zZWFzJG1vbnRoLCBkYl9jb3JlX3RyaW0xX3NlYXMkcTUwLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfdHJpbTFfc2VhcyRtb250aCwgZGJfY29yZV90cmltMV9zZWFzJHE5NSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV90cmltMV9zZWFzJG1vbnRoLCBkYl9jb3JlX3RyaW0xX3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jb3JlX3RyaW0xX3NlYXMkbW9udGgsIGRiX2NvcmVfdHJpbTFfc2VhcyRgMjAyNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfdHJpbTFfc2VhcyRtb250aCwgZGJfY29yZV90cmltMV9zZWFzJGAyMDI2YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoInRvcHJpZ2h0IiwgYygicTA1IiwgInE1MCIsICJxOTUiLCAiMjAyNCIsICIyMDI1IiwgIjIwMjYiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgInJlZCIsICJwdXJwbGUiLCAiZGFya2dyZWVuIiwgImRhcmtibHVlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAwLjYpDQpncmlkKCkNCg0KDQpgYGANCg0KDQojIyBDb3JlIFVuZDI0IC0gcmVwb25kZXJhw6fDo28gZG9zIHBlc29zDQoNCmBgYHtyIGNwaV9jb3JlX3VuZDI0X3NlYXMsIGVjaG8gPSBGLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0NCg0KbGFiZWxfY29yZV91bmQyNCA9ICJDb3JlIC0gVU5EMjQiDQoNCmRiX2NvcmVfdW5kMjRfc2VhcyA9IHN1YnNldChkYl9uc2FfbW9tWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2NvcmVfdW5kMjQpXSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfY29yZV91bmQyNF9zZWFzID0gZ2V0X3NlYXNvbmFsX3BhdHRlcm4oZGJfY29yZV91bmQyNF9zZWFzKQ0KDQojIEdyw6FmaWNvDQoNCnBsb3QoZGJfY29yZV91bmQyNF9zZWFzJG1vbnRoLCBkYl9jb3JlX3VuZDI0X3NlYXMkcTA1LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIiwgeGxhYiA9ICJNb250aHMiLCB5bGFiID0gIiUsIE1vTSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jb3JlX3VuZDI0X3NlYXNbLC0xXSkpKSwgbWFpbiA9ICJTYXpvbmFsaWRhZGUgZGEgaW5mbGHDp8OjbyBjb3JlIFVuZCAyNCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV91bmQyNF9zZWFzJG1vbnRoLCBkYl9jb3JlX3VuZDI0X3NlYXMkcTUwLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfdW5kMjRfc2VhcyRtb250aCwgZGJfY29yZV91bmQyNF9zZWFzJHE5NSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV91bmQyNF9zZWFzJG1vbnRoLCBkYl9jb3JlX3VuZDI0X3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jb3JlX3VuZDI0X3NlYXMkbW9udGgsIGRiX2NvcmVfdW5kMjRfc2VhcyRgMjAyNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfdW5kMjRfc2VhcyRtb250aCwgZGJfY29yZV91bmQyNF9zZWFzJGAyMDI2YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoInRvcHJpZ2h0IiwgYygicTA1IiwgInE1MCIsICJxOTUiLCAiMjAyNCIsICIyMDI1IiwgIjIwMjYiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgInJlZCIsICJwdXJwbGUiLCAiZGFya2dyZWVuIiwgImRhcmtibHVlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAwLjYpDQpncmlkKCkNCg0KDQpgYGANCg0KDQojIyBDb3JlIEtQSUZQQyAtIGNvcmUgZXN0YXTDrXN0aWNvIHBvciBQQ0ENCg0KDQpgYGB7ciBjcGlfY29yZV9rcGlmcGNfc2VhcywgZWNobyA9IEYsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KDQpsYWJlbF9jb3JlX2twaWZwYyA9ICJDb3JlIC0gS1BJRlBDIg0KDQpkYl9jb3JlX2twaWZwY19zZWFzID0gc3Vic2V0KGRiX25zYV9tb21bLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxfY29yZV9rcGlmcGMpXSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfY29yZV9rcGlmcGNfc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2NvcmVfa3BpZnBjX3NlYXMpDQoNCiMgR3LDoWZpY28NCg0KcGxvdChkYl9jb3JlX2twaWZwY19zZWFzJG1vbnRoLCBkYl9jb3JlX2twaWZwY19zZWFzJHEwNSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHhsYWIgPSAiTW9udGhzIiwgeWxhYiA9ICIlLCBNb00iLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY29yZV9rcGlmcGNfc2Vhc1ssLTFdKSkpLCBtYWluID0gIlNhem9uYWxpZGFkZSBkYSBpbmZsYcOnw6NvIGNvcmUgS1BJRlBDIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jb3JlX2twaWZwY19zZWFzJG1vbnRoLCBkYl9jb3JlX2twaWZwY19zZWFzJHE1MCwgdHlwZSA9ICJsIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jb3JlX2twaWZwY19zZWFzJG1vbnRoLCBkYl9jb3JlX2twaWZwY19zZWFzJHE5NSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV9rcGlmcGNfc2VhcyRtb250aCwgZGJfY29yZV9rcGlmcGNfc2VhcyRgMjAyNGAsIHR5cGUgPSAibCIsIGNvbCA9ICJwdXJwbGUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfa3BpZnBjX3NlYXMkbW9udGgsIGRiX2NvcmVfa3BpZnBjX3NlYXMkYDIwMjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2dyZWVuIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jb3JlX2twaWZwY19zZWFzJG1vbnRoLCBkYl9jb3JlX2twaWZwY19zZWFzJGAyMDI2YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoInRvcHJpZ2h0IiwgYygicTA1IiwgInE1MCIsICJxOTUiLCAiMjAyNCIsICIyMDI1IiwgIjIwMjYiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgInJlZCIsICJwdXJwbGUiLCAiZGFya2dyZWVuIiwgImRhcmtibHVlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAwLjYpDQpncmlkKCkNCg0KYGBgDQoNCiMjIENvcmUgU2VydmljZXMNCg0KYGBge3IgY3BpX2NvcmVfc2VydmljZXNfc2VhcywgZWNobyA9IEYsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KDQpsYWJlbF9jb3JlX3NlcnZpY2VzID0gIlNlcnZpY2VzIg0KDQpkYl9jb3JlX3NlcnZpY2VzX3NlYXMgPSBzdWJzZXQoZGJfbnNhX21vbVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX3NlcnZpY2VzKV0sIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2NvcmVfc2VydmljZXNfc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2NvcmVfc2VydmljZXNfc2VhcykNCg0KIyBHcsOhZmljbw0KDQpwbG90KGRiX2NvcmVfc2VydmljZXNfc2VhcyRtb250aCwgZGJfY29yZV9zZXJ2aWNlc19zZWFzJHEwNSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHhsYWIgPSAiTW9udGhzIiwgeWxhYiA9ICIlLCBNb00iLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY29yZV9zZXJ2aWNlc19zZWFzWywtMV0pKSksIG1haW4gPSAiU2F6b25hbGlkYWRlIGRhIGluZmxhw6fDo28gY29yZSBzZXJ2aWNlcyIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV9zZXJ2aWNlc19zZWFzJG1vbnRoLCBkYl9jb3JlX3NlcnZpY2VzX3NlYXMkcTUwLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfc2VydmljZXNfc2VhcyRtb250aCwgZGJfY29yZV9zZXJ2aWNlc19zZWFzJHE5NSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV9zZXJ2aWNlc19zZWFzJG1vbnRoLCBkYl9jb3JlX3NlcnZpY2VzX3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jb3JlX3NlcnZpY2VzX3NlYXMkbW9udGgsIGRiX2NvcmVfc2VydmljZXNfc2VhcyRgMjAyNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfc2VydmljZXNfc2VhcyRtb250aCwgZGJfY29yZV9zZXJ2aWNlc19zZWFzJGAyMDI2YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoInRvcHJpZ2h0IiwgYygicTA1IiwgInE1MCIsICJxOTUiLCAiMjAyNCIsICIyMDI1IiwgIjIwMjYiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgInJlZCIsICJwdXJwbGUiLCAiZGFya2dyZWVuIiwgImRhcmtibHVlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAwLjYpDQpncmlkKCkNCg0KYGBgDQoNCiMjIENvcmUgR29vZHMNCg0KYGBge3IgY3BpX2NvcmVfZ29vZHNfc2VhcywgZWNobyA9IEYsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KDQpsYWJlbF9jb3JlX2dvb2RzID0gIkdvb2RzIg0KDQpkYl9jb3JlX2dvb2RzX3NlYXMgPSBzdWJzZXQoZGJfbnNhX21vbVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX2dvb2RzKV0sIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2NvcmVfZ29vZHNfc2VhcyA9IGdldF9zZWFzb25hbF9wYXR0ZXJuKGRiX2NvcmVfZ29vZHNfc2VhcykNCg0KIyBHcsOhZmljbw0KDQpwbG90KGRiX2NvcmVfZ29vZHNfc2VhcyRtb250aCwgZGJfY29yZV9nb29kc19zZWFzJHEwNSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHhsYWIgPSAiTW9udGhzIiwgeWxhYiA9ICIlLCBNb00iLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY29yZV9nb29kc19zZWFzWywtMV0pKSksIG1haW4gPSAiU2F6b25hbGlkYWRlIGRhIGluZmxhw6fDo28gY29yZSBnb29kcyIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV9nb29kc19zZWFzJG1vbnRoLCBkYl9jb3JlX2dvb2RzX3NlYXMkcTUwLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfZ29vZHNfc2VhcyRtb250aCwgZGJfY29yZV9nb29kc19zZWFzJHE5NSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV9nb29kc19zZWFzJG1vbnRoLCBkYl9jb3JlX2dvb2RzX3NlYXMkYDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAicHVycGxlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcyhkYl9jb3JlX2dvb2RzX3NlYXMkbW9udGgsIGRiX2NvcmVfZ29vZHNfc2VhcyRgMjAyNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKGRiX2NvcmVfZ29vZHNfc2VhcyRtb250aCwgZGJfY29yZV9nb29kc19zZWFzJGAyMDI2YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoImJvdHRvbXJpZ2h0IiwgYygicTA1IiwgInE1MCIsICJxOTUiLCAiMjAyNCIsICIyMDI1IiwgIjIwMjYiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgInJlZCIsICJwdXJwbGUiLCAiZGFya2dyZWVuIiwgImRhcmtibHVlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAwLjYpDQpncmlkKCkNCg0KYGBgDQoNCiMgKipJbmZsYcOnw6NvIG5hcyBtZWRpZGFzIFNBQVIgZSBZb1kqKg0KDQojIyBIZWFkbGluZQ0KDQpgYGB7ciBjcGlfaGVhZGxpbmVfeW95X3NhYXIsIGVjaG89Riwgd2FybmluZz1GLCBtZXNzYWdlPUZ9DQoNCmRiX2NwaV95b3kgPSBuYS5vbWl0KGRiX25zYV95b3lbLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxfY3BpKV0pDQpjb2xuYW1lcyhkYl9jcGlfeW95KVstMV0gPSAiWW9ZIg0KZGJfY3BpX3NhYXIgPSBuYS5vbWl0KGRiX3NhX3NhYXJbLGMoImRhdGVTZXNzaW9uIiwgbGFiZWxfY3BpKV0pDQpjb2xuYW1lcyhkYl9jcGlfc2FhcilbLTFdID0gIlNBQVIiDQoNCmRiX2NwaSA9IGxlZnRfam9pbihkYl9jcGlfeW95LCBkYl9jcGlfc2FhciwgYnkgPSAiZGF0ZVNlc3Npb24iKQ0KZGJfY3BpID0gc3Vic2V0KGRiX2NwaSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfY3BpX3Nob3J0ID0gdGFpbChkYl9jcGksIG5wZXJfeW95KQ0KDQppZHhfbGFzdCA9IG5yb3coZGJfY3BpX3Nob3J0KQ0KDQoNCiMgQ2hhcnQNCnBhcihtZnJvdz1jKDEsMikpDQoNCnBsb3QoZGJfY3BpJGRhdGVTZXNzaW9uLCBkYl9jcGkkWW9ZLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCB4bGFiID0gIkRhdGUiLCB5bGFiID0gIiUiLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY3BpWywtMV0pKSksIG1haW4gPSAiQ1BJIGhlYWRsaW5lIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jcGkkZGF0ZVNlc3Npb24sIGRiX2NwaSRTQUFSLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya29yYW5nZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJ0b3BsZWZ0IiwgYygiWW9ZIiwgIlNBQVIiKSwgY29sID0gYygiZGFya2JsdWUiLCAiZGFya29yYW5nZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMSkNCmFibGluZShoID0gY3BpX3RhcmdldCwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIGx0eSA9IDMpDQpncmlkKCkNCg0KcGxvdChkYl9jcGlfc2hvcnQkZGF0ZVNlc3Npb24sIGRiX2NwaV9zaG9ydCRZb1ksIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHhsYWIgPSAiRGF0ZSIsIHlsYWIgPSAiJSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jcGlfc2hvcnRbLC0xXSkpKSwgbWFpbiA9ICJDUEkgaGVhZGxpbmUgLSByZWNlbnRlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jcGlfc2hvcnQkZGF0ZVNlc3Npb24sIGRiX2NwaV9zaG9ydCRTQUFSLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya29yYW5nZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJ0b3ByaWdodCIsIGMoIllvWSIsICJTQUFSIiksIGNvbCA9IGMoImRhcmtibHVlIiwgImRhcmtvcmFuZ2UiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDEpDQphYmxpbmUoaCA9IGNwaV90YXJnZXQsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCBsdHkgPSAzKQ0KdGV4dCgNCiAgeCA9IGRiX2NwaV9zaG9ydCRkYXRlU2Vzc2lvbltpZHhfbGFzdF0sDQogIHkgPSBkYl9jcGlfc2hvcnQkWW9ZW2lkeF9sYXN0XSwNCiAgbGFiZWxzID0gcm91bmQoZGJfY3BpX3Nob3J0JFlvWVtpZHhfbGFzdF0sIDEpLA0KICBwb3MgPSAxLA0KICBjZXggPSAwLjYsDQogIGNvbCA9ICJkYXJrYmx1ZSINCikNCnRleHQoDQogIHggPSBkYl9jcGlfc2hvcnQkZGF0ZVNlc3Npb25baWR4X2xhc3RdLA0KICB5ID0gZGJfY3BpX3Nob3J0JFNBQVJbaWR4X2xhc3RdLA0KICBsYWJlbHMgPSByb3VuZChkYl9jcGlfc2hvcnQkU0FBUltpZHhfbGFzdF0sIDEpLA0KICBwb3MgPSAxLA0KICBjZXggPSAwLjYsDQogIGNvbCA9ICJkYXJrb3JhbmdlIg0KKQ0KZ3JpZCgpDQoNCg0KYGBgDQoNCg0KIyMgQ29yZSBleC1mb29kIGFuZCBlbmVyZ3kNCg0KYGBge3IgY29yZV9leGZvb2RfeW95X3NhYXIsIGVjaG89Riwgd2FybmluZz1GLCBtZXNzYWdlPUZ9DQoNCmRiX2NvcmVfZXhmb29kX3lveSA9IG5hLm9taXQoZGJfbnNhX3lveVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlKV0pDQpjb2xuYW1lcyhkYl9jb3JlX2V4Zm9vZF95b3kpWy0xXSA9ICJZb1kiDQpkYl9jb3JlX2V4Zm9vZF9zYWFyID0gbmEub21pdChkYl9zYV9zYWFyWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2NvcmUpXSkNCmNvbG5hbWVzKGRiX2NvcmVfZXhmb29kX3NhYXIpWy0xXSA9ICJTQUFSIg0KDQpkYl9jb3JlID0gbGVmdF9qb2luKGRiX2NvcmVfZXhmb29kX3lveSwgZGJfY29yZV9leGZvb2Rfc2FhciwgYnkgPSAiZGF0ZVNlc3Npb24iKQ0KZGJfY29yZSA9IHN1YnNldChkYl9jb3JlLCBkYXRlU2Vzc2lvbiA+PSBzdGFydF9kYXRlX3NlYXMpDQpkYl9jb3JlX3Nob3J0ID0gdGFpbChkYl9jb3JlLCBucGVyX3lveSkNCg0KaWR4X2xhc3QgPSBucm93KGRiX2NvcmVfc2hvcnQpDQoNCg0KIyBDaGFydA0KcGFyKG1mcm93PWMoMSwyKSkNCg0KcGxvdChkYl9jb3JlJGRhdGVTZXNzaW9uLCBkYl9jb3JlJFlvWSwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgeGxhYiA9ICJEYXRlIiwgeWxhYiA9ICIlIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2NvcmVbLC0xXSkpKSwgbWFpbiA9ICJDUEkgY29yZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZSRkYXRlU2Vzc2lvbiwgZGJfY29yZSRTQUFSLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya29yYW5nZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJ0b3BsZWZ0IiwgYygiWW9ZIiwgIlNBQVIiKSwgY29sID0gYygiZGFya2JsdWUiLCAiZGFya29yYW5nZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMSkNCmFibGluZShoID0gY3BpX3RhcmdldCwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIGx0eSA9IDMpDQpncmlkKCkNCg0KcGxvdChkYl9jb3JlX3Nob3J0JGRhdGVTZXNzaW9uLCBkYl9jb3JlX3Nob3J0JFlvWSwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgeGxhYiA9ICJEYXRlIiwgeWxhYiA9ICIlIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2NvcmVfc2hvcnRbLC0xXSkpKSwgbWFpbiA9ICJDUEkgY29yZSAtIHJlY2VudGUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2NvcmVfc2hvcnQkZGF0ZVNlc3Npb24sIGRiX2NvcmVfc2hvcnQkU0FBUiwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtvcmFuZ2UiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgidG9wcmlnaHQiLCBjKCJZb1kiLCAiU0FBUiIpLCBjb2wgPSBjKCJkYXJrYmx1ZSIsICJkYXJrb3JhbmdlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAxKQ0KYWJsaW5lKGggPSBjcGlfdGFyZ2V0LCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgbHR5ID0gMykNCnRleHQoDQogIHggPSBkYl9jb3JlX3Nob3J0JGRhdGVTZXNzaW9uW2lkeF9sYXN0XSwNCiAgeSA9IGRiX2NvcmVfc2hvcnQkWW9ZW2lkeF9sYXN0XSwNCiAgbGFiZWxzID0gcm91bmQoZGJfY29yZV9zaG9ydCRZb1lbaWR4X2xhc3RdLCAxKSwNCiAgcG9zID0gMSwNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAiZGFya2JsdWUiDQopDQp0ZXh0KA0KICB4ID0gZGJfY29yZV9zaG9ydCRkYXRlU2Vzc2lvbltpZHhfbGFzdF0sDQogIHkgPSBkYl9jb3JlX3Nob3J0JFNBQVJbaWR4X2xhc3RdLA0KICBsYWJlbHMgPSByb3VuZChkYl9jb3JlX3Nob3J0JFNBQVJbaWR4X2xhc3RdLCAxKSwNCiAgcG9zID0gMSwNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAiZGFya29yYW5nZSINCikNCmdyaWQoKQ0KDQoNCmBgYA0KDQojIyBDb3JlIFRSSU0gODUNCg0KYGBge3IgY29yZV90cmltODVfeW95X3NhYXIsIGVjaG89Riwgd2FybmluZz1GLCBtZXNzYWdlPUZ9DQoNCmRiX2NvcmVfdHJpbTg1X3lveSA9IG5hLm9taXQoZGJfbnNhX3lveVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX3RyaW04NSldKQ0KY29sbmFtZXMoZGJfY29yZV90cmltODVfeW95KVstMV0gPSAiWW9ZIg0KZGJfY29yZV90cmltODVfc2FhciA9IG5hLm9taXQoZGJfc2Ffc2FhclssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX3RyaW04NSldKQ0KY29sbmFtZXMoZGJfY29yZV90cmltODVfc2FhcilbLTFdID0gIlNBQVIiDQoNCmRiX2NvcmVfdHJpbTg1ID0gbGVmdF9qb2luKGRiX2NvcmVfdHJpbTg1X3lveSwgZGJfY29yZV90cmltODVfc2FhciwgYnkgPSAiZGF0ZVNlc3Npb24iKQ0KZGJfY29yZV90cmltODUgPSBzdWJzZXQoZGJfY29yZV90cmltODUsIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2NvcmVfdHJpbTg1X3Nob3J0ID0gdGFpbChkYl9jb3JlX3RyaW04NSwgbnBlcl95b3kpDQoNCmlkeF9sYXN0ID0gbnJvdyhkYl9jb3JlX3RyaW04NV9zaG9ydCkNCg0KDQojIENoYXJ0DQpwYXIobWZyb3c9YygxLDIpKQ0KDQpwbG90KGRiX2NvcmVfdHJpbTg1JGRhdGVTZXNzaW9uLCBkYl9jb3JlX3RyaW04NSRZb1ksIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHhsYWIgPSAiRGF0ZSIsIHlsYWIgPSAiJSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jb3JlX3RyaW04NVssLTFdKSkpLCBtYWluID0gIkNQSSBjb3JlIFRyaW0gODUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2NvcmVfdHJpbTg1JGRhdGVTZXNzaW9uLCBkYl9jb3JlX3RyaW04NSRTQUFSLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya29yYW5nZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJ0b3BsZWZ0IiwgYygiWW9ZIiwgIlNBQVIiKSwgY29sID0gYygiZGFya2JsdWUiLCAiZGFya29yYW5nZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMSkNCmFibGluZShoID0gY3BpX3RhcmdldCwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIGx0eSA9IDMpDQpncmlkKCkNCg0KcGxvdChkYl9jb3JlX3RyaW04NV9zaG9ydCRkYXRlU2Vzc2lvbiwgZGJfY29yZV90cmltODVfc2hvcnQkWW9ZLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCB4bGFiID0gIkRhdGUiLCB5bGFiID0gIiUiLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY29yZV90cmltODVfc2hvcnRbLC0xXSkpKSwgbWFpbiA9ICJDUEkgY29yZSBUcmltIDg1IC0gcmVjZW50ZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV90cmltODVfc2hvcnQkZGF0ZVNlc3Npb24sIGRiX2NvcmVfdHJpbTg1X3Nob3J0JFNBQVIsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrb3JhbmdlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoImJvdHRvbWxlZnQiLCBjKCJZb1kiLCAiU0FBUiIpLCBjb2wgPSBjKCJkYXJrYmx1ZSIsICJkYXJrb3JhbmdlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAxKQ0KYWJsaW5lKGggPSBjcGlfdGFyZ2V0LCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgbHR5ID0gMykNCnRleHQoDQogIHggPSBkYl9jb3JlX3RyaW04NV9zaG9ydCRkYXRlU2Vzc2lvbltpZHhfbGFzdF0sDQogIHkgPSBkYl9jb3JlX3RyaW04NV9zaG9ydCRZb1lbaWR4X2xhc3RdLA0KICBsYWJlbHMgPSByb3VuZChkYl9jb3JlX3RyaW04NV9zaG9ydCRZb1lbaWR4X2xhc3RdLCAxKSwNCiAgcG9zID0gMSwNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAiZGFya2JsdWUiDQopDQp0ZXh0KA0KICB4ID0gZGJfY29yZV90cmltODVfc2hvcnQkZGF0ZVNlc3Npb25baWR4X2xhc3RdLA0KICB5ID0gZGJfY29yZV90cmltODVfc2hvcnQkU0FBUltpZHhfbGFzdF0sDQogIGxhYmVscyA9IHJvdW5kKGRiX2NvcmVfdHJpbTg1X3Nob3J0JFNBQVJbaWR4X2xhc3RdLCAxKSwNCiAgcG9zID0gMSwNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAiZGFya29yYW5nZSINCikNCmdyaWQoKQ0KDQoNCmBgYA0KDQojIyBDb3JlIFRSSU0gMQ0KDQpgYGB7ciBjb3JlX3RyaW0xX3lveV9zYWFyLCBlY2hvPUYsIHdhcm5pbmc9RiwgbWVzc2FnZT1GfQ0KDQpkYl9jb3JlX3RyaW0xX3lveSA9IG5hLm9taXQoZGJfbnNhX3lveVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX3RyaW0xKV0pDQpjb2xuYW1lcyhkYl9jb3JlX3RyaW0xX3lveSlbLTFdID0gIllvWSINCmRiX2NvcmVfdHJpbTFfc2FhciA9IG5hLm9taXQoZGJfc2Ffc2FhclssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX3RyaW0xKV0pDQpjb2xuYW1lcyhkYl9jb3JlX3RyaW0xX3NhYXIpWy0xXSA9ICJTQUFSIg0KDQpkYl9jb3JlX3RyaW0xID0gbGVmdF9qb2luKGRiX2NvcmVfdHJpbTFfeW95LCBkYl9jb3JlX3RyaW0xX3NhYXIsIGJ5ID0gImRhdGVTZXNzaW9uIikNCmRiX2NvcmVfdHJpbTEgPSBzdWJzZXQoZGJfY29yZV90cmltMSwgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfY29yZV90cmltMV9zaG9ydCA9IHRhaWwoZGJfY29yZV90cmltMSwgbnBlcl95b3kpDQoNCmlkeF9sYXN0ID0gbnJvdyhkYl9jb3JlX3RyaW0xX3Nob3J0KQ0KDQoNCiMgQ2hhcnQNCnBhcihtZnJvdz1jKDEsMikpDQoNCnBsb3QoZGJfY29yZV90cmltMSRkYXRlU2Vzc2lvbiwgZGJfY29yZV90cmltMSRZb1ksIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHhsYWIgPSAiRGF0ZSIsIHlsYWIgPSAiJSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jb3JlX3RyaW0xWywtMV0pKSksIG1haW4gPSAiQ1BJIGNvcmUgVHJpbSAxIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jb3JlX3RyaW0xJGRhdGVTZXNzaW9uLCBkYl9jb3JlX3RyaW0xJFNBQVIsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrb3JhbmdlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoInRvcGxlZnQiLCBjKCJZb1kiLCAiU0FBUiIpLCBjb2wgPSBjKCJkYXJrYmx1ZSIsICJkYXJrb3JhbmdlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAxKQ0KYWJsaW5lKGggPSBjcGlfdGFyZ2V0LCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgbHR5ID0gMykNCmdyaWQoKQ0KDQpwbG90KGRiX2NvcmVfdHJpbTFfc2hvcnQkZGF0ZVNlc3Npb24sIGRiX2NvcmVfdHJpbTFfc2hvcnQkWW9ZLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2JsdWUiLCB4bGFiID0gIkRhdGUiLCB5bGFiID0gIiUiLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGJfY29yZV90cmltMV9zaG9ydFssLTFdKSkpLCBtYWluID0gIkNQSSBjb3JlIFRyaW0gMSAtIHJlY2VudGUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2NvcmVfdHJpbTFfc2hvcnQkZGF0ZVNlc3Npb24sIGRiX2NvcmVfdHJpbTFfc2hvcnQkU0FBUiwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtvcmFuZ2UiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgiYm90dG9tbGVmdCIsIGMoIllvWSIsICJTQUFSIiksIGNvbCA9IGMoImRhcmtibHVlIiwgImRhcmtvcmFuZ2UiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDEpDQphYmxpbmUoaCA9IGNwaV90YXJnZXQsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCBsdHkgPSAzKQ0KdGV4dCgNCiAgeCA9IGRiX2NvcmVfdHJpbTFfc2hvcnQkZGF0ZVNlc3Npb25baWR4X2xhc3RdLA0KICB5ID0gZGJfY29yZV90cmltMV9zaG9ydCRZb1lbaWR4X2xhc3RdLA0KICBsYWJlbHMgPSByb3VuZChkYl9jb3JlX3RyaW0xX3Nob3J0JFlvWVtpZHhfbGFzdF0sIDEpLA0KICBwb3MgPSAxLA0KICBjZXggPSAwLjYsDQogIGNvbCA9ICJkYXJrYmx1ZSINCikNCnRleHQoDQogIHggPSBkYl9jb3JlX3RyaW0xX3Nob3J0JGRhdGVTZXNzaW9uW2lkeF9sYXN0XSwNCiAgeSA9IGRiX2NvcmVfdHJpbTFfc2hvcnQkU0FBUltpZHhfbGFzdF0sDQogIGxhYmVscyA9IHJvdW5kKGRiX2NvcmVfdHJpbTFfc2hvcnQkU0FBUltpZHhfbGFzdF0sIDEpLA0KICBwb3MgPSAxLA0KICBjZXggPSAwLjYsDQogIGNvbCA9ICJkYXJrb3JhbmdlIg0KKQ0KZ3JpZCgpDQoNCg0KYGBgDQoNCiMjIENvcmUgVU5EIDI0DQoNCmBgYHtyIGNvcmVfdW5kMjRfeW95X3NhYXIsIGVjaG89Riwgd2FybmluZz1GLCBtZXNzYWdlPUZ9DQoNCmRiX2NvcmVfdW5kMjRfeW95ID0gbmEub21pdChkYl9uc2FfeW95WyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2NvcmVfdW5kMjQpXSkNCmNvbG5hbWVzKGRiX2NvcmVfdW5kMjRfeW95KVstMV0gPSAiWW9ZIg0KZGJfY29yZV91bmQyNF9zYWFyID0gbmEub21pdChkYl9zYV9zYWFyWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2NvcmVfdW5kMjQpXSkNCmNvbG5hbWVzKGRiX2NvcmVfdW5kMjRfc2FhcilbLTFdID0gIlNBQVIiDQoNCmRiX2NvcmVfdW5kMjQgPSBsZWZ0X2pvaW4oZGJfY29yZV91bmQyNF95b3ksIGRiX2NvcmVfdW5kMjRfc2FhciwgYnkgPSAiZGF0ZVNlc3Npb24iKQ0KZGJfY29yZV91bmQyNCA9IHN1YnNldChkYl9jb3JlX3VuZDI0LCBkYXRlU2Vzc2lvbiA+PSBzdGFydF9kYXRlX3NlYXMpDQpkYl9jb3JlX3VuZDI0X3Nob3J0ID0gdGFpbChkYl9jb3JlX3VuZDI0LCBucGVyX3lveSkNCg0KaWR4X2xhc3QgPSBucm93KGRiX2NvcmVfdW5kMjRfc2hvcnQpDQoNCg0KIyBDaGFydA0KcGFyKG1mcm93PWMoMSwyKSkNCg0KcGxvdChkYl9jb3JlX3VuZDI0JGRhdGVTZXNzaW9uLCBkYl9jb3JlX3VuZDI0JFlvWSwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgeGxhYiA9ICJEYXRlIiwgeWxhYiA9ICIlIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2NvcmVfdW5kMjRbLC0xXSkpKSwgbWFpbiA9ICJDUEkgY29yZSBVTkQyNCIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV91bmQyNCRkYXRlU2Vzc2lvbiwgZGJfY29yZV91bmQyNCRTQUFSLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya29yYW5nZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJ0b3BsZWZ0IiwgYygiWW9ZIiwgIlNBQVIiKSwgY29sID0gYygiZGFya2JsdWUiLCAiZGFya29yYW5nZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMSkNCmFibGluZShoID0gY3BpX3RhcmdldCwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIGx0eSA9IDMpDQpncmlkKCkNCg0KcGxvdChkYl9jb3JlX3VuZDI0X3Nob3J0JGRhdGVTZXNzaW9uLCBkYl9jb3JlX3VuZDI0X3Nob3J0JFlvWSwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgeGxhYiA9ICJEYXRlIiwgeWxhYiA9ICIlIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2NvcmVfdW5kMjRfc2hvcnRbLC0xXSkpKSwgbWFpbiA9ICJDUEkgY29yZSBVTkQyNCAtIHJlY2VudGUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2NvcmVfdW5kMjRfc2hvcnQkZGF0ZVNlc3Npb24sIGRiX2NvcmVfdW5kMjRfc2hvcnQkU0FBUiwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtvcmFuZ2UiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgiYm90dG9tbGVmdCIsIGMoIllvWSIsICJTQUFSIiksIGNvbCA9IGMoImRhcmtibHVlIiwgImRhcmtvcmFuZ2UiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDEpDQphYmxpbmUoaCA9IGNwaV90YXJnZXQsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCBsdHkgPSAzKQ0KdGV4dCgNCiAgeCA9IGRiX2NvcmVfdW5kMjRfc2hvcnQkZGF0ZVNlc3Npb25baWR4X2xhc3RdLA0KICB5ID0gZGJfY29yZV91bmQyNF9zaG9ydCRZb1lbaWR4X2xhc3RdLA0KICBsYWJlbHMgPSByb3VuZChkYl9jb3JlX3VuZDI0X3Nob3J0JFlvWVtpZHhfbGFzdF0sIDEpLA0KICBwb3MgPSAxLA0KICBjZXggPSAwLjYsDQogIGNvbCA9ICJkYXJrYmx1ZSINCikNCnRleHQoDQogIHggPSBkYl9jb3JlX3VuZDI0X3Nob3J0JGRhdGVTZXNzaW9uW2lkeF9sYXN0XSwNCiAgeSA9IGRiX2NvcmVfdW5kMjRfc2hvcnQkU0FBUltpZHhfbGFzdF0sDQogIGxhYmVscyA9IHJvdW5kKGRiX2NvcmVfdW5kMjRfc2hvcnQkU0FBUltpZHhfbGFzdF0sIDEpLA0KICBwb3MgPSAxLA0KICBjZXggPSAwLjYsDQogIGNvbCA9ICJkYXJrb3JhbmdlIg0KKQ0KZ3JpZCgpDQoNCg0KYGBgDQoNCiMjIENvcmUgS1BJRlBDIC0gZXN0YXTDrXN0aWNvIHBvciBQQ0ENCg0KYGBge3IgY29yZV9rcGlmcGNfeW95X3NhYXIsIGVjaG89Riwgd2FybmluZz1GLCBtZXNzYWdlPUZ9DQoNCmRiX2NvcmVfa3BpZnBjX3lveSA9IG5hLm9taXQoZGJfbnNhX3lveVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX2twaWZwYyldKQ0KY29sbmFtZXMoZGJfY29yZV9rcGlmcGNfeW95KVstMV0gPSAiWW9ZIg0KZGJfY29yZV9rcGlmcGNfc2FhciA9IG5hLm9taXQoZGJfc2Ffc2FhclssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX2twaWZwYyldKQ0KY29sbmFtZXMoZGJfY29yZV9rcGlmcGNfc2FhcilbLTFdID0gIlNBQVIiDQoNCmRiX2NvcmVfa3BpZnBjID0gbGVmdF9qb2luKGRiX2NvcmVfa3BpZnBjX3lveSwgZGJfY29yZV9rcGlmcGNfc2FhciwgYnkgPSAiZGF0ZVNlc3Npb24iKQ0KZGJfY29yZV9rcGlmcGMgPSBzdWJzZXQoZGJfY29yZV9rcGlmcGMsIGRhdGVTZXNzaW9uID49IHN0YXJ0X2RhdGVfc2VhcykNCmRiX2NvcmVfa3BpZnBjX3Nob3J0ID0gdGFpbChkYl9jb3JlX2twaWZwYywgbnBlcl95b3kpDQoNCmlkeF9sYXN0ID0gbnJvdyhkYl9jb3JlX2twaWZwY19zaG9ydCkNCg0KDQojIENoYXJ0DQpwYXIobWZyb3c9YygxLDIpKQ0KDQpwbG90KGRiX2NvcmVfa3BpZnBjJGRhdGVTZXNzaW9uLCBkYl9jb3JlX2twaWZwYyRZb1ksIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHhsYWIgPSAiRGF0ZSIsIHlsYWIgPSAiJSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jb3JlX2twaWZwY1ssLTFdKSkpLCBtYWluID0gIkNQSSBjb3JlIGtwaWZwYyIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV9rcGlmcGMkZGF0ZVNlc3Npb24sIGRiX2NvcmVfa3BpZnBjJFNBQVIsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrb3JhbmdlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoInRvcGxlZnQiLCBjKCJZb1kiLCAiU0FBUiIpLCBjb2wgPSBjKCJkYXJrYmx1ZSIsICJkYXJrb3JhbmdlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAxKQ0KYWJsaW5lKGggPSBjcGlfdGFyZ2V0LCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgbHR5ID0gMykNCmdyaWQoKQ0KDQpwbG90KGRiX2NvcmVfa3BpZnBjX3Nob3J0JGRhdGVTZXNzaW9uLCBkYl9jb3JlX2twaWZwY19zaG9ydCRZb1ksIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHhsYWIgPSAiRGF0ZSIsIHlsYWIgPSAiJSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jb3JlX2twaWZwY19zaG9ydFssLTFdKSkpLCBtYWluID0gIkNQSSBjb3JlIGtwaWZwYyAtIHJlY2VudGUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2NvcmVfa3BpZnBjX3Nob3J0JGRhdGVTZXNzaW9uLCBkYl9jb3JlX2twaWZwY19zaG9ydCRTQUFSLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya29yYW5nZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJib3R0b21sZWZ0IiwgYygiWW9ZIiwgIlNBQVIiKSwgY29sID0gYygiZGFya2JsdWUiLCAiZGFya29yYW5nZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMSkNCmFibGluZShoID0gY3BpX3RhcmdldCwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIGx0eSA9IDMpDQp0ZXh0KA0KICB4ID0gZGJfY29yZV9rcGlmcGNfc2hvcnQkZGF0ZVNlc3Npb25baWR4X2xhc3RdLA0KICB5ID0gZGJfY29yZV9rcGlmcGNfc2hvcnQkWW9ZW2lkeF9sYXN0XSwNCiAgbGFiZWxzID0gcm91bmQoZGJfY29yZV9rcGlmcGNfc2hvcnQkWW9ZW2lkeF9sYXN0XSwgMSksDQogIHBvcyA9IDEsDQogIGNleCA9IDAuNiwNCiAgY29sID0gImRhcmtibHVlIg0KKQ0KdGV4dCgNCiAgeCA9IGRiX2NvcmVfa3BpZnBjX3Nob3J0JGRhdGVTZXNzaW9uW2lkeF9sYXN0XSwNCiAgeSA9IGRiX2NvcmVfa3BpZnBjX3Nob3J0JFNBQVJbaWR4X2xhc3RdLA0KICBsYWJlbHMgPSByb3VuZChkYl9jb3JlX2twaWZwY19zaG9ydCRTQUFSW2lkeF9sYXN0XSwgMSksDQogIHBvcyA9IDEsDQogIGNleCA9IDAuNiwNCiAgY29sID0gImRhcmtvcmFuZ2UiDQopDQpncmlkKCkNCg0KDQpgYGANCg0KIyMgQ29yZSBzZXJ2aWNlcw0KDQpgYGB7ciBjb3JlX3NlcnZpY2VzX3lveV9zYWFyLCBlY2hvPUYsIHdhcm5pbmc9RiwgbWVzc2FnZT1GfQ0KDQpkYl9jb3JlX3NlcnZpY2VzX3lveSA9IG5hLm9taXQoZGJfbnNhX3lveVssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX3NlcnZpY2VzKV0pDQpjb2xuYW1lcyhkYl9jb3JlX3NlcnZpY2VzX3lveSlbLTFdID0gIllvWSINCmRiX2NvcmVfc2VydmljZXNfc2FhciA9IG5hLm9taXQoZGJfc2Ffc2FhclssYygiZGF0ZVNlc3Npb24iLCBsYWJlbF9jb3JlX3NlcnZpY2VzKV0pDQpjb2xuYW1lcyhkYl9jb3JlX3NlcnZpY2VzX3NhYXIpWy0xXSA9ICJTQUFSIg0KDQpkYl9jb3JlX3NlcnZpY2VzID0gbGVmdF9qb2luKGRiX2NvcmVfc2VydmljZXNfeW95LCBkYl9jb3JlX3NlcnZpY2VzX3NhYXIsIGJ5ID0gImRhdGVTZXNzaW9uIikNCmRiX2NvcmVfc2VydmljZXMgPSBzdWJzZXQoZGJfY29yZV9zZXJ2aWNlcywgZGF0ZVNlc3Npb24gPj0gc3RhcnRfZGF0ZV9zZWFzKQ0KZGJfY29yZV9zZXJ2aWNlc19zaG9ydCA9IHRhaWwoZGJfY29yZV9zZXJ2aWNlcywgbnBlcl95b3kpDQoNCmlkeF9sYXN0ID0gbnJvdyhkYl9jb3JlX3NlcnZpY2VzX3Nob3J0KQ0KDQoNCiMgQ2hhcnQNCnBhcihtZnJvdz1jKDEsMikpDQoNCnBsb3QoZGJfY29yZV9zZXJ2aWNlcyRkYXRlU2Vzc2lvbiwgZGJfY29yZV9zZXJ2aWNlcyRZb1ksIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHhsYWIgPSAiRGF0ZSIsIHlsYWIgPSAiJSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jb3JlX3NlcnZpY2VzWywtMV0pKSksIG1haW4gPSAiQ1BJIGNvcmUgc2VydmljZXMiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2NvcmVfc2VydmljZXMkZGF0ZVNlc3Npb24sIGRiX2NvcmVfc2VydmljZXMkU0FBUiwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtvcmFuZ2UiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgidG9wbGVmdCIsIGMoIllvWSIsICJTQUFSIiksIGNvbCA9IGMoImRhcmtibHVlIiwgImRhcmtvcmFuZ2UiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDEpDQphYmxpbmUoaCA9IGNwaV90YXJnZXQsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCBsdHkgPSAzKQ0KZ3JpZCgpDQoNCnBsb3QoZGJfY29yZV9zZXJ2aWNlc19zaG9ydCRkYXRlU2Vzc2lvbiwgZGJfY29yZV9zZXJ2aWNlc19zaG9ydCRZb1ksIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrYmx1ZSIsIHhsYWIgPSAiRGF0ZSIsIHlsYWIgPSAiJSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYl9jb3JlX3NlcnZpY2VzX3Nob3J0WywtMV0pKSksIG1haW4gPSAiQ1BJIGNvcmUgc2VydmljZXMgLSByZWNlbnRlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsaW5lcyhkYl9jb3JlX3NlcnZpY2VzX3Nob3J0JGRhdGVTZXNzaW9uLCBkYl9jb3JlX3NlcnZpY2VzX3Nob3J0JFNBQVIsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrb3JhbmdlIiwgcGNoID0gMTksIGx3ZCA9IDMpDQpsZWdlbmQoImJvdHRvbWxlZnQiLCBjKCJZb1kiLCAiU0FBUiIpLCBjb2wgPSBjKCJkYXJrYmx1ZSIsICJkYXJrb3JhbmdlIiksIHBjaCA9IDE5LCBsd2QgPSAzLCBjZXggPSAxKQ0KYWJsaW5lKGggPSBjcGlfdGFyZ2V0LCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgbHR5ID0gMykNCnRleHQoDQogIHggPSBkYl9jb3JlX3NlcnZpY2VzX3Nob3J0JGRhdGVTZXNzaW9uW2lkeF9sYXN0XSwNCiAgeSA9IGRiX2NvcmVfc2VydmljZXNfc2hvcnQkWW9ZW2lkeF9sYXN0XSwNCiAgbGFiZWxzID0gcm91bmQoZGJfY29yZV9zZXJ2aWNlc19zaG9ydCRZb1lbaWR4X2xhc3RdLCAxKSwNCiAgcG9zID0gMSwNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAiZGFya2JsdWUiDQopDQp0ZXh0KA0KICB4ID0gZGJfY29yZV9zZXJ2aWNlc19zaG9ydCRkYXRlU2Vzc2lvbltpZHhfbGFzdF0sDQogIHkgPSBkYl9jb3JlX3NlcnZpY2VzX3Nob3J0JFNBQVJbaWR4X2xhc3RdLA0KICBsYWJlbHMgPSByb3VuZChkYl9jb3JlX3NlcnZpY2VzX3Nob3J0JFNBQVJbaWR4X2xhc3RdLCAxKSwNCiAgcG9zID0gMSwNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAiZGFya29yYW5nZSINCikNCmdyaWQoKQ0KDQoNCmBgYA0KDQojIyBDb3JlIGdvb2RzDQoNCmBgYHtyIGNvcmVfZ29vZHNfeW95X3NhYXIsIGVjaG89Riwgd2FybmluZz1GLCBtZXNzYWdlPUZ9DQoNCmRiX2NvcmVfZ29vZHNfeW95ID0gbmEub21pdChkYl9uc2FfeW95WyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2NvcmVfZ29vZHMpXSkNCmNvbG5hbWVzKGRiX2NvcmVfZ29vZHNfeW95KVstMV0gPSAiWW9ZIg0KZGJfY29yZV9nb29kc19zYWFyID0gbmEub21pdChkYl9zYV9zYWFyWyxjKCJkYXRlU2Vzc2lvbiIsIGxhYmVsX2NvcmVfZ29vZHMpXSkNCmNvbG5hbWVzKGRiX2NvcmVfZ29vZHNfc2FhcilbLTFdID0gIlNBQVIiDQoNCmRiX2NvcmVfZ29vZHMgPSBsZWZ0X2pvaW4oZGJfY29yZV9nb29kc195b3ksIGRiX2NvcmVfZ29vZHNfc2FhciwgYnkgPSAiZGF0ZVNlc3Npb24iKQ0KZGJfY29yZV9nb29kcyA9IHN1YnNldChkYl9jb3JlX2dvb2RzLCBkYXRlU2Vzc2lvbiA+PSBzdGFydF9kYXRlX3NlYXMpDQpkYl9jb3JlX2dvb2RzX3Nob3J0ID0gdGFpbChkYl9jb3JlX2dvb2RzLCBucGVyX3lveSkNCg0KaWR4X2xhc3QgPSBucm93KGRiX2NvcmVfZ29vZHNfc2hvcnQpDQoNCg0KIyBDaGFydA0KcGFyKG1mcm93PWMoMSwyKSkNCg0KcGxvdChkYl9jb3JlX2dvb2RzJGRhdGVTZXNzaW9uLCBkYl9jb3JlX2dvb2RzJFlvWSwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgeGxhYiA9ICJEYXRlIiwgeWxhYiA9ICIlIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2NvcmVfZ29vZHNbLC0xXSkpKSwgbWFpbiA9ICJDUEkgY29yZSBnb29kcyIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGluZXMoZGJfY29yZV9nb29kcyRkYXRlU2Vzc2lvbiwgZGJfY29yZV9nb29kcyRTQUFSLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya29yYW5nZSIsIHBjaCA9IDE5LCBsd2QgPSAzKQ0KbGVnZW5kKCJ0b3BsZWZ0IiwgYygiWW9ZIiwgIlNBQVIiKSwgY29sID0gYygiZGFya2JsdWUiLCAiZGFya29yYW5nZSIpLCBwY2ggPSAxOSwgbHdkID0gMywgY2V4ID0gMSkNCmFibGluZShoID0gY3BpX3RhcmdldCwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIGx0eSA9IDMpDQpncmlkKCkNCg0KcGxvdChkYl9jb3JlX2dvb2RzX3Nob3J0JGRhdGVTZXNzaW9uLCBkYl9jb3JlX2dvb2RzX3Nob3J0JFlvWSwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtibHVlIiwgeGxhYiA9ICJEYXRlIiwgeWxhYiA9ICIlIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiX2NvcmVfZ29vZHNfc2hvcnRbLC0xXSkpKSwgbWFpbiA9ICJDUEkgY29yZSBnb29kcyAtIHJlY2VudGUiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxpbmVzKGRiX2NvcmVfZ29vZHNfc2hvcnQkZGF0ZVNlc3Npb24sIGRiX2NvcmVfZ29vZHNfc2hvcnQkU0FBUiwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtvcmFuZ2UiLCBwY2ggPSAxOSwgbHdkID0gMykNCmxlZ2VuZCgiYm90dG9tbGVmdCIsIGMoIllvWSIsICJTQUFSIiksIGNvbCA9IGMoImRhcmtibHVlIiwgImRhcmtvcmFuZ2UiKSwgcGNoID0gMTksIGx3ZCA9IDMsIGNleCA9IDEpDQphYmxpbmUoaCA9IGNwaV90YXJnZXQsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCBsdHkgPSAzKQ0KdGV4dCgNCiAgeCA9IGRiX2NvcmVfZ29vZHNfc2hvcnQkZGF0ZVNlc3Npb25baWR4X2xhc3RdLA0KICB5ID0gZGJfY29yZV9nb29kc19zaG9ydCRZb1lbaWR4X2xhc3RdLA0KICBsYWJlbHMgPSByb3VuZChkYl9jb3JlX2dvb2RzX3Nob3J0JFlvWVtpZHhfbGFzdF0sIDEpLA0KICBwb3MgPSAxLA0KICBjZXggPSAwLjYsDQogIGNvbCA9ICJkYXJrYmx1ZSINCikNCnRleHQoDQogIHggPSBkYl9jb3JlX2dvb2RzX3Nob3J0JGRhdGVTZXNzaW9uW2lkeF9sYXN0XSwNCiAgeSA9IGRiX2NvcmVfZ29vZHNfc2hvcnQkU0FBUltpZHhfbGFzdF0sDQogIGxhYmVscyA9IHJvdW5kKGRiX2NvcmVfZ29vZHNfc2hvcnQkU0FBUltpZHhfbGFzdF0sIDEpLA0KICBwb3MgPSAxLA0KICBjZXggPSAwLjYsDQogIGNvbCA9ICJkYXJrb3JhbmdlIg0KKQ0KZ3JpZCgpDQoNCg0KYGBgDQoNCg0KDQo=