IiIiIFRlc3Qgc2NyaXB0IGZvciB0aGUgVW5pY29kZSBpbXBsZW1lbnRhdGlvbi4KCldyaXR0ZW4gYnkgTWFyYy1BbmRyZSBMZW1idXJnIChtYWxAbGVtYnVyZy5jb20pLgoKKGMpIENvcHlyaWdodCBDTlJJLCBBbGwgUmlnaHRzIFJlc2VydmVkLiBOTyBXQVJSQU5UWS4KCiIiIiMiCmZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKaW1wb3J0IHN5cwoKZGVmIHRlc3QobWV0aG9kLCBpbnB1dCwgb3V0cHV0LCAqYXJncyk6CiAgICBpZiB2ZXJib3NlOgogICAgICAgIHByaW50ICclcy4lcyVzID0/ICVzLi4uICcgJSAocmVwcihpbnB1dCksIG1ldGhvZCwgYXJncywgcmVwcihvdXRwdXQpKSwKICAgIHRyeToKICAgICAgICBmID0gZ2V0YXR0cihpbnB1dCwgbWV0aG9kKQogICAgICAgIHZhbHVlID0gYXBwbHkoZiwgYXJncykKICAgIGV4Y2VwdDoKICAgICAgICB2YWx1ZSA9IHN5cy5leGNfdHlwZQogICAgICAgIGV4YyA9IHN5cy5leGNfaW5mbygpWzoyXQogICAgZWxzZToKICAgICAgICBleGMgPSBOb25lCiAgICBpZiB2YWx1ZSAhPSBvdXRwdXQgb3IgdHlwZSh2YWx1ZSkgaXMgbm90IHR5cGUob3V0cHV0KToKICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICBwcmludCAnbm8nCiAgICAgICAgcHJpbnQgJyonLGYsIGBpbnB1dGAsIGBvdXRwdXRgLCBgdmFsdWVgCiAgICAgICAgaWYgZXhjOgogICAgICAgICAgICBwcmludCAnICB2YWx1ZSA9PSAlczogJXMnICUgKGV4YykKICAgIGVsc2U6CiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQgJ3llcycKCnRlc3QoJ2NhcGl0YWxpemUnLCB1JyBoZWxsbyAnLCB1JyBoZWxsbyAnKQp0ZXN0KCdjYXBpdGFsaXplJywgdSdoZWxsbyAnLCB1J0hlbGxvICcpCnRlc3QoJ2NhcGl0YWxpemUnLCB1J2FhYWEnLCB1J0FhYWEnKQp0ZXN0KCdjYXBpdGFsaXplJywgdSdBYUFhJywgdSdBYWFhJykKCnRlc3QoJ2NvdW50JywgdSdhYWEnLCAzLCB1J2EnKQp0ZXN0KCdjb3VudCcsIHUnYWFhJywgMCwgdSdiJykKdGVzdCgnY291bnQnLCAnYWFhJywgMywgdSdhJykKdGVzdCgnY291bnQnLCAnYWFhJywgMCwgdSdiJykKdGVzdCgnY291bnQnLCB1J2FhYScsIDMsICdhJykKdGVzdCgnY291bnQnLCB1J2FhYScsIDAsICdiJykKCnRlc3QoJ3RpdGxlJywgdScgaGVsbG8gJywgdScgSGVsbG8gJykKdGVzdCgndGl0bGUnLCB1J2hlbGxvICcsIHUnSGVsbG8gJykKdGVzdCgndGl0bGUnLCB1ImZPck1hVCB0aElzIGFTIHRpdExlIFN0cmluZyIsIHUnRm9ybWF0IFRoaXMgQXMgVGl0bGUgU3RyaW5nJykKdGVzdCgndGl0bGUnLCB1ImZPck1hVCx0aElzLWFTKnRpdExlO1N0cmluZyIsIHUnRm9ybWF0LFRoaXMtQXMqVGl0bGU7U3RyaW5nJykKdGVzdCgndGl0bGUnLCB1ImdldEludCIsIHUnR2V0aW50JykKCnRlc3QoJ2ZpbmQnLCB1J2FiY2RlZmdoaWFiYycsIDAsIHUnYWJjJykKdGVzdCgnZmluZCcsIHUnYWJjZGVmZ2hpYWJjJywgOSwgdSdhYmMnLCAxKQp0ZXN0KCdmaW5kJywgdSdhYmNkZWZnaGlhYmMnLCAtMSwgdSdkZWYnLCA0KQoKdGVzdCgncmZpbmQnLCB1J2FiY2RlZmdoaWFiYycsIDksIHUnYWJjJykKCnRlc3QoJ2xvd2VyJywgdSdIZUxMbycsIHUnaGVsbG8nKQp0ZXN0KCdsb3dlcicsIHUnaGVsbG8nLCB1J2hlbGxvJykKCnRlc3QoJ3VwcGVyJywgdSdIZUxMbycsIHUnSEVMTE8nKQp0ZXN0KCd1cHBlcicsIHUnSEVMTE8nLCB1J0hFTExPJykKCmlmIDA6CiAgICB0cmFuc3RhYmxlID0gJ1wwMDBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3ICEiIyQlJlwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYHh5emRlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flwxNzdcMjAwXDIwMVwyMDJcMjAzXDIwNFwyMDVcMjA2XDIwN1wyMTBcMjExXDIxMlwyMTNcMjE0XDIxNVwyMTZcMjE3XDIyMFwyMjFcMjIyXDIyM1wyMjRcMjI1XDIyNlwyMjdcMjMwXDIzMVwyMzJcMjMzXDIzNFwyMzVcMjM2XDIzN1wyNDBcMjQxXDI0MlwyNDNcMjQ0XDI0NVwyNDZcMjQ3XDI1MFwyNTFcMjUyXDI1M1wyNTRcMjU1XDI1NlwyNTdcMjYwXDI2MVwyNjJcMjYzXDI2NFwyNjVcMjY2XDI2N1wyNzBcMjcxXDI3MlwyNzNcMjc0XDI3NVwyNzZcMjc3XDMwMFwzMDFcMzAyXDMwM1wzMDRcMzA1XDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMxNFwzMTVcMzE2XDMxN1wzMjBcMzIxXDMyMlwzMjNcMzI0XDMyNVwzMjZcMzI3XDMzMFwzMzFcMzMyXDMzM1wzMzRcMzM1XDMzNlwzMzdcMzQwXDM0MVwzNDJcMzQzXDM0NFwzNDVcMzQ2XDM0N1wzNTBcMzUxXDM1MlwzNTNcMzU0XDM1NVwzNTZcMzU3XDM2MFwzNjFcMzYyXDM2M1wzNjRcMzY1XDM2NlwzNjdcMzcwXDM3MVwzNzJcMzczXDM3NFwzNzVcMzc2XDM3NycKCiAgICB0ZXN0KCdtYWtldHJhbnMnLCB1J2FiYycsIHRyYW5zdGFibGUsIHUneHl6JykKICAgIHRlc3QoJ21ha2V0cmFucycsIHUnYWJjJywgVmFsdWVFcnJvciwgdSd4eXpxJykKCnRlc3QoJ3NwbGl0JywgdSd0aGlzIGlzIHRoZSBzcGxpdCBmdW5jdGlvbicsCiAgICAgW3UndGhpcycsIHUnaXMnLCB1J3RoZScsIHUnc3BsaXQnLCB1J2Z1bmN0aW9uJ10pCnRlc3QoJ3NwbGl0JywgdSdhfGJ8Y3xkJywgW3UnYScsIHUnYicsIHUnYycsIHUnZCddLCB1J3wnKQp0ZXN0KCdzcGxpdCcsIHUnYXxifGN8ZCcsIFt1J2EnLCB1J2InLCB1J2N8ZCddLCB1J3wnLCAyKQp0ZXN0KCdzcGxpdCcsIHUnYSBiIGMgZCcsIFt1J2EnLCB1J2IgYyBkJ10sIE5vbmUsIDEpCnRlc3QoJ3NwbGl0JywgdSdhIGIgYyBkJywgW3UnYScsIHUnYicsIHUnYyBkJ10sIE5vbmUsIDIpCnRlc3QoJ3NwbGl0JywgdSdhIGIgYyBkJywgW3UnYScsIHUnYicsIHUnYycsIHUnZCddLCBOb25lLCAzKQp0ZXN0KCdzcGxpdCcsIHUnYSBiIGMgZCcsIFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSwgTm9uZSwgNCkKdGVzdCgnc3BsaXQnLCB1J2EgYiBjIGQnLCBbdSdhIGIgYyBkJ10sIE5vbmUsIDApCnRlc3QoJ3NwbGl0JywgdSdhICBiICBjICBkJywgW3UnYScsIHUnYicsIHUnYyAgZCddLCBOb25lLCAyKQp0ZXN0KCdzcGxpdCcsIHUnYSBiIGMgZCAnLCBbdSdhJywgdSdiJywgdSdjJywgdSdkJ10pCnRlc3QoJ3NwbGl0JywgdSdhLy9iLy9jLy9kJywgW3UnYScsIHUnYicsIHUnYycsIHUnZCddLCB1Jy8vJykKdGVzdCgnc3BsaXQnLCB1J2EvL2IvL2MvL2QnLCBbdSdhJywgdSdiJywgdSdjJywgdSdkJ10sICcvLycpCnRlc3QoJ3NwbGl0JywgJ2EvL2IvL2MvL2QnLCBbdSdhJywgdSdiJywgdSdjJywgdSdkJ10sIHUnLy8nKQp0ZXN0KCdzcGxpdCcsIHUnZW5kY2FzZSB0ZXN0JywgW3UnZW5kY2FzZSAnLCB1JyddLCB1J3Rlc3QnKQp0ZXN0KCdzcGxpdCcsIHUnZW5kY2FzZSB0ZXN0JywgW3UnZW5kY2FzZSAnLCB1JyddLCAndGVzdCcpCnRlc3QoJ3NwbGl0JywgJ2VuZGNhc2UgdGVzdCcsIFt1J2VuZGNhc2UgJywgdScnXSwgdSd0ZXN0JykKCgojIGpvaW4gbm93IHdvcmtzIHdpdGggYW55IHNlcXVlbmNlIHR5cGUKY2xhc3MgU2VxdWVuY2U6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc2VxKTogc2VsZi5zZXEgPSBzZXEKICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gbGVuKHNlbGYuc2VxKQogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOiByZXR1cm4gc2VsZi5zZXFbaV0KCnRlc3QoJ2pvaW4nLCB1JyAnLCB1J2EgYiBjIGQnLCBbdSdhJywgdSdiJywgdSdjJywgdSdkJ10pCnRlc3QoJ2pvaW4nLCB1JyAnLCB1J2EgYiBjIGQnLCBbJ2EnLCAnYicsIHUnYycsIHUnZCddKQp0ZXN0KCdqb2luJywgdScnLCB1J2FiY2QnLCAodSdhJywgdSdiJywgdSdjJywgdSdkJykpCnRlc3QoJ2pvaW4nLCB1JyAnLCB1J3cgeCB5IHonLCBTZXF1ZW5jZSgnd3h5eicpKQp0ZXN0KCdqb2luJywgdScgJywgVHlwZUVycm9yLCA3KQp0ZXN0KCdqb2luJywgdScgJywgVHlwZUVycm9yLCBTZXF1ZW5jZShbNywgdSdoZWxsbycsIDEyM0xdKSkKdGVzdCgnam9pbicsICcgJywgdSdhIGIgYyBkJywgW3UnYScsIHUnYicsIHUnYycsIHUnZCddKQp0ZXN0KCdqb2luJywgJyAnLCB1J2EgYiBjIGQnLCBbJ2EnLCAnYicsIHUnYycsIHUnZCddKQp0ZXN0KCdqb2luJywgJycsIHUnYWJjZCcsICh1J2EnLCB1J2InLCB1J2MnLCB1J2QnKSkKdGVzdCgnam9pbicsICcgJywgdSd3IHggeSB6JywgU2VxdWVuY2UodSd3eHl6JykpCnRlc3QoJ2pvaW4nLCAnICcsIFR5cGVFcnJvciwgNykKCnJlc3VsdCA9IHUnJwpmb3IgaSBpbiByYW5nZSgxMCk6CiAgICBpZiBpID4gMDoKICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB1JzonCiAgICByZXN1bHQgPSByZXN1bHQgKyB1J3gnKjEwCnRlc3QoJ2pvaW4nLCB1JzonLCByZXN1bHQsIFt1J3gnICogMTBdICogMTApCnRlc3QoJ2pvaW4nLCB1JzonLCByZXN1bHQsICh1J3gnICogMTAsKSAqIDEwKQoKdGVzdCgnc3RyaXAnLCB1JyAgIGhlbGxvICAgJywgdSdoZWxsbycpCnRlc3QoJ2xzdHJpcCcsIHUnICAgaGVsbG8gICAnLCB1J2hlbGxvICAgJykKdGVzdCgncnN0cmlwJywgdScgICBoZWxsbyAgICcsIHUnICAgaGVsbG8nKQp0ZXN0KCdzdHJpcCcsIHUnaGVsbG8nLCB1J2hlbGxvJykKCnRlc3QoJ3N3YXBjYXNlJywgdSdIZUxMbyBjT21wVXRlUnMnLCB1J2hFbGxPIENvTVB1VEVyUycpCgppZiAwOgogICAgdGVzdCgndHJhbnNsYXRlJywgdSd4eXphYmNkZWYnLCB1J3h5enh5eicsIHRyYW5zdGFibGUsIHUnZGVmJykKCiAgICB0YWJsZSA9IHN0cmluZy5tYWtldHJhbnMoJ2EnLCB1J0EnKQogICAgdGVzdCgndHJhbnNsYXRlJywgdSdhYmMnLCB1J0FiYycsIHRhYmxlKQogICAgdGVzdCgndHJhbnNsYXRlJywgdSd4eXonLCB1J3h5eicsIHRhYmxlKQoKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZUB0d28hdGhyZWUhJywgdSchJywgdSdAJywgMSkKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZXR3b3RocmVlJywgJyEnLCAnJykKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZUB0d29AdGhyZWUhJywgdSchJywgdSdAJywgMikKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZUB0d29AdGhyZWVAJywgdSchJywgdSdAJywgMykKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZUB0d29AdGhyZWVAJywgdSchJywgdSdAJywgNCkKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZSF0d28hdGhyZWUhJywgdSchJywgdSdAJywgMCkKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZUB0d29AdGhyZWVAJywgdSchJywgdSdAJykKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZSF0d28hdGhyZWUhJywgdSd4JywgdSdAJykKdGVzdCgncmVwbGFjZScsIHUnb25lIXR3byF0aHJlZSEnLCB1J29uZSF0d28hdGhyZWUhJywgdSd4JywgdSdAJywgMikKCnRlc3QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgMSwgdSdoZScpCnRlc3QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgMSwgdSdoZWxsbycpCnRlc3QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgMCwgdSdoZWxsbyB3b3JsZCcpCnRlc3QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgMSwgdScnKQp0ZXN0KCdzdGFydHN3aXRoJywgdSdoZWxsbycsIDAsIHUnZWxsbycpCnRlc3QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgMSwgdSdlbGxvJywgMSkKdGVzdCgnc3RhcnRzd2l0aCcsIHUnaGVsbG8nLCAxLCB1J28nLCA0KQp0ZXN0KCdzdGFydHN3aXRoJywgdSdoZWxsbycsIDAsIHUnbycsIDUpCnRlc3QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgMSwgdScnLCA1KQp0ZXN0KCdzdGFydHN3aXRoJywgdSdoZWxsbycsIDAsIHUnbG8nLCA2KQp0ZXN0KCdzdGFydHN3aXRoJywgdSdoZWxsb3dvcmxkJywgMSwgdSdsb3dvJywgMykKdGVzdCgnc3RhcnRzd2l0aCcsIHUnaGVsbG93b3JsZCcsIDEsIHUnbG93bycsIDMsIDcpCnRlc3QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvd29ybGQnLCAwLCB1J2xvd28nLCAzLCA2KQoKdGVzdCgnZW5kc3dpdGgnLCB1J2hlbGxvJywgMSwgdSdsbycpCnRlc3QoJ2VuZHN3aXRoJywgdSdoZWxsbycsIDAsIHUnaGUnKQp0ZXN0KCdlbmRzd2l0aCcsIHUnaGVsbG8nLCAxLCB1JycpCnRlc3QoJ2VuZHN3aXRoJywgdSdoZWxsbycsIDAsIHUnaGVsbG8gd29ybGQnKQp0ZXN0KCdlbmRzd2l0aCcsIHUnaGVsbG93b3JsZCcsIDAsIHUnd29ybCcpCnRlc3QoJ2VuZHN3aXRoJywgdSdoZWxsb3dvcmxkJywgMSwgdSd3b3JsJywgMywgOSkKdGVzdCgnZW5kc3dpdGgnLCB1J2hlbGxvd29ybGQnLCAxLCB1J3dvcmxkJywgMywgMTIpCnRlc3QoJ2VuZHN3aXRoJywgdSdoZWxsb3dvcmxkJywgMSwgdSdsb3dvJywgMSwgNykKdGVzdCgnZW5kc3dpdGgnLCB1J2hlbGxvd29ybGQnLCAxLCB1J2xvd28nLCAyLCA3KQp0ZXN0KCdlbmRzd2l0aCcsIHUnaGVsbG93b3JsZCcsIDEsIHUnbG93bycsIDMsIDcpCnRlc3QoJ2VuZHN3aXRoJywgdSdoZWxsb3dvcmxkJywgMCwgdSdsb3dvJywgNCwgNykKdGVzdCgnZW5kc3dpdGgnLCB1J2hlbGxvd29ybGQnLCAwLCB1J2xvd28nLCAzLCA4KQp0ZXN0KCdlbmRzd2l0aCcsIHUnYWInLCAwLCB1J2FiJywgMCwgMSkKdGVzdCgnZW5kc3dpdGgnLCB1J2FiJywgMCwgdSdhYicsIDAsIDApCgp0ZXN0KCdleHBhbmR0YWJzJywgdSdhYmNccmFiXHRkZWZcbmdcdGhpJywgdSdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJykKdGVzdCgnZXhwYW5kdGFicycsIHUnYWJjXHJhYlx0ZGVmXG5nXHRoaScsIHUnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsIDgpCnRlc3QoJ2V4cGFuZHRhYnMnLCB1J2FiY1xyYWJcdGRlZlxuZ1x0aGknLCB1J2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgNCkKdGVzdCgnZXhwYW5kdGFicycsIHUnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywgdSdhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywgNCkKCmlmIDA6CiAgICB0ZXN0KCdjYXB3b3JkcycsIHUnYWJjIGRlZiBnaGknLCB1J0FiYyBEZWYgR2hpJykKICAgIHRlc3QoJ2NhcHdvcmRzJywgdSdhYmNcdGRlZlxuZ2hpJywgdSdBYmMgRGVmIEdoaScpCiAgICB0ZXN0KCdjYXB3b3JkcycsIHUnYWJjXHQgICBkZWYgIFxuZ2hpJywgdSdBYmMgRGVmIEdoaScpCgojIENvbXBhcmlzb25zOgpwcmludCAnVGVzdGluZyBVbmljb2RlIGNvbXBhcmlzb25zLi4uJywKdmVyaWZ5KHUnYWJjJyA9PSAnYWJjJykKdmVyaWZ5KCdhYmMnID09IHUnYWJjJykKdmVyaWZ5KHUnYWJjJyA9PSB1J2FiYycpCnZlcmlmeSh1J2FiY2QnID4gJ2FiYycpCnZlcmlmeSgnYWJjZCcgPiB1J2FiYycpCnZlcmlmeSh1J2FiY2QnID4gdSdhYmMnKQp2ZXJpZnkodSdhYmMnIDwgJ2FiY2QnKQp2ZXJpZnkoJ2FiYycgPCB1J2FiY2QnKQp2ZXJpZnkodSdhYmMnIDwgdSdhYmNkJykKcHJpbnQgJ2RvbmUuJwoKaWYgMDoKICAgICMgTW92ZSB0aGVzZSB0ZXN0cyB0byBhIFVuaWNvZGUgY29sbGF0aW9uIG1vZHVsZSB0ZXN0Li4uCgogICAgcHJpbnQgJ1Rlc3RpbmcgVVRGLTE2IGNvZGUgcG9pbnQgb3JkZXIgY29tcGFyaXNvbnMuLi4nLAogICAgI05vIHN1cnJvZ2F0ZXMsIG5vIGZpeHVwIHJlcXVpcmVkLgogICAgdmVyaWZ5KHUnXHUwMDYxJyA8IHUnXHUyMGFjJykKICAgICMgTm9uIHN1cnJvZ2F0ZSBiZWxvdyBzdXJyb2dhdGUgdmFsdWUsIG5vIGZpeHVwIHJlcXVpcmVkCiAgICB2ZXJpZnkodSdcdTAwNjEnIDwgdSdcdWQ4MDBcdWRjMDInKQoKICAgICMgTm9uIHN1cnJvZ2F0ZSBhYm92ZSBzdXJyb2dhdGUgdmFsdWUsIGZpeHVwIHJlcXVpcmVkCiAgICBkZWYgdGVzdF9sZWNtcChzLCBzMik6CiAgICAgICAgdmVyaWZ5KHMgPCAgczIgLCAiY29tcGFyaXNvbiBmYWlsZWQgb24gJXMgPCAlcyIgJSAocywgczIpKQoKICAgIGRlZiB0ZXN0X2ZpeHVwKHMpOgogICAgICAgIHMyID0gdSdcdWQ4MDBcdWRjMDEnCiAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKICAgICAgICBzMiA9IHUnXHVkOTAwXHVkYzAxJwogICAgICAgIHRlc3RfbGVjbXAocywgczIpCiAgICAgICAgczIgPSB1J1x1ZGEwMFx1ZGMwMScKICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQogICAgICAgIHMyID0gdSdcdWRiMDBcdWRjMDEnCiAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKICAgICAgICBzMiA9IHUnXHVkODAwXHVkZDAxJwogICAgICAgIHRlc3RfbGVjbXAocywgczIpCiAgICAgICAgczIgPSB1J1x1ZDkwMFx1ZGQwMScKICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQogICAgICAgIHMyID0gdSdcdWRhMDBcdWRkMDEnCiAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKICAgICAgICBzMiA9IHUnXHVkYjAwXHVkZDAxJwogICAgICAgIHRlc3RfbGVjbXAocywgczIpCiAgICAgICAgczIgPSB1J1x1ZDgwMFx1ZGUwMScKICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQogICAgICAgIHMyID0gdSdcdWQ5MDBcdWRlMDEnCiAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKICAgICAgICBzMiA9IHUnXHVkYTAwXHVkZTAxJwogICAgICAgIHRlc3RfbGVjbXAocywgczIpCiAgICAgICAgczIgPSB1J1x1ZGIwMFx1ZGUwMScKICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQogICAgICAgIHMyID0gdSdcdWQ4MDBcdWRmZmYnCiAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKICAgICAgICBzMiA9IHUnXHVkOTAwXHVkZmZmJwogICAgICAgIHRlc3RfbGVjbXAocywgczIpCiAgICAgICAgczIgPSB1J1x1ZGEwMFx1ZGZmZicKICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQogICAgICAgIHMyID0gdSdcdWRiMDBcdWRmZmYnCiAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKCiAgICB0ZXN0X2ZpeHVwKHUnXHVlMDAwJykKICAgIHRlc3RfZml4dXAodSdcdWZmNjEnKQoKICAgICMgU3Vycm9nYXRlcyBvbiBib3RoIHNpZGVzLCBubyBmaXh1cCByZXF1aXJlZAogICAgdmVyaWZ5KHUnXHVkODAwXHVkYzAyJyA8IHUnXHVkODRkXHVkYzU2JykKICAgIHByaW50ICdkb25lLicKCnRlc3QoJ2xqdXN0JywgdSdhYmMnLCAgdSdhYmMgICAgICAgJywgMTApCnRlc3QoJ3JqdXN0JywgdSdhYmMnLCAgdScgICAgICAgYWJjJywgMTApCnRlc3QoJ2NlbnRlcicsIHUnYWJjJywgdScgICBhYmMgICAgJywgMTApCnRlc3QoJ2xqdXN0JywgdSdhYmMnLCAgdSdhYmMgICAnLCA2KQp0ZXN0KCdyanVzdCcsIHUnYWJjJywgIHUnICAgYWJjJywgNikKdGVzdCgnY2VudGVyJywgdSdhYmMnLCB1JyBhYmMgICcsIDYpCnRlc3QoJ2xqdXN0JywgdSdhYmMnLCB1J2FiYycsIDIpCnRlc3QoJ3JqdXN0JywgdSdhYmMnLCB1J2FiYycsIDIpCnRlc3QoJ2NlbnRlcicsIHUnYWJjJywgdSdhYmMnLCAyKQoKdGVzdCgnaXNsb3dlcicsIHUnYScsIDEpCnRlc3QoJ2lzbG93ZXInLCB1J0EnLCAwKQp0ZXN0KCdpc2xvd2VyJywgdSdcbicsIDApCnRlc3QoJ2lzbG93ZXInLCB1J1x1MUZGYycsIDApCnRlc3QoJ2lzbG93ZXInLCB1J2FiYycsIDEpCnRlc3QoJ2lzbG93ZXInLCB1J2FCYycsIDApCnRlc3QoJ2lzbG93ZXInLCB1J2FiY1xuJywgMSkKCnRlc3QoJ2lzdXBwZXInLCB1J2EnLCAwKQp0ZXN0KCdpc3VwcGVyJywgdSdBJywgMSkKdGVzdCgnaXN1cHBlcicsIHUnXG4nLCAwKQppZiBzeXMucGxhdGZvcm1bOjRdICE9ICdqYXZhJzoKICAgIHRlc3QoJ2lzdXBwZXInLCB1J1x1MUZGYycsIDApCnRlc3QoJ2lzdXBwZXInLCB1J0FCQycsIDEpCnRlc3QoJ2lzdXBwZXInLCB1J0FiQycsIDApCnRlc3QoJ2lzdXBwZXInLCB1J0FCQ1xuJywgMSkKCnRlc3QoJ2lzdGl0bGUnLCB1J2EnLCAwKQp0ZXN0KCdpc3RpdGxlJywgdSdBJywgMSkKdGVzdCgnaXN0aXRsZScsIHUnXG4nLCAwKQp0ZXN0KCdpc3RpdGxlJywgdSdcdTFGRmMnLCAxKQp0ZXN0KCdpc3RpdGxlJywgdSdBIFRpdGxlY2FzZWQgTGluZScsIDEpCnRlc3QoJ2lzdGl0bGUnLCB1J0FcblRpdGxlY2FzZWQgTGluZScsIDEpCnRlc3QoJ2lzdGl0bGUnLCB1J0EgVGl0bGVjYXNlZCwgTGluZScsIDEpCnRlc3QoJ2lzdGl0bGUnLCB1J0dyZWVrIFx1MUZGY2l0bGVjYXNlcyAuLi4nLCAxKQp0ZXN0KCdpc3RpdGxlJywgdSdOb3QgYSBjYXBpdGFsaXplZCBTdHJpbmcnLCAwKQp0ZXN0KCdpc3RpdGxlJywgdSdOb3RcdGEgVGl0bGVjYXNlIFN0cmluZycsIDApCnRlc3QoJ2lzdGl0bGUnLCB1J05vdC0tYSBUaXRsZWNhc2UgU3RyaW5nJywgMCkKCnRlc3QoJ2lzYWxwaGEnLCB1J2EnLCAxKQp0ZXN0KCdpc2FscGhhJywgdSdBJywgMSkKdGVzdCgnaXNhbHBoYScsIHUnXG4nLCAwKQp0ZXN0KCdpc2FscGhhJywgdSdcdTFGRmMnLCAxKQp0ZXN0KCdpc2FscGhhJywgdSdhYmMnLCAxKQp0ZXN0KCdpc2FscGhhJywgdSdhQmMxMjMnLCAwKQp0ZXN0KCdpc2FscGhhJywgdSdhYmNcbicsIDApCgp0ZXN0KCdpc2FsbnVtJywgdSdhJywgMSkKdGVzdCgnaXNhbG51bScsIHUnQScsIDEpCnRlc3QoJ2lzYWxudW0nLCB1J1xuJywgMCkKdGVzdCgnaXNhbG51bScsIHUnMTIzYWJjNDU2JywgMSkKdGVzdCgnaXNhbG51bScsIHUnYTFiM2MnLCAxKQp0ZXN0KCdpc2FsbnVtJywgdSdhQmMwMDAgJywgMCkKdGVzdCgnaXNhbG51bScsIHUnYWJjXG4nLCAwKQoKdGVzdCgnc3BsaXRsaW5lcycsIHUiYWJjXG5kZWZcblxyZ2hpIiwgW3UnYWJjJywgdSdkZWYnLCB1JycsIHUnZ2hpJ10pCnRlc3QoJ3NwbGl0bGluZXMnLCB1ImFiY1xuZGVmXG5cclxuZ2hpIiwgW3UnYWJjJywgdSdkZWYnLCB1JycsIHUnZ2hpJ10pCnRlc3QoJ3NwbGl0bGluZXMnLCB1ImFiY1xuZGVmXHJcbmdoaSIsIFt1J2FiYycsIHUnZGVmJywgdSdnaGknXSkKdGVzdCgnc3BsaXRsaW5lcycsIHUiYWJjXG5kZWZcclxuZ2hpXG4iLCBbdSdhYmMnLCB1J2RlZicsIHUnZ2hpJ10pCnRlc3QoJ3NwbGl0bGluZXMnLCB1ImFiY1xuZGVmXHJcbmdoaVxuXHIiLCBbdSdhYmMnLCB1J2RlZicsIHUnZ2hpJywgdScnXSkKdGVzdCgnc3BsaXRsaW5lcycsIHUiXG5hYmNcbmRlZlxyXG5naGlcblxyIiwgW3UnJywgdSdhYmMnLCB1J2RlZicsIHUnZ2hpJywgdScnXSkKdGVzdCgnc3BsaXRsaW5lcycsIHUiXG5hYmNcbmRlZlxyXG5naGlcblxyIiwgW3UnXG4nLCB1J2FiY1xuJywgdSdkZWZcclxuJywgdSdnaGlcbicsIHUnXHInXSwgMSkKCnRlc3QoJ3RyYW5zbGF0ZScsIHUiYWJhYmFiYyIsIHUnYmJiYycsIHtvcmQoJ2EnKTpOb25lfSkKdGVzdCgndHJhbnNsYXRlJywgdSJhYmFiYWJjIiwgdSdpaWljJywge29yZCgnYScpOk5vbmUsIG9yZCgnYicpOm9yZCgnaScpfSkKdGVzdCgndHJhbnNsYXRlJywgdSJhYmFiYWJjIiwgdSdpaWl4Jywge29yZCgnYScpOk5vbmUsIG9yZCgnYicpOm9yZCgnaScpLCBvcmQoJ2MnKTp1J3gnfSkKCiMgQ29udGFpbnM6CnByaW50ICdUZXN0aW5nIFVuaWNvZGUgY29udGFpbnMgbWV0aG9kLi4uJywKdmVyaWZ5KCgnYScgaW4gdSdhYmRiJykgPT0gMSkKdmVyaWZ5KCgnYScgaW4gdSdiZGFiJykgPT0gMSkKdmVyaWZ5KCgnYScgaW4gdSdiZGFiYScpID09IDEpCnZlcmlmeSgoJ2EnIGluIHUnYmRiYScpID09IDEpCnZlcmlmeSgoJ2EnIGluIHUnYmRiYScpID09IDEpCnZlcmlmeSgodSdhJyBpbiB1J2JkYmEnKSA9PSAxKQp2ZXJpZnkoKHUnYScgaW4gdSdiZGInKSA9PSAwKQp2ZXJpZnkoKHUnYScgaW4gJ2JkYicpID09IDApCnZlcmlmeSgodSdhJyBpbiAnYmRiYScpID09IDEpCnZlcmlmeSgodSdhJyBpbiAoJ2EnLDEsTm9uZSkpID09IDEpCnZlcmlmeSgodSdhJyBpbiAoMSxOb25lLCdhJykpID09IDEpCnZlcmlmeSgodSdhJyBpbiAoMSxOb25lLHUnYScpKSA9PSAxKQp2ZXJpZnkoKCdhJyBpbiAoJ2EnLDEsTm9uZSkpID09IDEpCnZlcmlmeSgoJ2EnIGluICgxLE5vbmUsJ2EnKSkgPT0gMSkKdmVyaWZ5KCgnYScgaW4gKDEsTm9uZSx1J2EnKSkgPT0gMSkKdmVyaWZ5KCgnYScgaW4gKCd4JywxLHUneScpKSA9PSAwKQp2ZXJpZnkoKCdhJyBpbiAoJ3gnLDEsTm9uZSkpID09IDApCnByaW50ICdkb25lLicKCiMgRm9ybWF0dGluZzoKcHJpbnQgJ1Rlc3RpbmcgVW5pY29kZSBmb3JtYXR0aW5nIHN0cmluZ3MuLi4nLAp2ZXJpZnkodSIlcywgJXMiICUgKHUiYWJjIiwgImFiYyIpID09IHUnYWJjLCBhYmMnKQp2ZXJpZnkodSIlcywgJXMsICVpLCAlZiwgJTUuMmYiICUgKHUiYWJjIiwgImFiYyIsIDEsIDIsIDMpID09IHUnYWJjLCBhYmMsIDEsIDIuMDAwMDAwLCAgMy4wMCcpCnZlcmlmeSh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgMSwgLTIsIDMpID09IHUnYWJjLCBhYmMsIDEsIC0yLjAwMDAwMCwgIDMuMDAnKQp2ZXJpZnkodSIlcywgJXMsICVpLCAlZiwgJTUuMmYiICUgKHUiYWJjIiwgImFiYyIsIC0xLCAtMiwgMy41KSA9PSB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAgMy41MCcpCnZlcmlmeSh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAzLjU3KSA9PSB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAgMy41NycpCnZlcmlmeSh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAxMDAzLjU3KSA9PSB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAxMDAzLjU3JykKdmVyaWZ5KHUiJWMiICUgKHUiYSIsKSA9PSB1J2EnKQp2ZXJpZnkodSIlYyIgJSAoImEiLCkgPT0gdSdhJykKdmVyaWZ5KHUiJWMiICUgKDM0LCkgPT0gdSciJykKdmVyaWZ5KHUiJWMiICUgKDM2LCkgPT0gdSckJykKaWYgc3lzLnBsYXRmb3JtWzo0XSAhPSAnamF2YSc6CiAgICB2YWx1ZSA9IHUiJXIsICVyIiAlICh1ImFiYyIsICJhYmMiKQogICAgaWYgdmFsdWUgIT0gdSJ1J2FiYycsICdhYmMnIjoKICAgICAgICBwcmludCAnKioqIGZvcm1hdHRpbmcgZmFpbGVkIGZvciAiJXMiJyAlICd1IiVyLCAlciIgJSAodSJhYmMiLCAiYWJjIiknCgp2ZXJpZnkodSIlKHgpcywgJSh5KXMiICUgeyd4Jzp1ImFiYyIsICd5JzoiZGVmIn0gPT0gdSdhYmMsIGRlZicpCnRyeToKICAgIGlmIHN5cy5wbGF0Zm9ybVs6NF0gIT0gJ2phdmEnOgogICAgICAgIHZhbHVlID0gdSIlKHgpcywgJSjkKXMiICUgeyd4Jzp1ImFiYyIsIHUn5CcuZW5jb2RlKCd1dGYtOCcpOiJkZWYifQogICAgZWxzZToKICAgICAgICB2YWx1ZSA9IHUiJSh4KXMsICUo5ClzIiAlIHsneCc6dSJhYmMiLCB1J+QnOiJkZWYifQpleGNlcHQgS2V5RXJyb3I6CiAgICBwcmludCAnKioqIGZvcm1hdHRpbmcgZmFpbGVkIGZvciAiJXMiJyAlICJ1J2FiYywgZGVmJyIKZWxzZToKICAgIHZlcmlmeSh2YWx1ZSA9PSB1J2FiYywgZGVmJykKCiMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246CnZlcmlmeSgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6dSJhYmMifSA9PSB1Jy4uLmFiYy4uLicpCnZlcmlmeSgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6ImFiYyJ9ID09ICcuLi5hYmMuLi4nKQp2ZXJpZnkoJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzoiYWJjIn0gPT0gJy4uLmFiYy4uLicpCnZlcmlmeSgnLi4uJShmb28pcy4uLicgJSB7dSdmb28nOnUiYWJjIn0gPT0gdScuLi5hYmMuLi4nKQp2ZXJpZnkoJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzp1ImFiYyIsJ2RlZic6MTIzfSA9PSAgdScuLi5hYmMuLi4nKQp2ZXJpZnkoJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzp1ImFiYyIsdSdkZWYnOjEyM30gPT0gdScuLi5hYmMuLi4nKQp2ZXJpZnkoJy4uLiVzLi4uJXMuLi4lcy4uLiVzLi4uJyAlICgxLDIsMyx1ImFiYyIpID09IHUnLi4uMS4uLjIuLi4zLi4uYWJjLi4uJykKdmVyaWZ5KCcuLi4lJS4uLiUlcy4uLiVzLi4uJXMuLi4lcy4uLiVzLi4uJyAlICgxLDIsMyx1ImFiYyIpID09IHUnLi4uJS4uLiVzLi4uMS4uLjIuLi4zLi4uYWJjLi4uJykKdmVyaWZ5KCcuLi4lcy4uLicgJSB1ImFiYyIgPT0gdScuLi5hYmMuLi4nKQp2ZXJpZnkoJyUqcycgJSAoNSx1J2FiYycsKSA9PSB1JyAgYWJjJykKdmVyaWZ5KCclKnMnICUgKC01LHUnYWJjJywpID09IHUnYWJjICAnKQp2ZXJpZnkoJyUqLipzJyAlICg1LDIsdSdhYmMnLCkgPT0gdScgICBhYicpCnZlcmlmeSgnJSouKnMnICUgKDUsMyx1J2FiYycsKSA9PSB1JyAgYWJjJykKdmVyaWZ5KCclaSAlKi4qcycgJSAoMTAsIDUsMyx1J2FiYycsKSA9PSB1JzEwICAgYWJjJykKdmVyaWZ5KCclaSVzICUqLipzJyAlICgxMCwgMywgNSwzLHUnYWJjJywpID09IHUnMTAzICAgYWJjJykKcHJpbnQgJ2RvbmUuJwoKIyBUZXN0IGJ1aWx0aW4gY29kZWNzCnByaW50ICdUZXN0aW5nIGJ1aWx0aW4gY29kZWNzLi4uJywKCiMgVVRGLTggc3BlY2lmaWMgZW5jb2RpbmcgdGVzdHM6CnZlcmlmeSh1J1x1MjBhYycuZW5jb2RlKCd1dGYtOCcpID09IFwKICAgICAgICcnLmpvaW4oKGNocigweGUyKSwgY2hyKDB4ODIpLCBjaHIoMHhhYykpKSApCnZlcmlmeSh1J1x1ZDgwMFx1ZGMwMicuZW5jb2RlKCd1dGYtOCcpID09IFwKICAgICAgICcnLmpvaW4oKGNocigweGYwKSwgY2hyKDB4OTApLCBjaHIoMHg4MCksIGNocigweDgyKSkpICkKdmVyaWZ5KHUnXHVkODRkXHVkYzU2Jy5lbmNvZGUoJ3V0Zi04JykgPT0gXAogICAgICAgJycuam9pbigoY2hyKDB4ZjApLCBjaHIoMHhhMyksIGNocigweDkxKSwgY2hyKDB4OTYpKSkgKQojIFVURi04IHNwZWNpZmljIGRlY29kaW5nIHRlc3RzCnZlcmlmeSh1bmljb2RlKCcnLmpvaW4oKGNocigweGYwKSwgY2hyKDB4YTMpLCBjaHIoMHg5MSksIGNocigweDk2KSkpLAogICAgICAgICAgICAgICAndXRmLTgnKSA9PSB1J1x1ZDg0ZFx1ZGM1NicgKQp2ZXJpZnkodW5pY29kZSgnJy5qb2luKChjaHIoMHhmMCksIGNocigweDkwKSwgY2hyKDB4ODApLCBjaHIoMHg4MikpKSwKICAgICAgICAgICAgICAgJ3V0Zi04JykgPT0gdSdcdWQ4MDBcdWRjMDInICkKdmVyaWZ5KHVuaWNvZGUoJycuam9pbigoY2hyKDB4ZTIpLCBjaHIoMHg4MiksIGNocigweGFjKSkpLAogICAgICAgICAgICAgICAndXRmLTgnKSA9PSB1J1x1MjBhYycgKQoKIyBPdGhlciBwb3NzaWJsZSB1dGYtOCB0ZXN0IGNhc2VzOgojICogc3RyaWN0IGRlY29kaW5nIHRlc3RpbmcgZm9yIGFsbCBvZiB0aGUKIyAgIFVURjhfRVJST1IgY2FzZXMgaW4gUHlVbmljb2RlX0RlY29kZVVURjgKCgoKdmVyaWZ5KHVuaWNvZGUoJ2hlbGxvJywnYXNjaWknKSA9PSB1J2hlbGxvJykKdmVyaWZ5KHVuaWNvZGUoJ2hlbGxvJywndXRmLTgnKSA9PSB1J2hlbGxvJykKdmVyaWZ5KHVuaWNvZGUoJ2hlbGxvJywndXRmOCcpID09IHUnaGVsbG8nKQp2ZXJpZnkodW5pY29kZSgnaGVsbG8nLCdsYXRpbi0xJykgPT0gdSdoZWxsbycpCgpjbGFzcyBTdHJpbmc6CiAgICB4ID0gJycKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLngKCm8gPSBTdHJpbmcoKQoKby54ID0gJ2FiYycKdmVyaWZ5KHVuaWNvZGUobykgPT0gdSdhYmMnKQp2ZXJpZnkoc3RyKG8pID09ICdhYmMnKQoKby54ID0gdSdhYmMnCnZlcmlmeSh1bmljb2RlKG8pID09IHUnYWJjJykKdmVyaWZ5KHN0cihvKSA9PSAnYWJjJykKCnRyeToKICAgIHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScpCiAgICB1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCdzdHJpY3QnKQpleGNlcHQgVmFsdWVFcnJvcjoKICAgIHBhc3MKZWxzZToKICAgIHJhaXNlIFRlc3RGYWlsZWQsICJ1J0FuZHJcMjAyJy5lbmNvZGUoJ2FzY2lpJykgZmFpbGVkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiIKdmVyaWZ5KHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsJ2lnbm9yZScpID09ICJBbmRyIHgiKQp2ZXJpZnkodSdBbmRyXDIwMiB4Jy5lbmNvZGUoJ2FzY2lpJywncmVwbGFjZScpID09ICJBbmRyPyB4IikKCnRyeToKICAgIHVuaWNvZGUoJ0FuZHJcMjAyIHgnLCdhc2NpaScpCiAgICB1bmljb2RlKCdBbmRyXDIwMiB4JywnYXNjaWknLCdzdHJpY3QnKQpleGNlcHQgVmFsdWVFcnJvcjoKICAgIHBhc3MKZWxzZToKICAgIHJhaXNlIFRlc3RGYWlsZWQsICJ1bmljb2RlKCdBbmRyXDIwMicpIGZhaWxlZCB0byByYWlzZSBhbiBleGNlcHRpb24iCnZlcmlmeSh1bmljb2RlKCdBbmRyXDIwMiB4JywnYXNjaWknLCdpZ25vcmUnKSA9PSB1IkFuZHIgeCIpCnZlcmlmeSh1bmljb2RlKCdBbmRyXDIwMiB4JywnYXNjaWknLCdyZXBsYWNlJykgPT0gdSdBbmRyXHVGRkZEIHgnKQoKdmVyaWZ5KHUnaGVsbG8nLmVuY29kZSgnYXNjaWknKSA9PSAnaGVsbG8nKQp2ZXJpZnkodSdoZWxsbycuZW5jb2RlKCd1dGYtOCcpID09ICdoZWxsbycpCnZlcmlmeSh1J2hlbGxvJy5lbmNvZGUoJ3V0ZjgnKSA9PSAnaGVsbG8nKQp2ZXJpZnkodSdoZWxsbycuZW5jb2RlKCd1dGYtMTYtbGUnKSA9PSAnaFwwMDBlXDAwMGxcMDAwbFwwMDBvXDAwMCcpCnZlcmlmeSh1J2hlbGxvJy5lbmNvZGUoJ3V0Zi0xNi1iZScpID09ICdcMDAwaFwwMDBlXDAwMGxcMDAwbFwwMDBvJykKdmVyaWZ5KHUnaGVsbG8nLmVuY29kZSgnbGF0aW4tMScpID09ICdoZWxsbycpCgp1ID0gdScnLmpvaW4obWFwKHVuaWNociwgcmFuZ2UoMTAyNCkpKQpmb3IgZW5jb2RpbmcgaW4gKCd1dGYtOCcsICd1dGYtMTYnLCAndXRmLTE2LWxlJywgJ3V0Zi0xNi1iZScsCiAgICAgICAgICAgICAgICAgJ3Jhd191bmljb2RlX2VzY2FwZScsICd1bmljb2RlX2VzY2FwZScsICd1bmljb2RlX2ludGVybmFsJyk6CiAgICB2ZXJpZnkodW5pY29kZSh1LmVuY29kZShlbmNvZGluZyksZW5jb2RpbmcpID09IHUpCgp1ID0gdScnLmpvaW4obWFwKHVuaWNociwgcmFuZ2UoMjU2KSkpCmZvciBlbmNvZGluZyBpbiAoCiAgICAnbGF0aW4tMScsCiAgICApOgogICAgdHJ5OgogICAgICAgIHZlcmlmeSh1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZykgPT0gdSkKICAgIGV4Y2VwdCBUZXN0RmFpbGVkOgogICAgICAgIHByaW50ICcqKiogY29kZWMgIiVzIiBmYWlsZWQgcm91bmQtdHJpcCcgJSBlbmNvZGluZwogICAgZXhjZXB0IFZhbHVlRXJyb3Isd2h5OgogICAgICAgIHByaW50ICcqKiogY29kZWMgZm9yICIlcyIgZmFpbGVkOiAlcycgJSAoZW5jb2RpbmcsIHdoeSkKCnUgPSB1Jycuam9pbihtYXAodW5pY2hyLCByYW5nZSgxMjgpKSkKZm9yIGVuY29kaW5nIGluICgKICAgICdhc2NpaScsCiAgICApOgogICAgdHJ5OgogICAgICAgIHZlcmlmeSh1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZykgPT0gdSkKICAgIGV4Y2VwdCBUZXN0RmFpbGVkOgogICAgICAgIHByaW50ICcqKiogY29kZWMgIiVzIiBmYWlsZWQgcm91bmQtdHJpcCcgJSBlbmNvZGluZwogICAgZXhjZXB0IFZhbHVlRXJyb3Isd2h5OgogICAgICAgIHByaW50ICcqKiogY29kZWMgZm9yICIlcyIgZmFpbGVkOiAlcycgJSAoZW5jb2RpbmcsIHdoeSkKCnByaW50ICdkb25lLicKCnByaW50ICdUZXN0aW5nIHN0YW5kYXJkIG1hcHBpbmcgY29kZWNzLi4uJywKCnByaW50ICcwLTEyNy4uLicsCnMgPSAnJy5qb2luKG1hcChjaHIsIHJhbmdlKDEyOCkpKQpmb3IgZW5jb2RpbmcgaW4gKAogICAgJ2NwMDM3JywgJ2NwMTAyNicsCiAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAogICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCiAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfMycsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywgJ2lzbzg4NTlfNicsCiAgICAnaXNvODg1OV83JywgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCiAgICAnbWFjX2N5cmlsbGljJywgJ21hY19sYXRpbjInLAoKICAgICdjcDEyNTAnLCAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsCiAgICAnY3AxMjU2JywgJ2NwMTI1NycsICdjcDEyNTgnLAogICAgJ2NwODU2JywgJ2NwODU3JywgJ2NwODY0JywgJ2NwODY5JywgJ2NwODc0JywKCiAgICAnbWFjX2dyZWVrJywgJ21hY19pY2VsYW5kJywnbWFjX3JvbWFuJywgJ21hY190dXJraXNoJywKICAgICdjcDEwMDYnLCAnY3A4NzUnLCAnaXNvODg1OV84JywKCiAgICAjIyMgVGhlc2UgaGF2ZSB1bmRlZmluZWQgbWFwcGluZ3M6CiAgICAjJ2NwNDI0JywKCiAgICApOgogICAgdHJ5OgogICAgICAgIHZlcmlmeSh1bmljb2RlKHMsZW5jb2RpbmcpLmVuY29kZShlbmNvZGluZykgPT0gcykKICAgIGV4Y2VwdCBUZXN0RmFpbGVkOgogICAgICAgIHByaW50ICcqKiogY29kZWMgIiVzIiBmYWlsZWQgcm91bmQtdHJpcCcgJSBlbmNvZGluZwogICAgZXhjZXB0IFZhbHVlRXJyb3Isd2h5OgogICAgICAgIHByaW50ICcqKiogY29kZWMgZm9yICIlcyIgZmFpbGVkOiAlcycgJSAoZW5jb2RpbmcsIHdoeSkKCnByaW50ICcxMjgtMjU1Li4uJywKcyA9ICcnLmpvaW4obWFwKGNociwgcmFuZ2UoMTI4LDI1NikpKQpmb3IgZW5jb2RpbmcgaW4gKAogICAgJ2NwMDM3JywgJ2NwMTAyNicsCiAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAogICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCiAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLAogICAgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCiAgICAnbWFjX2N5cmlsbGljJywgJ21hY19sYXRpbjInLAoKICAgICMjIyBUaGVzZSBoYXZlIHVuZGVmaW5lZCBtYXBwaW5nczoKICAgICMnY3AxMjUwJywgJ2NwMTI1MScsICdjcDEyNTInLCAnY3AxMjUzJywgJ2NwMTI1NCcsICdjcDEyNTUnLAogICAgIydjcDEyNTYnLCAnY3AxMjU3JywgJ2NwMTI1OCcsCiAgICAjJ2NwNDI0JywgJ2NwODU2JywgJ2NwODU3JywgJ2NwODY0JywgJ2NwODY5JywgJ2NwODc0JywKICAgICMnaXNvODg1OV8zJywgJ2lzbzg4NTlfNicsICdpc284ODU5XzcnLAogICAgIydtYWNfZ3JlZWsnLCAnbWFjX2ljZWxhbmQnLCdtYWNfcm9tYW4nLCAnbWFjX3R1cmtpc2gnLAoKICAgICMjIyBUaGVzZSBmYWlsIHRoZSByb3VuZC10cmlwOgogICAgIydjcDEwMDYnLCAnY3A4NzUnLCAnaXNvODg1OV84JywKCiAgICApOgogICAgdHJ5OgogICAgICAgIHZlcmlmeSh1bmljb2RlKHMsZW5jb2RpbmcpLmVuY29kZShlbmNvZGluZykgPT0gcykKICAgIGV4Y2VwdCBUZXN0RmFpbGVkOgogICAgICAgIHByaW50ICcqKiogY29kZWMgIiVzIiBmYWlsZWQgcm91bmQtdHJpcCcgJSBlbmNvZGluZwogICAgZXhjZXB0IFZhbHVlRXJyb3Isd2h5OgogICAgICAgIHByaW50ICcqKiogY29kZWMgZm9yICIlcyIgZmFpbGVkOiAlcycgJSAoZW5jb2RpbmcsIHdoeSkKCnByaW50ICdkb25lLicKCnByaW50ICdUZXN0aW5nIFVuaWNvZGUgc3RyaW5nIGNvbmNhdGVuYXRpb24uLi4nLAp2ZXJpZnkoKHUiYWJjIiB1ImRlZiIpID09IHUiYWJjZGVmIikKdmVyaWZ5KCgiYWJjIiB1ImRlZiIpID09IHUiYWJjZGVmIikKdmVyaWZ5KCh1ImFiYyIgImRlZiIpID09IHUiYWJjZGVmIikKdmVyaWZ5KCh1ImFiYyIgdSJkZWYiICJnaGkiKSA9PSB1ImFiY2RlZmdoaSIpCnZlcmlmeSgoImFiYyIgImRlZiIgdSJnaGkiKSA9PSB1ImFiY2RlZmdoaSIpCnByaW50ICdkb25lLicK