A/MNClBcrFFjAAAAAAAAAAADAAAAQAAAAHPlAAAAZAAAWgAAZAEAWgEAZAIAWgIAZAMAWgMAZAQAWgQAZAUAhAAAWgUAZAYAhAAAWgYAZAcAhAAAWgcAZAgAZgAAZAkAhAAAgwAAWVoIAGQKAGYAAGQLAIQAAIMAAFlaCQBkDABaCgBkDQBaCwBkDgBaDABkDwBaDQBpCQBlAABkEAA2ZQEAZBEANmUCAGQSADZlAwBkEwA2ZQQAZBQANmUKAGQVADZlCwBkFgA2ZQwAZBcANmUNAGQYADZaDgBlDwBkGQCEAQBaEABlEQBkGgBrAgBy4QBlEABkGwCDAQABbgAAZBwAUygdAAAAc9wJAAAKTGV0J3MgdHJ5IGEgc2ltcGxlIGdlbmVyYXRvcjoKCiAgICA+Pj4gZGVmIGYoKToKICAgIC4uLiAgICB5aWVsZCAxCiAgICAuLi4gICAgeWllbGQgMgoKICAgID4+PiBmb3IgaSBpbiBmKCk6CiAgICAuLi4gICAgIHByaW50IGkKICAgIDEKICAgIDIKICAgID4+PiBnID0gZigpCiAgICA+Pj4gZy5uZXh0KCkKICAgIDEKICAgID4+PiBnLm5leHQoKQogICAgMgoKIkZhbGxpbmcgb2ZmIHRoZSBlbmQiIHN0b3BzIHRoZSBnZW5lcmF0b3I6CgogICAgPj4+IGcubmV4dCgpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gZwogICAgU3RvcEl0ZXJhdGlvbgoKInJldHVybiIgYWxzbyBzdG9wcyB0aGUgZ2VuZXJhdG9yOgoKICAgID4+PiBkZWYgZigpOgogICAgLi4uICAgICB5aWVsZCAxCiAgICAuLi4gICAgIHJldHVybgogICAgLi4uICAgICB5aWVsZCAyICMgbmV2ZXIgcmVhY2hlZAogICAgLi4uCiAgICA+Pj4gZyA9IGYoKQogICAgPj4+IGcubmV4dCgpCiAgICAxCiAgICA+Pj4gZy5uZXh0KCkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAzLCBpbiBmCiAgICBTdG9wSXRlcmF0aW9uCiAgICA+Pj4gZy5uZXh0KCkgIyBvbmNlIHN0b3BwZWQsIGNhbid0IGJlIHJlc3VtZWQKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgU3RvcEl0ZXJhdGlvbgoKInJhaXNlIFN0b3BJdGVyYXRpb24iIHN0b3BzIHRoZSBnZW5lcmF0b3IgdG9vOgoKICAgID4+PiBkZWYgZigpOgogICAgLi4uICAgICB5aWVsZCAxCiAgICAuLi4gICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgIC4uLiAgICAgeWllbGQgMiAjIG5ldmVyIHJlYWNoZWQKICAgIC4uLgogICAgPj4+IGcgPSBmKCkKICAgID4+PiBnLm5leHQoKQogICAgMQogICAgPj4+IGcubmV4dCgpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgIFN0b3BJdGVyYXRpb24KICAgID4+PiBnLm5leHQoKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBTdG9wSXRlcmF0aW9uCgpIb3dldmVyLCB0aGV5IGFyZSBub3QgZXhhY3RseSBlcXVpdmFsZW50OgoKICAgID4+PiBkZWYgZzEoKToKICAgIC4uLiAgICAgdHJ5OgogICAgLi4uICAgICAgICAgcmV0dXJuCiAgICAuLi4gICAgIGV4Y2VwdDoKICAgIC4uLiAgICAgICAgIHlpZWxkIDEKICAgIC4uLgogICAgPj4+IGxpc3QoZzEoKSkKICAgIFtdCgogICAgPj4+IGRlZiBnMigpOgogICAgLi4uICAgICB0cnk6CiAgICAuLi4gICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAgICAuLi4gICAgIGV4Y2VwdDoKICAgIC4uLiAgICAgICAgIHlpZWxkIDQyCiAgICA+Pj4gcHJpbnQgbGlzdChnMigpKQogICAgWzQyXQoKVGhpcyBtYXkgYmUgc3VycHJpc2luZyBhdCBmaXJzdDoKCiAgICA+Pj4gZGVmIGczKCk6CiAgICAuLi4gICAgIHRyeToKICAgIC4uLiAgICAgICAgIHJldHVybgogICAgLi4uICAgICBmaW5hbGx5OgogICAgLi4uICAgICAgICAgeWllbGQgMQogICAgLi4uCiAgICA+Pj4gbGlzdChnMygpKQogICAgWzFdCgpMZXQncyBjcmVhdGUgYW4gYWx0ZXJuYXRlIHJhbmdlKCkgZnVuY3Rpb24gaW1wbGVtZW50ZWQgYXMgYSBnZW5lcmF0b3I6CgogICAgPj4+IGRlZiB5cmFuZ2Uobik6CiAgICAuLi4gICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgLi4uICAgICAgICAgeWllbGQgaQogICAgLi4uCiAgICA+Pj4gbGlzdCh5cmFuZ2UoNSkpCiAgICBbMCwgMSwgMiwgMywgNF0KCkdlbmVyYXRvcnMgYWx3YXlzIHJldHVybiB0byB0aGUgbW9zdCByZWNlbnQgY2FsbGVyOgoKICAgID4+PiBkZWYgY3JlYXRvcigpOgogICAgLi4uICAgICByID0geXJhbmdlKDUpCiAgICAuLi4gICAgIHByaW50ICJjcmVhdG9yIiwgci5uZXh0KCkKICAgIC4uLiAgICAgcmV0dXJuIHIKICAgIC4uLgogICAgPj4+IGRlZiBjYWxsZXIoKToKICAgIC4uLiAgICAgciA9IGNyZWF0b3IoKQogICAgLi4uICAgICBmb3IgaSBpbiByOgogICAgLi4uICAgICAgICAgICAgIHByaW50ICJjYWxsZXIiLCBpCiAgICAuLi4KICAgID4+PiBjYWxsZXIoKQogICAgY3JlYXRvciAwCiAgICBjYWxsZXIgMQogICAgY2FsbGVyIDIKICAgIGNhbGxlciAzCiAgICBjYWxsZXIgNAoKR2VuZXJhdG9ycyBjYW4gY2FsbCBvdGhlciBnZW5lcmF0b3JzOgoKICAgID4+PiBkZWYgenJhbmdlKG4pOgogICAgLi4uICAgICBmb3IgaSBpbiB5cmFuZ2Uobik6CiAgICAuLi4gICAgICAgICB5aWVsZCBpCiAgICAuLi4KICAgID4+PiBsaXN0KHpyYW5nZSg1KSkKICAgIFswLCAxLCAyLCAzLCA0XQoKc3ERAAAKClNwZWNpZmljYXRpb246ICBZaWVsZAoKICAgIFJlc3RyaWN0aW9uOiAgQSBnZW5lcmF0b3IgY2Fubm90IGJlIHJlc3VtZWQgd2hpbGUgaXQgaXMgYWN0aXZlbHkKICAgIHJ1bm5pbmc6CgogICAgPj4+IGRlZiBnKCk6CiAgICAuLi4gICAgIGkgPSBtZS5uZXh0KCkKICAgIC4uLiAgICAgeWllbGQgaQogICAgPj4+IG1lID0gZygpCiAgICA+Pj4gbWUubmV4dCgpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgLi4uCiAgICAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyLCBpbiBnCiAgICBWYWx1ZUVycm9yOiBnZW5lcmF0b3IgYWxyZWFkeSBleGVjdXRpbmcKClNwZWNpZmljYXRpb246IFJldHVybgoKICAgIE5vdGUgdGhhdCByZXR1cm4gaXNuJ3QgYWx3YXlzIGVxdWl2YWxlbnQgdG8gcmFpc2luZyBTdG9wSXRlcmF0aW9uOiAgdGhlCiAgICBkaWZmZXJlbmNlIGxpZXMgaW4gaG93IGVuY2xvc2luZyB0cnkvZXhjZXB0IGNvbnN0cnVjdHMgYXJlIHRyZWF0ZWQuCiAgICBGb3IgZXhhbXBsZSwKCiAgICAgICAgPj4+IGRlZiBmMSgpOgogICAgICAgIC4uLiAgICAgdHJ5OgogICAgICAgIC4uLiAgICAgICAgIHJldHVybgogICAgICAgIC4uLiAgICAgZXhjZXB0OgogICAgICAgIC4uLiAgICAgICAgeWllbGQgMQogICAgICAgID4+PiBwcmludCBsaXN0KGYxKCkpCiAgICAgICAgW10KCiAgICBiZWNhdXNlLCBhcyBpbiBhbnkgZnVuY3Rpb24sIHJldHVybiBzaW1wbHkgZXhpdHMsIGJ1dAoKICAgICAgICA+Pj4gZGVmIGYyKCk6CiAgICAgICAgLi4uICAgICB0cnk6CiAgICAgICAgLi4uICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgIC4uLiAgICAgZXhjZXB0OgogICAgICAgIC4uLiAgICAgICAgIHlpZWxkIDQyCiAgICAgICAgPj4+IHByaW50IGxpc3QoZjIoKSkKICAgICAgICBbNDJdCgogICAgYmVjYXVzZSBTdG9wSXRlcmF0aW9uIGlzIGNhcHR1cmVkIGJ5IGEgYmFyZSAiZXhjZXB0IiwgYXMgaXMgYW55CiAgICBleGNlcHRpb24uCgpTcGVjaWZpY2F0aW9uOiBHZW5lcmF0b3JzIGFuZCBFeGNlcHRpb24gUHJvcGFnYXRpb24KCiAgICA+Pj4gZGVmIGYoKToKICAgIC4uLiAgICAgcmV0dXJuIDEvLzAKICAgID4+PiBkZWYgZygpOgogICAgLi4uICAgICB5aWVsZCBmKCkgICMgdGhlIHplcm8gZGl2aXNpb24gZXhjZXB0aW9uIHByb3BhZ2F0ZXMKICAgIC4uLiAgICAgeWllbGQgNDIgICAjIGFuZCB3ZSdsbCBuZXZlciBnZXQgaGVyZQogICAgPj4+IGsgPSBnKCkKICAgID4+PiBrLm5leHQoKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIGcKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gZgogICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm8KICAgID4+PiBrLm5leHQoKSAgIyBhbmQgdGhlIGdlbmVyYXRvciBjYW5ub3QgYmUgcmVzdW1lZAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBTdG9wSXRlcmF0aW9uCiAgICA+Pj4KClNwZWNpZmljYXRpb246IFRyeS9FeGNlcHQvRmluYWxseQoKICAgID4+PiBkZWYgZigpOgogICAgLi4uICAgICB0cnk6CiAgICAuLi4gICAgICAgICB5aWVsZCAxCiAgICAuLi4gICAgICAgICB0cnk6CiAgICAuLi4gICAgICAgICAgICAgeWllbGQgMgogICAgLi4uICAgICAgICAgICAgIDEvLzAKICAgIC4uLiAgICAgICAgICAgICB5aWVsZCAzICAjIG5ldmVyIGdldCBoZXJlCiAgICAuLi4gICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CiAgICAuLi4gICAgICAgICAgICAgeWllbGQgNAogICAgLi4uICAgICAgICAgICAgIHlpZWxkIDUKICAgIC4uLiAgICAgICAgICAgICByYWlzZQogICAgLi4uICAgICAgICAgZXhjZXB0OgogICAgLi4uICAgICAgICAgICAgIHlpZWxkIDYKICAgIC4uLiAgICAgICAgIHlpZWxkIDcgICAgICMgdGhlICJyYWlzZSIgYWJvdmUgc3RvcHMgdGhpcwogICAgLi4uICAgICBleGNlcHQ6CiAgICAuLi4gICAgICAgICB5aWVsZCA4CiAgICAuLi4gICAgIHlpZWxkIDkKICAgIC4uLiAgICAgdHJ5OgogICAgLi4uICAgICAgICAgeCA9IDEyCiAgICAuLi4gICAgIGZpbmFsbHk6CiAgICAuLi4gICAgICAgICB5aWVsZCAxMAogICAgLi4uICAgICB5aWVsZCAxMQogICAgPj4+IHByaW50IGxpc3QoZigpKQogICAgWzEsIDIsIDQsIDUsIDgsIDksIDEwLCAxMV0KICAgID4+PgoKR3VpZG8ncyBiaW5hcnkgdHJlZSBleGFtcGxlLgoKICAgID4+PiAjIEEgYmluYXJ5IHRyZWUgY2xhc3MuCiAgICA+Pj4gY2xhc3MgVHJlZToKICAgIC4uLgogICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwsIGxlZnQ9Tm9uZSwgcmlnaHQ9Tm9uZSk6CiAgICAuLi4gICAgICAgICBzZWxmLmxhYmVsID0gbGFiZWwKICAgIC4uLiAgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKICAgIC4uLiAgICAgICAgIHNlbGYucmlnaHQgPSByaWdodAogICAgLi4uCiAgICAuLi4gICAgIGRlZiBfX3JlcHJfXyhzZWxmLCBsZXZlbD0wLCBpbmRlbnQ9IiAgICAiKToKICAgIC4uLiAgICAgICAgIHMgPSBsZXZlbCppbmRlbnQgKyByZXByKHNlbGYubGFiZWwpCiAgICAuLi4gICAgICAgICBpZiBzZWxmLmxlZnQ6CiAgICAuLi4gICAgICAgICAgICAgcyA9IHMgKyAiXG4iICsgc2VsZi5sZWZ0Ll9fcmVwcl9fKGxldmVsKzEsIGluZGVudCkKICAgIC4uLiAgICAgICAgIGlmIHNlbGYucmlnaHQ6CiAgICAuLi4gICAgICAgICAgICAgcyA9IHMgKyAiXG4iICsgc2VsZi5yaWdodC5fX3JlcHJfXyhsZXZlbCsxLCBpbmRlbnQpCiAgICAuLi4gICAgICAgICByZXR1cm4gcwogICAgLi4uCiAgICAuLi4gICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgIC4uLiAgICAgICAgIHJldHVybiBpbm9yZGVyKHNlbGYpCgogICAgPj4+ICMgQ3JlYXRlIGEgVHJlZSBmcm9tIGEgbGlzdC4KICAgID4+PiBkZWYgdHJlZShsaXN0KToKICAgIC4uLiAgICAgbiA9IGxlbihsaXN0KQogICAgLi4uICAgICBpZiBuID09IDA6CiAgICAuLi4gICAgICAgICByZXR1cm4gW10KICAgIC4uLiAgICAgaSA9IG4gLy8gMgogICAgLi4uICAgICByZXR1cm4gVHJlZShsaXN0W2ldLCB0cmVlKGxpc3RbOmldKSwgdHJlZShsaXN0W2krMTpdKSkKCiAgICA+Pj4gIyBTaG93IGl0IG9mZjogY3JlYXRlIGEgdHJlZS4KICAgID4+PiB0ID0gdHJlZSgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKQoKICAgID4+PiAjIEEgcmVjdXJzaXZlIGdlbmVyYXRvciB0aGF0IGdlbmVyYXRlcyBUcmVlIGxhYmVscyBpbiBpbi1vcmRlci4KICAgID4+PiBkZWYgaW5vcmRlcih0KToKICAgIC4uLiAgICAgaWYgdDoKICAgIC4uLiAgICAgICAgIGZvciB4IGluIGlub3JkZXIodC5sZWZ0KToKICAgIC4uLiAgICAgICAgICAgICB5aWVsZCB4CiAgICAuLi4gICAgICAgICB5aWVsZCB0LmxhYmVsCiAgICAuLi4gICAgICAgICBmb3IgeCBpbiBpbm9yZGVyKHQucmlnaHQpOgogICAgLi4uICAgICAgICAgICAgIHlpZWxkIHgKCiAgICA+Pj4gIyBTaG93IGl0IG9mZjogY3JlYXRlIGEgdHJlZS4KICAgID4+PiB0ID0gdHJlZSgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKQogICAgPj4+ICMgUHJpbnQgdGhlIG5vZGVzIG9mIHRoZSB0cmVlIGluIGluLW9yZGVyLgogICAgPj4+IGZvciB4IGluIHQ6CiAgICAuLi4gICAgIHByaW50IHgsCiAgICBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFoKCiAgICA+Pj4gIyBBIG5vbi1yZWN1cnNpdmUgZ2VuZXJhdG9yLgogICAgPj4+IGRlZiBpbm9yZGVyKG5vZGUpOgogICAgLi4uICAgICBzdGFjayA9IFtdCiAgICAuLi4gICAgIHdoaWxlIG5vZGU6CiAgICAuLi4gICAgICAgICB3aGlsZSBub2RlLmxlZnQ6CiAgICAuLi4gICAgICAgICAgICAgc3RhY2suYXBwZW5kKG5vZGUpCiAgICAuLi4gICAgICAgICAgICAgbm9kZSA9IG5vZGUubGVmdAogICAgLi4uICAgICAgICAgeWllbGQgbm9kZS5sYWJlbAogICAgLi4uICAgICAgICAgd2hpbGUgbm90IG5vZGUucmlnaHQ6CiAgICAuLi4gICAgICAgICAgICAgdHJ5OgogICAgLi4uICAgICAgICAgICAgICAgICBub2RlID0gc3RhY2sucG9wKCkKICAgIC4uLiAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgIC4uLiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAuLi4gICAgICAgICAgICAgeWllbGQgbm9kZS5sYWJlbAogICAgLi4uICAgICAgICAgbm9kZSA9IG5vZGUucmlnaHQKCiAgICA+Pj4gIyBFeGVyY2lzZSB0aGUgbm9uLXJlY3Vyc2l2ZSBnZW5lcmF0b3IuCiAgICA+Pj4gZm9yIHggaW4gdDoKICAgIC4uLiAgICAgcHJpbnQgeCwKICAgIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWgoKc1kSAAAKClRoZSBkaWZmZXJlbmNlIGJldHdlZW4geWllbGRpbmcgTm9uZSBhbmQgcmV0dXJuaW5nIGl0LgoKPj4+IGRlZiBnKCk6Ci4uLiAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6Ci4uLiAgICAgICAgIHlpZWxkIE5vbmUKLi4uICAgICB5aWVsZCBOb25lCi4uLiAgICAgcmV0dXJuCj4+PiBsaXN0KGcoKSkKW05vbmUsIE5vbmUsIE5vbmUsIE5vbmVdCgpFbnN1cmUgdGhhdCBleHBsaWNpdGx5IHJhaXNpbmcgU3RvcEl0ZXJhdGlvbiBhY3RzIGxpa2UgYW55IG90aGVyIGV4Y2VwdGlvbgppbiB0cnkvZXhjZXB0LCBub3QgbGlrZSBhIHJldHVybi4KCj4+PiBkZWYgZygpOgouLi4gICAgIHlpZWxkIDEKLi4uICAgICB0cnk6Ci4uLiAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLi4uICAgICBleGNlcHQ6Ci4uLiAgICAgICAgIHlpZWxkIDIKLi4uICAgICB5aWVsZCAzCj4+PiBsaXN0KGcoKSkKWzEsIDIsIDNdCgpOZXh0IG9uZSB3YXMgcG9zdGVkIHRvIGMubC5weS4KCj4+PiBkZWYgZ2NvbWIoeCwgayk6Ci4uLiAgICAgIkdlbmVyYXRlIGFsbCBjb21iaW5hdGlvbnMgb2YgayBlbGVtZW50cyBmcm9tIGxpc3QgeC4iCi4uLgouLi4gICAgIGlmIGsgPiBsZW4oeCk6Ci4uLiAgICAgICAgIHJldHVybgouLi4gICAgIGlmIGsgPT0gMDoKLi4uICAgICAgICAgeWllbGQgW10KLi4uICAgICBlbHNlOgouLi4gICAgICAgICBmaXJzdCwgcmVzdCA9IHhbMF0sIHhbMTpdCi4uLiAgICAgICAgICMgQSBjb21iaW5hdGlvbiBkb2VzIG9yIGRvZXNuJ3QgY29udGFpbiBmaXJzdC4KLi4uICAgICAgICAgIyBJZiBpdCBkb2VzLCB0aGUgcmVtYWluZGVyIGlzIGEgay0xIGNvbWIgb2YgcmVzdC4KLi4uICAgICAgICAgZm9yIGMgaW4gZ2NvbWIocmVzdCwgay0xKToKLi4uICAgICAgICAgICAgIGMuaW5zZXJ0KDAsIGZpcnN0KQouLi4gICAgICAgICAgICAgeWllbGQgYwouLi4gICAgICAgICAjIElmIGl0IGRvZXNuJ3QgY29udGFpbiBmaXJzdCwgaXQncyBhIGsgY29tYiBvZiByZXN0LgouLi4gICAgICAgICBmb3IgYyBpbiBnY29tYihyZXN0LCBrKToKLi4uICAgICAgICAgICAgIHlpZWxkIGMKCj4+PiBzZXEgPSByYW5nZSgxLCA1KQo+Pj4gZm9yIGsgaW4gcmFuZ2UobGVuKHNlcSkgKyAyKToKLi4uICAgICBwcmludCAiJWQtY29tYnMgb2YgJXM6IiAlIChrLCBzZXEpCi4uLiAgICAgZm9yIGMgaW4gZ2NvbWIoc2VxLCBrKToKLi4uICAgICAgICAgcHJpbnQgIiAgICIsIGMKMC1jb21icyBvZiBbMSwgMiwgMywgNF06CiAgICBbXQoxLWNvbWJzIG9mIFsxLCAyLCAzLCA0XToKICAgIFsxXQogICAgWzJdCiAgICBbM10KICAgIFs0XQoyLWNvbWJzIG9mIFsxLCAyLCAzLCA0XToKICAgIFsxLCAyXQogICAgWzEsIDNdCiAgICBbMSwgNF0KICAgIFsyLCAzXQogICAgWzIsIDRdCiAgICBbMywgNF0KMy1jb21icyBvZiBbMSwgMiwgMywgNF06CiAgICBbMSwgMiwgM10KICAgIFsxLCAyLCA0XQogICAgWzEsIDMsIDRdCiAgICBbMiwgMywgNF0KNC1jb21icyBvZiBbMSwgMiwgMywgNF06CiAgICBbMSwgMiwgMywgNF0KNS1jb21icyBvZiBbMSwgMiwgMywgNF06CgpGcm9tIHRoZSBJdGVyYXRvcnMgbGlzdCwgYWJvdXQgdGhlIHR5cGVzIG9mIHRoZXNlIHRoaW5ncy4KCj4+PiBkZWYgZygpOgouLi4gICAgIHlpZWxkIDEKLi4uCj4+PiB0eXBlKGcpCjx0eXBlICdmdW5jdGlvbic+Cj4+PiBpID0gZygpCj4+PiB0eXBlKGkpCjx0eXBlICdnZW5lcmF0b3InPgo+Pj4gW3MgZm9yIHMgaW4gZGlyKGkpIGlmIG5vdCBzLnN0YXJ0c3dpdGgoJ18nKV0KWydjbG9zZScsICdnaV9jb2RlJywgJ2dpX2ZyYW1lJywgJ2dpX3J1bm5pbmcnLCAnbmV4dCcsICdzZW5kJywgJ3Rocm93J10KPj4+IGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUwo+Pj4gcHJpbnQoaS5uZXh0Ll9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ3gubmV4dCgpIC0+IHRoZSBuZXh0IHZhbHVlLCBvciByYWlzZSBTdG9wSXRlcmF0aW9uJykKeC5uZXh0KCkgLT4gdGhlIG5leHQgdmFsdWUsIG9yIHJhaXNlIFN0b3BJdGVyYXRpb24KPj4+IGl0ZXIoaSkgaXMgaQpUcnVlCj4+PiBpbXBvcnQgdHlwZXMKPj4+IGlzaW5zdGFuY2UoaSwgdHlwZXMuR2VuZXJhdG9yVHlwZSkKVHJ1ZQoKQW5kIG1vcmUsIGFkZGVkIGxhdGVyLgoKPj4+IGkuZ2lfcnVubmluZwowCj4+PiB0eXBlKGkuZ2lfZnJhbWUpCjx0eXBlICdmcmFtZSc+Cj4+PiBpLmdpX3J1bm5pbmcgPSA0MgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClR5cGVFcnJvcjogcmVhZG9ubHkgYXR0cmlidXRlCj4+PiBkZWYgZygpOgouLi4gICAgIHlpZWxkIG1lLmdpX3J1bm5pbmcKPj4+IG1lID0gZygpCj4+PiBtZS5naV9ydW5uaW5nCjAKPj4+IG1lLm5leHQoKQoxCj4+PiBtZS5naV9ydW5uaW5nCjAKCkEgY2xldmVyIHVuaW9uLWZpbmQgaW1wbGVtZW50YXRpb24gZnJvbSBjLmwucHksIGR1ZSB0byBEYXZpZCBFcHBzdGVpbi4KU2VudDogRnJpZGF5LCBKdW5lIDI5LCAyMDAxIDEyOjE2IFBNClRvOiBweXRob24tbGlzdEBweXRob24ub3JnClN1YmplY3Q6IFJlOiBQRVAgMjU1OiBTaW1wbGUgR2VuZXJhdG9ycwoKPj4+IGNsYXNzIGRpc2pvaW50U2V0OgouLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLi4uICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQouLi4gICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKLi4uICAgICAgICAgc2VsZi5nZW5lcmF0b3IgPSBzZWxmLmdlbmVyYXRlKCkKLi4uCi4uLiAgICAgZGVmIGdlbmVyYXRlKHNlbGYpOgouLi4gICAgICAgICB3aGlsZSBub3Qgc2VsZi5wYXJlbnQ6Ci4uLiAgICAgICAgICAgICB5aWVsZCBzZWxmCi4uLiAgICAgICAgIGZvciB4IGluIHNlbGYucGFyZW50LmdlbmVyYXRvcjoKLi4uICAgICAgICAgICAgIHlpZWxkIHgKLi4uCi4uLiAgICAgZGVmIGZpbmQoc2VsZik6Ci4uLiAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRvci5uZXh0KCkKLi4uCi4uLiAgICAgZGVmIHVuaW9uKHNlbGYsIHBhcmVudCk6Ci4uLiAgICAgICAgIGlmIHNlbGYucGFyZW50OgouLi4gICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU29ycnksIEknbSBub3QgYSByb290ISIpCi4uLiAgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50Ci4uLgouLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOgouLi4gICAgICAgICByZXR1cm4gc2VsZi5uYW1lCgo+Pj4gbmFtZXMgPSAiQUJDREVGR0hJSktMTSIKPj4+IHNldHMgPSBbZGlzam9pbnRTZXQobmFtZSkgZm9yIG5hbWUgaW4gbmFtZXNdCj4+PiByb290cyA9IHNldHNbOl0KCj4+PiBpbXBvcnQgcmFuZG9tCj4+PiBnZW4gPSByYW5kb20uV2ljaG1hbm5IaWxsKDQyKQo+Pj4gd2hpbGUgMToKLi4uICAgICBmb3IgcyBpbiBzZXRzOgouLi4gICAgICAgICBwcmludCAiJXMtPiVzIiAlIChzLCBzLmZpbmQoKSksCi4uLiAgICAgcHJpbnQKLi4uICAgICBpZiBsZW4ocm9vdHMpID4gMToKLi4uICAgICAgICAgczEgPSBnZW4uY2hvaWNlKHJvb3RzKQouLi4gICAgICAgICByb290cy5yZW1vdmUoczEpCi4uLiAgICAgICAgIHMyID0gZ2VuLmNob2ljZShyb290cykKLi4uICAgICAgICAgczEudW5pb24oczIpCi4uLiAgICAgICAgIHByaW50ICJtZXJnZWQiLCBzMSwgImludG8iLCBzMgouLi4gICAgIGVsc2U6Ci4uLiAgICAgICAgIGJyZWFrCkEtPkEgQi0+QiBDLT5DIEQtPkQgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5MIE0tPk0KbWVyZ2VkIEQgaW50byBHCkEtPkEgQi0+QiBDLT5DIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5MIE0tPk0KbWVyZ2VkIEMgaW50byBGCkEtPkEgQi0+QiBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5MIE0tPk0KbWVyZ2VkIEwgaW50byBBCkEtPkEgQi0+QiBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIEggaW50byBFCkEtPkEgQi0+QiBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+RSBJLT5JIEotPkogSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIEIgaW50byBFCkEtPkEgQi0+RSBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+RSBJLT5JIEotPkogSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIEogaW50byBHCkEtPkEgQi0+RSBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+RSBJLT5JIEotPkcgSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIEUgaW50byBHCkEtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5JIEotPkcgSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIE0gaW50byBHCkEtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5JIEotPkcgSy0+SyBMLT5BIE0tPkcKbWVyZ2VkIEkgaW50byBLCkEtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5LIEotPkcgSy0+SyBMLT5BIE0tPkcKbWVyZ2VkIEsgaW50byBBCkEtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5BIEotPkcgSy0+QSBMLT5BIE0tPkcKbWVyZ2VkIEYgaW50byBBCkEtPkEgQi0+RyBDLT5BIEQtPkcgRS0+RyBGLT5BIEctPkcgSC0+RyBJLT5BIEotPkcgSy0+QSBMLT5BIE0tPkcKbWVyZ2VkIEEgaW50byBHCkEtPkcgQi0+RyBDLT5HIEQtPkcgRS0+RyBGLT5HIEctPkcgSC0+RyBJLT5HIEotPkcgSy0+RyBMLT5HIE0tPkcKCnOqHgAACgpCdWlsZCB1cCB0byBhIHJlY3Vyc2l2ZSBTaWV2ZSBvZiBFcmF0b3N0aGVuZXMgZ2VuZXJhdG9yLgoKPj4+IGRlZiBmaXJzdG4oZywgbik6Ci4uLiAgICAgcmV0dXJuIFtnLm5leHQoKSBmb3IgaSBpbiByYW5nZShuKV0KCj4+PiBkZWYgaW50c2Zyb20oaSk6Ci4uLiAgICAgd2hpbGUgMToKLi4uICAgICAgICAgeWllbGQgaQouLi4gICAgICAgICBpICs9IDEKCj4+PiBmaXJzdG4oaW50c2Zyb20oNSksIDcpCls1LCA2LCA3LCA4LCA5LCAxMCwgMTFdCgo+Pj4gZGVmIGV4Y2x1ZGVfbXVsdGlwbGVzKG4sIGludHMpOgouLi4gICAgIGZvciBpIGluIGludHM6Ci4uLiAgICAgICAgIGlmIGkgJSBuOgouLi4gICAgICAgICAgICAgeWllbGQgaQoKPj4+IGZpcnN0bihleGNsdWRlX211bHRpcGxlcygzLCBpbnRzZnJvbSgxKSksIDYpClsxLCAyLCA0LCA1LCA3LCA4XQoKPj4+IGRlZiBzaWV2ZShpbnRzKToKLi4uICAgICBwcmltZSA9IGludHMubmV4dCgpCi4uLiAgICAgeWllbGQgcHJpbWUKLi4uICAgICBub3RfZGl2aXNpYmxlX2J5X3ByaW1lID0gZXhjbHVkZV9tdWx0aXBsZXMocHJpbWUsIGludHMpCi4uLiAgICAgZm9yIHAgaW4gc2lldmUobm90X2RpdmlzaWJsZV9ieV9wcmltZSk6Ci4uLiAgICAgICAgIHlpZWxkIHAKCj4+PiBwcmltZXMgPSBzaWV2ZShpbnRzZnJvbSgyKSkKPj4+IGZpcnN0bihwcmltZXMsIDIwKQpbMiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3LCA0MSwgNDMsIDQ3LCA1MywgNTksIDYxLCA2NywgNzFdCgoKQW5vdGhlciBmYW1vdXMgcHJvYmxlbTogIGdlbmVyYXRlIGFsbCBpbnRlZ2VycyBvZiB0aGUgZm9ybQogICAgMioqaSAqIDMqKmogICogNSoqawppbiBpbmNyZWFzaW5nIG9yZGVyLCB3aGVyZSBpLGosayA+PSAwLiAgVHJpY2tpZXIgdGhhbiBpdCBtYXkgbG9vayBhdCBmaXJzdCEKVHJ5IHdyaXRpbmcgaXQgd2l0aG91dCBnZW5lcmF0b3JzLCBhbmQgY29ycmVjdGx5LCBhbmQgd2l0aG91dCBnZW5lcmF0aW5nCjMgaW50ZXJuYWwgcmVzdWx0cyBmb3IgZWFjaCByZXN1bHQgb3V0cHV0LgoKPj4+IGRlZiB0aW1lcyhuLCBnKToKLi4uICAgICBmb3IgaSBpbiBnOgouLi4gICAgICAgICB5aWVsZCBuICogaQo+Pj4gZmlyc3RuKHRpbWVzKDEwLCBpbnRzZnJvbSgxKSksIDEwKQpbMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCwgMTAwXQoKPj4+IGRlZiBtZXJnZShnLCBoKToKLi4uICAgICBuZyA9IGcubmV4dCgpCi4uLiAgICAgbmggPSBoLm5leHQoKQouLi4gICAgIHdoaWxlIDE6Ci4uLiAgICAgICAgIGlmIG5nIDwgbmg6Ci4uLiAgICAgICAgICAgICB5aWVsZCBuZwouLi4gICAgICAgICAgICAgbmcgPSBnLm5leHQoKQouLi4gICAgICAgICBlbGlmIG5nID4gbmg6Ci4uLiAgICAgICAgICAgICB5aWVsZCBuaAouLi4gICAgICAgICAgICAgbmggPSBoLm5leHQoKQouLi4gICAgICAgICBlbHNlOgouLi4gICAgICAgICAgICAgeWllbGQgbmcKLi4uICAgICAgICAgICAgIG5nID0gZy5uZXh0KCkKLi4uICAgICAgICAgICAgIG5oID0gaC5uZXh0KCkKClRoZSBmb2xsb3dpbmcgd29ya3MsIGJ1dCBpcyBkb2luZyBhIHdoYWxlIG9mIGEgbG90IG9mIHJlZHVuZGFudCB3b3JrIC0tCml0J3Mgbm90IGNsZWFyIGhvdyB0byBnZXQgdGhlIGludGVybmFsIHVzZXMgb2YgbTIzNSB0byBzaGFyZSBhIHNpbmdsZQpnZW5lcmF0b3IuICBOb3RlIHRoYXQgbWVfdGltZXMyIChldGMpIGVhY2ggbmVlZCB0byBzZWUgZXZlcnkgZWxlbWVudCBpbiB0aGUKcmVzdWx0IHNlcXVlbmNlLiAgU28gdGhpcyBpcyBhbiBleGFtcGxlIHdoZXJlIGxhenkgbGlzdHMgYXJlIG1vcmUgbmF0dXJhbAooeW91IGNhbiBsb29rIGF0IHRoZSBoZWFkIG9mIGEgbGF6eSBsaXN0IGFueSBudW1iZXIgb2YgdGltZXMpLgoKPj4+IGRlZiBtMjM1KCk6Ci4uLiAgICAgeWllbGQgMQouLi4gICAgIG1lX3RpbWVzMiA9IHRpbWVzKDIsIG0yMzUoKSkKLi4uICAgICBtZV90aW1lczMgPSB0aW1lcygzLCBtMjM1KCkpCi4uLiAgICAgbWVfdGltZXM1ID0gdGltZXMoNSwgbTIzNSgpKQouLi4gICAgIGZvciBpIGluIG1lcmdlKG1lcmdlKG1lX3RpbWVzMiwKLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBtZV90aW1lczMpLAouLi4gICAgICAgICAgICAgICAgICAgIG1lX3RpbWVzNSk6Ci4uLiAgICAgICAgIHlpZWxkIGkKCkRvbid0IHByaW50ICJ0b28gbWFueSIgb2YgdGhlc2UgLS0gdGhlIGltcGxlbWVudGF0aW9uIGFib3ZlIGlzIGV4dHJlbWVseQppbmVmZmljaWVudDogIGVhY2ggY2FsbCBvZiBtMjM1KCkgbGVhZHMgdG8gMyByZWN1cnNpdmUgY2FsbHMsIGFuZCBpbgp0dXJuIGVhY2ggb2YgdGhvc2UgMyBtb3JlLCBhbmQgc28gb24sIGFuZCBzbyBvbiwgdW50aWwgd2UndmUgZGVzY2VuZGVkCmVub3VnaCBsZXZlbHMgdG8gc2F0aXNmeSB0aGUgcHJpbnQgc3RtdHMuICBWZXJ5IG9kZDogIHdoZW4gSSBwcmludGVkIDUKbGluZXMgb2YgcmVzdWx0cyBiZWxvdywgdGhpcyBtYW5hZ2VkIHRvIHNjcmV3IHVwIFdpbjk4J3MgbWFsbG9jIGluICJ0aGUKdXN1YWwiIHdheSwgaS5lLiB0aGUgaGVhcCBncmV3IG92ZXIgNE1iIHNvIFdpbjk4IHN0YXJ0ZWQgZnJhZ21lbnRpbmcKYWRkcmVzcyBzcGFjZSwgYW5kIGl0ICpsb29rZWQqIGxpa2UgYSB2ZXJ5IHNsb3cgbGVhay4KCj4+PiByZXN1bHQgPSBtMjM1KCkKPj4+IGZvciBpIGluIHJhbmdlKDMpOgouLi4gICAgIHByaW50IGZpcnN0bihyZXN1bHQsIDE1KQpbMSwgMiwgMywgNCwgNSwgNiwgOCwgOSwgMTAsIDEyLCAxNSwgMTYsIDE4LCAyMCwgMjRdClsyNSwgMjcsIDMwLCAzMiwgMzYsIDQwLCA0NSwgNDgsIDUwLCA1NCwgNjAsIDY0LCA3MiwgNzUsIDgwXQpbODEsIDkwLCA5NiwgMTAwLCAxMDgsIDEyMCwgMTI1LCAxMjgsIDEzNSwgMTQ0LCAxNTAsIDE2MCwgMTYyLCAxODAsIDE5Ml0KCkhlaC4gIEhlcmUncyBvbmUgd2F5IHRvIGdldCBhIHNoYXJlZCBsaXN0LCBjb21wbGV0ZSB3aXRoIGFuIGV4Y3J1Y2lhdGluZwpuYW1lc3BhY2UgcmVuYW1pbmcgdHJpY2suICBUaGUgKnByZXR0eSogcGFydCBpcyB0aGF0IHRoZSB0aW1lcygpIGFuZCBtZXJnZSgpCmZ1bmN0aW9ucyBjYW4gYmUgcmV1c2VkIGFzLWlzLCBiZWNhdXNlIHRoZXkgb25seSBhc3N1bWUgdGhlaXIgc3RyZWFtCmFyZ3VtZW50cyBhcmUgaXRlcmFibGUgLS0gYSBMYXp5TGlzdCBpcyB0aGUgc2FtZSBhcyBhIGdlbmVyYXRvciB0byB0aW1lcygpLgoKPj4+IGNsYXNzIExhenlMaXN0OgouLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnKToKLi4uICAgICAgICAgc2VsZi5zb2ZhciA9IFtdCi4uLiAgICAgICAgIHNlbGYuZmV0Y2ggPSBnLm5leHQKLi4uCi4uLiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgouLi4gICAgICAgICBzb2ZhciwgZmV0Y2ggPSBzZWxmLnNvZmFyLCBzZWxmLmZldGNoCi4uLiAgICAgICAgIHdoaWxlIGkgPj0gbGVuKHNvZmFyKToKLi4uICAgICAgICAgICAgIHNvZmFyLmFwcGVuZChmZXRjaCgpKQouLi4gICAgICAgICByZXR1cm4gc29mYXJbaV0KCj4+PiBkZWYgbTIzNSgpOgouLi4gICAgIHlpZWxkIDEKLi4uICAgICAjIEdhY2s6ICBtMjM1IGJlbG93IGFjdHVhbGx5IHJlZmVycyB0byBhIExhenlMaXN0LgouLi4gICAgIG1lX3RpbWVzMiA9IHRpbWVzKDIsIG0yMzUpCi4uLiAgICAgbWVfdGltZXMzID0gdGltZXMoMywgbTIzNSkKLi4uICAgICBtZV90aW1lczUgPSB0aW1lcyg1LCBtMjM1KQouLi4gICAgIGZvciBpIGluIG1lcmdlKG1lcmdlKG1lX3RpbWVzMiwKLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBtZV90aW1lczMpLAouLi4gICAgICAgICAgICAgICAgICAgIG1lX3RpbWVzNSk6Ci4uLiAgICAgICAgIHlpZWxkIGkKClByaW50IGFzIG1hbnkgb2YgdGhlc2UgYXMgeW91IGxpa2UgLS0gKnRoaXMqIGltcGxlbWVudGF0aW9uIGlzIG1lbW9yeS0KZWZmaWNpZW50LgoKPj4+IG0yMzUgPSBMYXp5TGlzdChtMjM1KCkpCj4+PiBmb3IgaSBpbiByYW5nZSg1KToKLi4uICAgICBwcmludCBbbTIzNVtqXSBmb3IgaiBpbiByYW5nZSgxNSppLCAxNSooaSsxKSldClsxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDE1LCAxNiwgMTgsIDIwLCAyNF0KWzI1LCAyNywgMzAsIDMyLCAzNiwgNDAsIDQ1LCA0OCwgNTAsIDU0LCA2MCwgNjQsIDcyLCA3NSwgODBdCls4MSwgOTAsIDk2LCAxMDAsIDEwOCwgMTIwLCAxMjUsIDEyOCwgMTM1LCAxNDQsIDE1MCwgMTYwLCAxNjIsIDE4MCwgMTkyXQpbMjAwLCAyMTYsIDIyNSwgMjQwLCAyNDMsIDI1MCwgMjU2LCAyNzAsIDI4OCwgMzAwLCAzMjAsIDMyNCwgMzYwLCAzNzUsIDM4NF0KWzQwMCwgNDA1LCA0MzIsIDQ1MCwgNDgwLCA0ODYsIDUwMCwgNTEyLCA1NDAsIDU3NiwgNjAwLCA2MjUsIDY0MCwgNjQ4LCA2NzVdCgpZZSBvbGRlIEZpYm9uYWNjaSBnZW5lcmF0b3IsIExhenlMaXN0IHN0eWxlLgoKPj4+IGRlZiBmaWJnZW4oYSwgYik6Ci4uLgouLi4gICAgIGRlZiBzdW0oZywgaCk6Ci4uLiAgICAgICAgIHdoaWxlIDE6Ci4uLiAgICAgICAgICAgICB5aWVsZCBnLm5leHQoKSArIGgubmV4dCgpCi4uLgouLi4gICAgIGRlZiB0YWlsKGcpOgouLi4gICAgICAgICBnLm5leHQoKSAgICAjIHRocm93IGZpcnN0IGF3YXkKLi4uICAgICAgICAgZm9yIHggaW4gZzoKLi4uICAgICAgICAgICAgIHlpZWxkIHgKLi4uCi4uLiAgICAgeWllbGQgYQouLi4gICAgIHlpZWxkIGIKLi4uICAgICBmb3IgcyBpbiBzdW0oaXRlcihmaWIpLAouLi4gICAgICAgICAgICAgICAgICB0YWlsKGl0ZXIoZmliKSkpOgouLi4gICAgICAgICB5aWVsZCBzCgo+Pj4gZmliID0gTGF6eUxpc3QoZmliZ2VuKDEsIDIpKQo+Pj4gZmlyc3RuKGl0ZXIoZmliKSwgMTcpClsxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODksIDE0NCwgMjMzLCAzNzcsIDYxMCwgOTg3LCAxNTk3LCAyNTg0XQoKClJ1bm5pbmcgYWZ0ZXIgeW91ciB0YWlsIHdpdGggaXRlcnRvb2xzLnRlZSAobmV3IGluIHZlcnNpb24gMi40KQoKVGhlIGFsZ29yaXRobXMgIm0yMzUiIChIYW1taW5nKSBhbmQgRmlib25hY2NpIHByZXNlbnRlZCBhYm92ZSBhcmUgYm90aApleGFtcGxlcyBvZiBhIHdob2xlIGZhbWlseSBvZiBGUCAoZnVuY3Rpb25hbCBwcm9ncmFtbWluZykgYWxnb3JpdGhtcwp3aGVyZSBhIGZ1bmN0aW9uIHByb2R1Y2VzIGFuZCByZXR1cm5zIGEgbGlzdCB3aGlsZSB0aGUgcHJvZHVjdGlvbiBhbGdvcml0aG0Kc3VwcG9zZSB0aGUgbGlzdCBhcyBhbHJlYWR5IHByb2R1Y2VkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgpGb3IgdGhlc2UgYWxnb3JpdGhtcyB0byB3b3JrLCB0aGV5IG11c3Q6CgotIHByb2R1Y2UgYXQgbGVhc3QgYSBmaXJzdCBlbGVtZW50IHdpdGhvdXQgcHJlc3VwcG9zaW5nIHRoZSBleGlzdGVuY2Ugb2YKICB0aGUgcmVzdCBvZiB0aGUgbGlzdAotIHByb2R1Y2UgdGhlaXIgZWxlbWVudHMgaW4gYSBsYXp5IG1hbm5lcgoKVG8gd29yayBlZmZpY2llbnRseSwgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBtdXN0IG5vdCBiZSByZWNvbXB1dGVkIG92ZXIKYW5kIG92ZXIgYWdhaW4uIFRoaXMgaXMgZW5zdXJlZCBpbiBtb3N0IEZQIGxhbmd1YWdlcyBhcyBhIGJ1aWx0LWluIGZlYXR1cmUuCkluIHB5dGhvbiwgd2UgaGF2ZSB0byBleHBsaWNpdGx5IG1haW50YWluIGEgbGlzdCBvZiBhbHJlYWR5IGNvbXB1dGVkIHJlc3VsdHMKYW5kIGFiYW5kb24gZ2VudWluZSByZWN1cnNpdml0eS4KClRoaXMgaXMgd2hhdCBoYWQgYmVlbiBhdHRlbXB0ZWQgYWJvdmUgd2l0aCB0aGUgTGF6eUxpc3QgY2xhc3MuIE9uZSBwcm9ibGVtCndpdGggdGhhdCBjbGFzcyBpcyB0aGF0IGl0IGtlZXBzIGEgbGlzdCBvZiBhbGwgb2YgdGhlIGdlbmVyYXRlZCByZXN1bHRzIGFuZAp0aGVyZWZvcmUgY29udGludWFsbHkgZ3Jvd3MuIFRoaXMgcGFydGlhbGx5IGRlZmVhdHMgdGhlIGdvYWwgb2YgdGhlIGdlbmVyYXRvcgpjb25jZXB0LCB2aXouIHByb2R1Y2UgdGhlIHJlc3VsdHMgb25seSBhcyBuZWVkZWQgaW5zdGVhZCBvZiBwcm9kdWNpbmcgdGhlbQphbGwgYW5kIHRoZXJlYnkgd2FzdGluZyBtZW1vcnkuCgpUaGFua3MgdG8gaXRlcnRvb2xzLnRlZSwgaXQgaXMgbm93IGNsZWFyICJob3cgdG8gZ2V0IHRoZSBpbnRlcm5hbCB1c2VzIG9mCm0yMzUgdG8gc2hhcmUgYSBzaW5nbGUgZ2VuZXJhdG9yIi4KCj4+PiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgdGVlCj4+PiBkZWYgbTIzNSgpOgouLi4gICAgIGRlZiBfbTIzNSgpOgouLi4gICAgICAgICB5aWVsZCAxCi4uLiAgICAgICAgIGZvciBuIGluIG1lcmdlKHRpbWVzKDIsIG0yKSwKLi4uICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UodGltZXMoMywgbTMpLAouLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyg1LCBtNSkpKToKLi4uICAgICAgICAgICAgIHlpZWxkIG4KLi4uICAgICBtMSA9IF9tMjM1KCkKLi4uICAgICBtMiwgbTMsIG01LCBtUmVzID0gdGVlKG0xLCA0KQouLi4gICAgIHJldHVybiBtUmVzCgo+Pj4gaXQgPSBtMjM1KCkKPj4+IGZvciBpIGluIHJhbmdlKDUpOgouLi4gICAgIHByaW50IGZpcnN0bihpdCwgMTUpClsxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDE1LCAxNiwgMTgsIDIwLCAyNF0KWzI1LCAyNywgMzAsIDMyLCAzNiwgNDAsIDQ1LCA0OCwgNTAsIDU0LCA2MCwgNjQsIDcyLCA3NSwgODBdCls4MSwgOTAsIDk2LCAxMDAsIDEwOCwgMTIwLCAxMjUsIDEyOCwgMTM1LCAxNDQsIDE1MCwgMTYwLCAxNjIsIDE4MCwgMTkyXQpbMjAwLCAyMTYsIDIyNSwgMjQwLCAyNDMsIDI1MCwgMjU2LCAyNzAsIDI4OCwgMzAwLCAzMjAsIDMyNCwgMzYwLCAzNzUsIDM4NF0KWzQwMCwgNDA1LCA0MzIsIDQ1MCwgNDgwLCA0ODYsIDUwMCwgNTEyLCA1NDAsIDU3NiwgNjAwLCA2MjUsIDY0MCwgNjQ4LCA2NzVdCgpUaGUgInRlZSIgZnVuY3Rpb24gZG9lcyBqdXN0IHdoYXQgd2Ugd2FudC4gSXQgaW50ZXJuYWxseSBrZWVwcyBhIGdlbmVyYXRlZApyZXN1bHQgZm9yIGFzIGxvbmcgYXMgaXQgaGFzIG5vdCBiZWVuICJjb25zdW1lZCIgZnJvbSBhbGwgb2YgdGhlIGR1cGxpY2F0ZWQKaXRlcmF0b3JzLCB3aGVyZXVwb24gaXQgaXMgZGVsZXRlZC4gWW91IGNhbiB0aGVyZWZvcmUgcHJpbnQgdGhlIGhhbW1pbmcKc2VxdWVuY2UgZHVyaW5nIGhvdXJzIHdpdGhvdXQgaW5jcmVhc2luZyBtZW1vcnkgdXNhZ2UsIG9yIHZlcnkgbGl0dGxlLgoKVGhlIGJlYXV0eSBvZiBpdCBpcyB0aGF0IHJlY3Vyc2l2ZSBydW5uaW5nLWFmdGVyLXRoZWlyLXRhaWwgRlAgYWxnb3JpdGhtcwphcmUgcXVpdGUgc3RyYWlnaHRmb3J3YXJkbHkgZXhwcmVzc2VkIHdpdGggdGhpcyBQeXRob24gaWRpb20uCgpZZSBvbGRlIEZpYm9uYWNjaSBnZW5lcmF0b3IsIHRlZSBzdHlsZS4KCj4+PiBkZWYgZmliKCk6Ci4uLgouLi4gICAgIGRlZiBfaXN1bShnLCBoKToKLi4uICAgICAgICAgd2hpbGUgMToKLi4uICAgICAgICAgICAgIHlpZWxkIGcubmV4dCgpICsgaC5uZXh0KCkKLi4uCi4uLiAgICAgZGVmIF9maWIoKToKLi4uICAgICAgICAgeWllbGQgMQouLi4gICAgICAgICB5aWVsZCAyCi4uLiAgICAgICAgIGZpYlRhaWwubmV4dCgpICMgdGhyb3cgZmlyc3QgYXdheQouLi4gICAgICAgICBmb3IgcmVzIGluIF9pc3VtKGZpYkhlYWQsIGZpYlRhaWwpOgouLi4gICAgICAgICAgICAgeWllbGQgcmVzCi4uLgouLi4gICAgIHJlYWxmaWIgPSBfZmliKCkKLi4uICAgICBmaWJIZWFkLCBmaWJUYWlsLCBmaWJSZXMgPSB0ZWUocmVhbGZpYiwgMykKLi4uICAgICByZXR1cm4gZmliUmVzCgo+Pj4gZmlyc3RuKGZpYigpLCAxNykKWzEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwLCA5ODcsIDE1OTcsIDI1ODRdCgpzmw8AAAoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgcmV0dXJuIDIyCi4uLiAgICAgeWllbGQgMQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4KU3ludGF4RXJyb3I6ICdyZXR1cm4nIHdpdGggYXJndW1lbnQgaW5zaWRlIGdlbmVyYXRvciAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uc3ludGF4WzBdPiwgbGluZSAzKQoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgeWllbGQgMQouLi4gICAgIHJldHVybiAyMgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4KU3ludGF4RXJyb3I6ICdyZXR1cm4nIHdpdGggYXJndW1lbnQgaW5zaWRlIGdlbmVyYXRvciAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uc3ludGF4WzFdPiwgbGluZSAzKQoKInJldHVybiBOb25lIiBpcyBub3QgdGhlIHNhbWUgYXMgInJldHVybiIgaW4gYSBnZW5lcmF0b3I6Cgo+Pj4gZGVmIGYoKToKLi4uICAgICB5aWVsZCAxCi4uLiAgICAgcmV0dXJuIE5vbmUKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uClN5bnRheEVycm9yOiAncmV0dXJuJyB3aXRoIGFyZ3VtZW50IGluc2lkZSBnZW5lcmF0b3IgKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLnN5bnRheFsyXT4sIGxpbmUgMykKClRoZXNlIGFyZSBmaW5lOgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgeWllbGQgMQouLi4gICAgIHJldHVybgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OgouLi4gICAgICAgICB5aWVsZCAxCi4uLiAgICAgZmluYWxseToKLi4uICAgICAgICAgcGFzcwoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OgouLi4gICAgICAgICB0cnk6Ci4uLiAgICAgICAgICAgICAxLy8wCi4uLiAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLi4uICAgICAgICAgICAgIHlpZWxkIDY2NgouLi4gICAgICAgICBleGNlcHQ6Ci4uLiAgICAgICAgICAgICBwYXNzCi4uLiAgICAgZmluYWxseToKLi4uICAgICAgICAgcGFzcwoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OgouLi4gICAgICAgICB0cnk6Ci4uLiAgICAgICAgICAgICB5aWVsZCAxMgouLi4gICAgICAgICAgICAgMS8vMAouLi4gICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci4uLiAgICAgICAgICAgICB5aWVsZCA2NjYKLi4uICAgICAgICAgZXhjZXB0OgouLi4gICAgICAgICAgICAgdHJ5OgouLi4gICAgICAgICAgICAgICAgIHggPSAxMgouLi4gICAgICAgICAgICAgZmluYWxseToKLi4uICAgICAgICAgICAgICAgICB5aWVsZCAxMgouLi4gICAgIGV4Y2VwdDoKLi4uICAgICAgICAgcmV0dXJuCj4+PiBsaXN0KGYoKSkKWzEyLCA2NjZdCgo+Pj4gZGVmIGYoKToKLi4uICAgIHlpZWxkCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+CgoKPj4+IGRlZiBmKCk6Ci4uLiAgICBpZiAwOgouLi4gICAgICAgIHlpZWxkCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+CgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgaWYgMDoKLi4uICAgICAgICAgeWllbGQgMQo+Pj4gdHlwZShmKCkpCjx0eXBlICdnZW5lcmF0b3InPgoKPj4+IGRlZiBmKCk6Ci4uLiAgICBpZiAiIjoKLi4uICAgICAgICB5aWVsZCBOb25lCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+Cgo+Pj4gZGVmIGYoKToKLi4uICAgICByZXR1cm4KLi4uICAgICB0cnk6Ci4uLiAgICAgICAgIGlmIHg9PTQ6Ci4uLiAgICAgICAgICAgICBwYXNzCi4uLiAgICAgICAgIGVsaWYgMDoKLi4uICAgICAgICAgICAgIHRyeToKLi4uICAgICAgICAgICAgICAgICAxLy8wCi4uLiAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6Ci4uLiAgICAgICAgICAgICAgICAgcGFzcwouLi4gICAgICAgICAgICAgZWxzZToKLi4uICAgICAgICAgICAgICAgICBpZiAwOgouLi4gICAgICAgICAgICAgICAgICAgICB3aGlsZSAxMjoKLi4uICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gMQouLi4gICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgMiAjIGRvbid0IGJsaW5rCi4uLiAgICAgICAgICAgICAgICAgICAgICAgICBmKGEsIGIsIGMsIGQsIGUpCi4uLiAgICAgICAgIGVsc2U6Ci4uLiAgICAgICAgICAgICBwYXNzCi4uLiAgICAgZXhjZXB0OgouLi4gICAgICAgICB4ID0gMQouLi4gICAgIHJldHVybgo+Pj4gdHlwZShmKCkpCjx0eXBlICdnZW5lcmF0b3InPgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgaWYgMDoKLi4uICAgICAgICAgZGVmIGcoKToKLi4uICAgICAgICAgICAgIHlpZWxkIDEKLi4uCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ05vbmVUeXBlJz4KCj4+PiBkZWYgZigpOgouLi4gICAgIGlmIDA6Ci4uLiAgICAgICAgIGNsYXNzIEM6Ci4uLiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci4uLiAgICAgICAgICAgICAgICAgeWllbGQgMQouLi4gICAgICAgICAgICAgZGVmIGYoc2VsZik6Ci4uLiAgICAgICAgICAgICAgICAgeWllbGQgMgo+Pj4gdHlwZShmKCkpCjx0eXBlICdOb25lVHlwZSc+Cgo+Pj4gZGVmIGYoKToKLi4uICAgICBpZiAwOgouLi4gICAgICAgICByZXR1cm4KLi4uICAgICBpZiAwOgouLi4gICAgICAgICB5aWVsZCAyCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+CgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgaWYgMDoKLi4uICAgICAgICAgbGFtYmRhIHg6ICB4ICAgICAgICAjIHNob3VsZG4ndCB0cmlnZ2VyIGhlcmUKLi4uICAgICAgICAgcmV0dXJuICAgICAgICAgICAgICAjIG9yIGhlcmUKLi4uICAgICAgICAgZGVmIGYoaSk6Ci4uLiAgICAgICAgICAgICByZXR1cm4gMippICAgICAgIyBvciBoZXJlCi4uLiAgICAgICAgIGlmIDA6Ci4uLiAgICAgICAgICAgICByZXR1cm4gMyAgICAgICAgIyBidXQgKnRoaXMqIHN1Y2tzIChsaW5lIDgpCi4uLiAgICAgaWYgMDoKLi4uICAgICAgICAgeWllbGQgMiAgICAgICAgICAgICAjIGJlY2F1c2UgaXQncyBhIGdlbmVyYXRvciAobGluZSAxMCkKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgpTeW50YXhFcnJvcjogJ3JldHVybicgd2l0aCBhcmd1bWVudCBpbnNpZGUgZ2VuZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5zeW50YXhbMjRdPiwgbGluZSAxMCkKClRoaXMgb25lIGNhdXNlZCBhIGNyYXNoIChzZWUgU0YgYnVnIDU2NzUzOCk6Cgo+Pj4gZGVmIGYoKToKLi4uICAgICBmb3IgaSBpbiByYW5nZSgzKToKLi4uICAgICAgICAgdHJ5OgouLi4gICAgICAgICAgICAgY29udGludWUKLi4uICAgICAgICAgZmluYWxseToKLi4uICAgICAgICAgICAgIHlpZWxkIGkKLi4uCj4+PiBnID0gZigpCj4+PiBwcmludCBnLm5leHQoKQowCj4+PiBwcmludCBnLm5leHQoKQoxCj4+PiBwcmludCBnLm5leHQoKQoyCj4+PiBwcmludCBnLm5leHQoKQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6ClN0b3BJdGVyYXRpb24KCgpUZXN0IHRoZSBnaV9jb2RlIGF0dHJpYnV0ZQoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgeWllbGQgNQouLi4KPj4+IGcgPSBmKCkKPj4+IGcuZ2lfY29kZSBpcyBmLmZ1bmNfY29kZQpUcnVlCj4+PiBnLm5leHQoKQo1Cj4+PiBnLm5l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ICAgIHByaW50IG4sIGxlbihhbGwpLCBhbGxbMF0gPT0gWzBdICogbiwgYWxsWy0xXSA9PSBbMV0gKiBuCjAgMSBUcnVlIFRydWUKMSAyIFRydWUgVHJ1ZQoyIDQgVHJ1ZSBUcnVlCjMgOCBUcnVlIFRydWUKNCAxNiBUcnVlIFRydWUKNSAzMiBUcnVlIFRydWUKNiA2NCBUcnVlIFRydWUKNyAxMjggVHJ1ZSBUcnVlCjggMjU2IFRydWUgVHJ1ZQo5IDUxMiBUcnVlIFRydWUKCkFuZCBydW4gYW4gOC1xdWVlbnMgc29sdmVyLgoKPj4+IHEgPSBRdWVlbnMoOCkKPj4+IExJTUlUID0gMgo+Pj4gY291bnQgPSAwCj4+PiBmb3Igcm93MmNvbCBpbiBxLnNvbHZlKCk6Ci4uLiAgICAgY291bnQgKz0gMQouLi4gICAgIGlmIGNvdW50IDw9IExJTUlUOgouLi4gICAgICAgICBwcmludCAiU29sdXRpb24iLCBjb3VudAouLi4gICAgICAgICBxLnByaW50c29sdXRpb24ocm93MmNvbCkKU29sdXRpb24gMQorLSstKy0rLSstKy0rLSstKwp8UXwgfCB8IHwgfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8IHxRfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8IHwgfCB8IHxRfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8IHwgfFF8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfFF8IHwgfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8IHwgfCB8UXwgfAorLSstKy0rLSstKy0rLSstKwp8IHxRfCB8IHwgfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8UXwgfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwpTb2x1dGlvbiAyCistKy0rLSstKy0rLSstKy0rCnxRfCB8IHwgfCB8IHwgfCB8CistKy0rLSstKy0rLSstKy0rCnwgfCB8IHwgfCB8UXwgfCB8CistKy0rLSstKy0rLSstKy0rCnwgfCB8IHwgfCB8IHwgfFF8CistKy0rLSstKy0rLSstKy0rCnwgfCB8UXwgfCB8IHwgfCB8CistKy0rLSstKy0rLSstKy0rCnwgfCB8IHwgfCB8IHxRfCB8CistKy0rLSstKy0rLSstKy0rCnwgfCB8IHxRfCB8IHwgfCB8CistKy0rLSstKy0rLSstKy0rCnwgfFF8IHwgfCB8IHwgfCB8CistKy0rLSstKy0rLSstKy0rCnwgfCB8IHwgfFF8IHwgfCB8CistKy0rLSstKy0rLSstKy0rCgo+Pj4gcHJpbnQgY291bnQsICJzb2x1dGlvbnMgaW4gYWxsLiIKOTIgc29sdXRpb25zIGluIGFsbC4KCkFuZCBydW4gYSBLbmlnaHQncyBUb3VyIG9uIGEgMTB4MTAgYm9hcmQuICBOb3RlIHRoYXQgdGhlcmUgYXJlIGFib3V0CjIwLDAwMCBzb2x1dGlvbnMgZXZlbiBvbiBhIDZ4NiBib2FyZCwgc28gZG9uJ3QgZGFyZSBydW4gdGhpcyB0byBleGhhdXN0aW9uLgoKPj4+IGsgPSBLbmlnaHRzKDEwLCAxMCkKPj4+IExJTUlUID0gMgo+Pj4gY291bnQgPSAwCj4+PiBmb3IgeCBpbiBrLnNvbHZlKCk6Ci4uLiAgICAgY291bnQgKz0gMQouLi4gICAgIGlmIGNvdW50IDw9IExJTUlUOgouLi4gICAgICAgICBwcmludCAiU29sdXRpb24iLCBjb3VudAouLi4gICAgICAgICBrLnByaW50c29sdXRpb24oeCkKLi4uICAgICBlbHNlOgouLi4gICAgICAgICBicmVhawpTb2x1dGlvbiAxCistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgIDF8IDU4fCAyN3wgMzR8ICAzfCA0MHwgMjl8IDEwfCAgNXwgIDh8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgMjZ8IDM1fCAgMnwgNTd8IDI4fCAzM3wgIDR8ICA3fCAzMHwgMTF8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgNTl8MTAwfCA3M3wgMzZ8IDQxfCA1NnwgMzl8IDMyfCAgOXwgIDZ8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgNzR8IDI1fCA2MHwgNTV8IDcyfCAzN3wgNDJ8IDQ5fCAxMnwgMzF8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgNjF8IDg2fCA5OXwgNzZ8IDYzfCA1MnwgNDd8IDM4fCA0M3wgNTB8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgMjR8IDc1fCA2MnwgODV8IDU0fCA3MXwgNjR8IDUxfCA0OHwgMTN8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgODd8IDk4fCA5MXwgODB8IDc3fCA4NHwgNTN8IDQ2fCA2NXwgNDR8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgOTB8IDIzfCA4OHwgOTV8IDcwfCA3OXwgNjh8IDgzfCAxNHwgMTd8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgOTd8IDkyfCAyMXwgNzh8IDgxfCA5NHwgMTl8IDE2fCA0NXwgNjZ8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgMjJ8IDg5fCA5NnwgOTN8IDIwfCA2OXwgODJ8IDY3fCAxOHwgMTV8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rClNvbHV0aW9uIDIKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCAgMXwgNTh8IDI3fCAzNHwgIDN8IDQwfCAyOXwgMTB8ICA1fCAgOHwKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCAyNnwgMzV8ICAyfCA1N3wgMjh8IDMzfCAgNHwgIDd8IDMwfCAxMXwKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCA1OXwxMDB8IDczfCAzNnwgNDF8IDU2fCAzOXwgMzJ8ICA5fCAgNnwKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCA3NHwgMjV8IDYwfCA1NXwgNzJ8IDM3fCA0MnwgNDl8IDEyfCAzMXwKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCA2MXwgODZ8IDk5fCA3NnwgNjN8IDUyfCA0N3wgMzh8IDQzfCA1MHwKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCAyNHwgNzV8IDYyfCA4NXwgNTR8IDcxfCA2NHwgNTF8IDQ4fCAxM3wKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCA4N3wgOTh8IDg5fCA4MHwgNzd8IDg0fCA1M3wgNDZ8IDY1fCA0NHwKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCA5MHwgMjN8IDkyfCA5NXwgNzB8IDc5fCA2OHwgODN8IDE0fCAxN3wKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCA5N3wgODh8IDIxfCA3OHwgODF8IDk0fCAxOXwgMTZ8IDQ1fCA2NnwKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKfCAyMnwgOTF8IDk2fCA5M3wgMjB8IDY5fCA4MnwgNjd8IDE4fCAxNXwKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKc00BAABHZW5lcmF0b3JzIGFyZSB3ZWFrbHkgcmVmZXJlbmNhYmxlOgoKPj4+IGltcG9ydCB3ZWFrcmVmCj4+PiBkZWYgZ2VuKCk6Ci4uLiAgICAgeWllbGQgJ2ZvbyEnCi4uLgo+Pj4gd3IgPSB3ZWFrcmVmLnJlZihnZW4pCj4+PiB3cigpIGlzIGdlbgpUcnVlCj4+PiBwID0gd2Vha3JlZi5wcm94eShnZW4pCgpHZW5lcmF0b3ItaXRlcmF0b3JzIGFyZSB3ZWFrbHkgcmVmZXJlbmNhYmxlIGFzIHdlbGw6Cgo+Pj4gZ2kgPSBnZW4oKQo+Pj4gd3IgPSB3ZWFrcmVmLnJlZihnaSkKPj4+IHdyKCkgaXMgZ2kKVHJ1ZQo+Pj4gcCA9IHdlYWtyZWYucHJveHkoZ2kpCj4+PiBsaXN0KHApClsnZm9vISddCgpzVhgAAFNlbmRpbmcgYSB2YWx1ZSBpbnRvIGEgc3RhcnRlZCBnZW5lcmF0b3I6Cgo+Pj4gZGVmIGYoKToKLi4uICAgICBwcmludCAoeWllbGQgMSkKLi4uICAgICB5aWVsZCAyCj4+PiBnID0gZigpCj4+PiBnLm5leHQoKQoxCj4+PiBnLnNlbmQoNDIpCjQyCjIKClNlbmRpbmcgYSB2YWx1ZSBpbnRvIGEgbmV3IGdlbmVyYXRvciBwcm9kdWNlcyBhIFR5cGVFcnJvcjoKCj4+PiBmKCkuc2VuZCgiZm9vIikKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgouLi4KVHlwZUVycm9yOiBjYW4ndCBzZW5kIG5vbi1Ob25lIHZhbHVlIHRvIGEganVzdC1zdGFydGVkIGdlbmVyYXRvcgoKCllpZWxkIGJ5IGl0c2VsZiB5aWVsZHMgTm9uZToKCj4+PiBkZWYgZigpOiB5aWVsZAo+Pj4gbGlzdChmKCkpCltOb25lXQoKCgpBbiBvYnNjZW5lIGFidXNlIG9mIGEgeWllbGQgZXhwcmVzc2lvbiB3aXRoaW4gYSBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKCj4+PiBsaXN0KCh5aWVsZCAyMSkgZm9yIGkgaW4gcmFuZ2UoNCkpClsyMSwgTm9uZSwgMjEsIE5vbmUsIDIxLCBOb25lLCAyMSwgTm9uZV0KCkFuZCBhIG1vcmUgc2FuZSwgYnV0IHN0aWxsIHdlaXJkIHVzYWdlOgoKPj4+IGRlZiBmKCk6IGxpc3QoaSBmb3IgaSBpbiBbKHlpZWxkIDI2KV0pCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+CgoKQSB5aWVsZCBleHByZXNzaW9uIHdpdGggYXVnbWVudGVkIGFzc2lnbm1lbnQuCgo+Pj4gZGVmIGNvcm91dGluZShzZXEpOgouLi4gICAgIGNvdW50ID0gMAouLi4gICAgIHdoaWxlIGNvdW50IDwgMjAwOgouLi4gICAgICAgICBjb3VudCArPSB5aWVsZAouLi4gICAgICAgICBzZXEuYXBwZW5kKGNvdW50KQo+Pj4gc2VxID0gW10KPj4+IGMgPSBjb3JvdXRpbmUoc2VxKQo+Pj4gYy5uZXh0KCkKPj4+IHByaW50IHNlcQpbXQo+Pj4gYy5zZW5kKDEwKQo+Pj4gcHJpbnQgc2VxClsxMF0KPj4+IGMuc2VuZCgxMCkKPj4+IHByaW50IHNlcQpbMTAsIDIwXQo+Pj4gYy5zZW5kKDEwKQo+Pj4gcHJpbnQgc2VxClsxMCwgMjAsIDMwXQoKCkNoZWNrIHNvbWUgc3ludGF4IGVycm9ycyBmb3IgeWllbGQgZXhwcmVzc2lvbnM6Cgo+Pj4gZj1sYW1iZGE6ICh5aWVsZCAxKSwoeWllbGQgMikKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgogIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyMV0+IiwgbGluZSAxClN5bnRheEVycm9yOiAneWllbGQnIG91dHNpZGUgZnVuY3Rpb24KCj4+PiBkZWYgZigpOiByZXR1cm4gbGFtYmRhIHg9KHlpZWxkKTogMQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClN5bnRheEVycm9yOiAncmV0dXJuJyB3aXRoIGFyZ3VtZW50IGluc2lkZSBnZW5lcmF0b3IgKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyMl0+LCBsaW5lIDEpCgo+Pj4gZGVmIGYoKTogeCA9IHlpZWxkID0geQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uCiAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzIzXT4iLCBsaW5lIDEKU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8geWllbGQgZXhwcmVzc2lvbiBub3QgcG9zc2libGUKCj4+PiBkZWYgZigpOiAoeWllbGQgYmFyKSA9IHkKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgogIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyNF0+IiwgbGluZSAxClN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8geWllbGQgZXhwcmVzc2lvbgoKPj4+IGRlZiBmKCk6ICh5aWVsZCBiYXIpICs9IHkKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgogIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyNV0+IiwgbGluZSAxClN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8geWllbGQgZXhwcmVzc2lvbgoKCk5vdyBjaGVjayBzb21lIHRocm93KCkgY29uZGl0aW9uczoKCj4+PiBkZWYgZigpOgouLi4gICAgIHdoaWxlIFRydWU6Ci4uLiAgICAgICAgIHRyeToKLi4uICAgICAgICAgICAgIHByaW50ICh5aWVsZCkKLi4uICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsdjoKLi4uICAgICAgICAgICAgIHByaW50ICJjYXVnaHQgVmFsdWVFcnJvciAoJXMpIiAlICh2KSwKPj4+IGltcG9ydCBzeXMKPj4+IGcgPSBmKCkKPj4+IGcubmV4dCgpCgo+Pj4gZy50aHJvdyhWYWx1ZUVycm9yKSAjIHR5cGUgb25seQpjYXVnaHQgVmFsdWVFcnJvciAoKQoKPj4+IGcudGhyb3coVmFsdWVFcnJvcigieHl6IikpICAjIHZhbHVlIG9ubHkKY2F1Z2h0IFZhbHVlRXJyb3IgKHh5eikKCj4+PiBnLnRocm93KFZhbHVlRXJyb3IsIFZhbHVlRXJyb3IoMSkpICAgIyB2YWx1ZSttYXRjaGluZyB0eXBlCmNhdWdodCBWYWx1ZUVycm9yICgxKQoKPj4+IGcudGhyb3coVmFsdWVFcnJvciwgVHlwZUVycm9yKDEpKSAgIyBtaXNtYXRjaGVkIHR5cGUsIHJld3JhcHBlZApjYXVnaHQgVmFsdWVFcnJvciAoMSkKCj4+PiBnLnRocm93KFZhbHVlRXJyb3IsIFZhbHVlRXJyb3IoMSksIE5vbmUpICAgIyBleHBsaWNpdCBOb25lIHRyYWNlYmFjawpjYXVnaHQgVmFsdWVFcnJvciAoMSkKCj4+PiBnLnRocm93KFZhbHVlRXJyb3IoMSksICJmb28iKSAgICAgICAjIGJhZCBhcmdzClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAuLi4KVHlwZUVycm9yOiBpbnN0YW5jZSBleGNlcHRpb24gbWF5IG5vdCBoYXZlIGEgc2VwYXJhdGUgdmFsdWUKCj4+PiBnLnRocm93KFZhbHVlRXJyb3IsICJmb28iLCAyMykgICAgICAjIGJhZCBhcmdzClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAuLi4KVHlwZUVycm9yOiB0aHJvdygpIHRoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSB0cmFjZWJhY2sgb2JqZWN0Cgo+Pj4gZGVmIHRocm93KGcsZXhjKToKLi4uICAgICB0cnk6Ci4uLiAgICAgICAgIHJhaXNlIGV4YwouLi4gICAgIGV4Y2VwdDoKLi4uICAgICAgICAgZy50aHJvdygqc3lzLmV4Y19pbmZvKCkpCj4+PiB0aHJvdyhnLFZhbHVlRXJyb3IpICMgZG8gaXQgd2l0aCB0cmFjZWJhY2sgaW5jbHVkZWQKY2F1Z2h0IFZhbHVlRXJyb3IgKCkKCj4+PiBnLnNlbmQoMSkKMQoKPj4+IHRocm93KGcsVHlwZUVycm9yKSAgIyB0ZXJtaW5hdGUgdGhlIGdlbmVyYXRvcgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClR5cGVFcnJvcgoKPj4+IHByaW50IGcuZ2lfZnJhbWUKTm9uZQoKPj4+IGcuc2VuZCgyKQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClN0b3BJdGVyYXRpb24KCj4+PiBnLnRocm93KFZhbHVlRXJyb3IsNikgICAgICAgIyB0aHJvdyBvbiBjbG9zZWQgZ2VuZXJhdG9yClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAuLi4KVmFsdWVFcnJvcjogNgoKPj4+IGYoKS50aHJvdyhWYWx1ZUVycm9yLDcpICAgICAjIHRocm93IG9uIGp1c3Qtb3BlbmVkIGdlbmVyYXRvcgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClZhbHVlRXJyb3I6IDcKCj4+PiBmKCkudGhyb3coImFiYyIpICAgICAjIHRocm93IG9uIGp1c3Qtb3BlbmVkIGdlbmVyYXRvcgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClR5cGVFcnJvcjogZXhjZXB0aW9ucyBtdXN0IGJlIGNsYXNzZXMsIG9yIGluc3RhbmNlcywgbm90IHN0cgoKTm93IGxldCdzIHRyeSBjbG9zaW5nIGEgZ2VuZXJhdG9yOgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OiB5aWVsZAouLi4gICAgIGV4Y2VwdCBHZW5lcmF0b3JFeGl0OgouLi4gICAgICAgICBwcmludCAiZXhpdGluZyIKCj4+PiBnID0gZigpCj4+PiBnLm5leHQoKQo+Pj4gZy5jbG9zZSgpCmV4aXRpbmcKPj4+IGcuY2xvc2UoKSAgIyBzaG91bGQgYmUgbm8tb3Agbm93Cgo+Pj4gZigpLmNsb3NlKCkgICMgY2xvc2Ugb24ganVzdC1vcGVuZWQgZ2VuZXJhdG9yIHNob3VsZCBiZSBmaW5lCgo+Pj4gZGVmIGYoKTogeWllbGQgICAgICAjIGFuIGV2ZW4gc2ltcGxlciBnZW5lcmF0b3IKPj4+IGYoKS5jbG9zZSgpICAgICAgICAgIyBjbG9zZSBiZWZvcmUgb3BlbmluZwo+Pj4gZyA9IGYoKQo+Pj4gZy5uZXh0KCkKPj4+IGcuY2xvc2UoKSAgICAgICAgICAgIyBjbG9zZSBub3JtYWxseQoKQW5kIGZpbmFsaXphdGlvbjoKCj4+PiBkZWYgZigpOgouLi4gICAgIHRyeTogeWllbGQKLi4uICAgICBmaW5hbGx5OgouLi4gICAgICAgICBwcmludCAiZXhpdGluZyIKCj4+PiBnID0gZigpCj4+PiBnLm5leHQoKQo+Pj4gZGVsIGcKZXhpdGluZwoKPj4+IGNsYXNzIGNvbnRleHQob2JqZWN0KToKLi4uICAgIGRlZiBfX2VudGVyX18oc2VsZik6IHBhc3MKLi4uICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6IHByaW50ICdleGl0aW5nJwo+Pj4gZGVmIGYoKToKLi4uICAgICB3aXRoIGNvbnRleHQoKToKLi4uICAgICAgICAgIHlpZWxkCj4+PiBnID0gZigpCj4+PiBnLm5leHQoKQo+Pj4gZGVsIGcKZXhpdGluZwoKCkdlbmVyYXRvckV4aXQgaXMgbm90IGNhdWdodCBieSBleGNlcHQgRXhjZXB0aW9uOgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OiB5aWVsZAouLi4gICAgIGV4Y2VwdCBFeGNlcHRpb246IHByaW50ICdleGNlcHQnCi4uLiAgICAgZmluYWxseTogcHJpbnQgJ2ZpbmFsbHknCgo+Pj4gZyA9IGYoKQo+Pj4gZy5uZXh0KCkKPj4+IGRlbCBnCmZpbmFsbHkKCgpOb3cgbGV0J3MgdHJ5IHNvbWUgaWxsLWJlaGF2ZWQgZ2VuZXJhdG9yczoKCj4+PiBkZWYgZigpOgouLi4gICAgIHRyeTogeWllbGQKLi4uICAgICBleGNlcHQgR2VuZXJhdG9yRXhpdDoKLi4uICAgICAgICAgeWllbGQgImZvbyEiCj4+PiBnID0gZigpCj4+PiBnLm5leHQoKQo+Pj4gZy5jbG9zZSgpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAuLi4KUnVudGltZUVycm9yOiBnZW5lcmF0b3IgaWdub3JlZCBHZW5lcmF0b3JFeGl0Cj4+PiBnLmNsb3NlKCkKCgpPdXIgaWxsLWJlaGF2ZWQgY29kZSBzaG91bGQgYmUgaW52b2tlZCBkdXJpbmcgR0M6Cgo+Pj4gaW1wb3J0IHN5cywgU3RyaW5nSU8KPj4+IG9sZCwgc3lzLnN0ZGVyciA9IHN5cy5zdGRlcnIsIFN0cmluZ0lPLlN0cmluZ0lPKCkKPj4+IGcgPSBmKCkKPj4+IGcubmV4dCgpCj4+PiBkZWwgZwo+Pj4gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpLnN0YXJ0c3dpdGgoCi4uLiAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6ICdnZW5lcmF0b3IgaWdub3JlZCBHZW5lcmF0b3JFeGl0JyBpbiAiCi4uLiApClRydWUKPj4+IHN5cy5zdGRlcnIgPSBvbGQKCgpBbmQgZXJyb3JzIHRocm93biBkdXJpbmcgY2xvc2luZyBzaG91bGQgcHJvcGFnYXRlOgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OiB5aWVsZAouLi4gICAgIGV4Y2VwdCBHZW5lcmF0b3JFeGl0OgouLi4gICAgICAgICByYWlzZSBUeXBlRXJyb3IoImZpZSEiKQo+Pj4gZyA9IGYoKQo+Pj4gZy5uZXh0KCkKPj4+IGcuY2xvc2UoKQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClR5cGVFcnJvcjogZmllIQoKCkVuc3VyZSB0aGF0IHZhcmlvdXMgeWllbGQgZXhwcmVzc2lvbiBjb25zdHJ1Y3RzIG1ha2UgdGhlaXIKZW5jbG9zaW5nIGZ1bmN0aW9uIGEgZ2VuZXJhdG9yOgoKPj4+IGRlZiBmKCk6IHggKz0geWllbGQKPj4+IHR5cGUoZigpKQo8dHlwZSAnZ2VuZXJhdG9yJz4KCj4+PiBkZWYgZigpOiB4ID0geWllbGQKPj4+IHR5cGUoZigpKQo8dHlwZSAnZ2VuZXJhdG9yJz4KCj4+PiBkZWYgZigpOiBsYW1iZGEgeD0oeWllbGQpOiAxCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+Cgo+Pj4gZGVmIGYoKTogeD0oaSBmb3IgaSBpbiAoeWllbGQpIGlmICh5aWVsZCkpCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+Cgo+Pj4gZGVmIGYoZCk6IGRbKHlpZWxkICJhIildID0gZFsoeWllbGQgImIiKV0gPSAyNwo+Pj4gZGF0YSA9IFsxLDJdCj4+PiBnID0gZihkYXRhKQo+Pj4gdHlwZShnKQo8dHlwZSAnZ2VuZXJhdG9yJz4KPj4+IGcuc2VuZChOb25lKQonYScKPj4+IGRhdGEKWzEsIDJdCj4+PiBnLnNlbmQoMCkKJ2InCj4+PiBkYXRhClsyNywgMl0KPj4+IHRyeTogZy5zZW5kKDEpCi4uLiBleGNlcHQgU3RvcEl0ZXJhdGlvbjogcGFzcwo+Pj4gZGF0YQpbMjcsIDI3XQoKc1MHAAAKUHJpb3IgdG8gYWRkaW5nIGN5Y2xlLUdDIHN1cHBvcnQgdG8gaXRlcnRvb2xzLnRlZSwgdGhpcyBjb2RlIHdvdWxkIGxlYWsKcmVmZXJlbmNlcy4gV2UgYWRkIGl0IHRvIHRoZSBzdGFuZGFyZCBzdWl0ZSBzbyB0aGUgcm91dGluZSByZWZsZWFrLXRlc3RzCndvdWxkIHRyaWdnZXIgaWYgaXQgc3RhcnRzIGJlaW5nIHVuY2xlYW5hYmxlIGFnYWluLgoKPj4+IGltcG9ydCBpdGVydG9vbHMKPj4+IGRlZiBsZWFrKCk6Ci4uLiAgICAgY2xhc3MgZ2VuOgouLi4gICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6Ci4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZgouLi4gICAgICAgICBkZWYgbmV4dChzZWxmKToKLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLml0ZW0KLi4uICAgICBnID0gZ2VuKCkKLi4uICAgICBoZWFkLCB0YWlsID0gaXRlcnRvb2xzLnRlZShnKQouLi4gICAgIGcuaXRlbSA9IGhlYWQKLi4uICAgICByZXR1cm4gaGVhZAo+Pj4gaXQgPSBsZWFrKCkKCk1ha2Ugc3VyZSB0byBhbHNvIHRlc3QgdGhlIGludm9sdmVtZW50IG9mIHRoZSB0ZWUtaW50ZXJuYWwgdGVlZGF0YW9iamVjdCwKd2hpY2ggc3RvcmVzIHJldHVybmVkIGl0ZW1zLgoKPj4+IGl0ZW0gPSBpdC5uZXh0KCkKCgoKVGhpcyB0ZXN0IGxlYWtlZCBhdCBvbmUgcG9pbnQgZHVlIHRvIGdlbmVyYXRvciBmaW5hbGl6YXRpb24vZGVzdHJ1Y3Rpb24uCkl0IHdhcyBjb3BpZWQgZnJvbSBMaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VuZXJhdG9yX2N5Y2xlLnB5IGJlZm9yZSB0aGUgZmlsZQp3YXMgcmVtb3ZlZC4KCj4+PiBkZWYgbGVhaygpOgouLi4gICAgZGVmIGdlbigpOgouLi4gICAgICAgIHdoaWxlIFRydWU6Ci4uLiAgICAgICAgICAgIHlpZWxkIGcKLi4uICAgIGcgPSBnZW4oKQoKPj4+IGxlYWsoKQoKCgpUaGlzIHRlc3QgaXNuJ3QgcmVhbGx5IGdlbmVyYXRvciByZWxhdGVkLCBidXQgcmF0aGVyIGV4Y2VwdGlvbi1pbi1jbGVhbnVwCnJlbGF0ZWQuIFRoZSBjb3JvdXRpbmUgdGVzdHMgKGFib3ZlKSBqdXN0IGhhcHBlbiB0byBjYXVzZSBhbiBleGNlcHRpb24gaW4KdGhlIGdlbmVyYXRvcidzIF9fZGVsX18gKHRwX2RlbCkgbWV0aG9kLiBXZSBjYW4gYWxzbyB0ZXN0IGZvciB0aGlzCmV4cGxpY2l0bHksIHdpdGhvdXQgZ2VuZXJhdG9ycy4gV2UgZG8gaGF2ZSB0byByZWRpcmVjdCBzdGRlcnIgdG8gYXZvaWQKcHJpbnRpbmcgd2FybmluZ3MgYW5kIHRvIGRvdWJsZWNoZWNrIHRoYXQgd2UgYWN0dWFsbHkgdGVzdGVkIHdoYXQgd2Ugd2FudGVkCnRvIHRlc3QuCgo+Pj4gaW1wb3J0IHN5cywgU3RyaW5nSU8KPj4+IG9sZCA9IHN5cy5zdGRlcnIKPj4+IHRyeToKLi4uICAgICBzeXMuc3RkZXJyID0gU3RyaW5nSU8uU3RyaW5nSU8oKQouLi4gICAgIGNsYXNzIExlYWtlcjoKLi4uICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci4uLiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKLi4uCi4uLiAgICAgbCA9IExlYWtlcigpCi4uLiAgICAgZGVsIGwKLi4uICAgICBlcnIgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RyaXAoKQouLi4gICAgIGVyci5zdGFydHN3aXRoKAouLi4gICAgICAgICAiRXhjZXB0aW9uIFJ1bnRpbWVFcnJvcjogUnVudGltZUVycm9yKCkgaW4gPCIKLi4uICAgICApCi4uLiAgICAgZXJyLmVuZHN3aXRoKCI+IGlnbm9yZWQiKQouLi4gICAgIGxlbihlcnIuc3BsaXRsaW5lcygpKQouLi4gZmluYWxseToKLi4uICAgICBzeXMuc3RkZXJyID0gb2xkClRydWUKVHJ1ZQoxCgoKClRoZXNlIHJlZmxlYWsgdGVzdHMgc2hvdWxkIHBlcmhhcHMgYmUgaW4gYSB0ZXN0ZmlsZSBvZiB0aGVpciBvd24sCnRlc3RfZ2VuZXJhdG9ycyBqdXN0IGhhcHBlbmVkIHRvIGJlIHRoZSB0ZXN0IHRoYXQgZHJldyB0aGVzZSBvdXQuCgp0AwAAAHR1dHQDAAAAcGVwdAUAAABlbWFpbHQDAAAAZnVudAYAAABzeW50YXhSEAAAAHQHAAAAd2Vha3JlZnQJAAAAY29yb3V0aW5ldAgAAAByZWZsZWFrc2MBAAAAAwAAAAMAAABDAAAAcyoAAABkAQBkAgBsAABtAQB9AQBtAgB9AgABfAEAagMAfAIAfAAAgwIAAWQAAFMoAwAAAE5p/////ygCAAAAdAwAAAB0ZXN0X3N1cHBvcnR0DwAAAHRlc3RfZ2VuZXJhdG9ycygEAAAAdAQAAAB0ZXN0UmQAAABSZQAAAHQLAAAAcnVuX2RvY3Rlc3QoAwAAAHQHAAAAdmVyYm9zZVJkAAAAUmUAAAAoAAAAACgAAAAAc1wAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weXQJAAAAdGVzdF9tYWlubQcAAHMEAAAAAAEWAXQIAAAAX19tYWluX19pAQAAAE4oEgAAAHQOAAAAdHV0b3JpYWxfdGVzdHN0CQAAAHBlcF90ZXN0c3QLAAAAZW1haWxfdGVzdHN0CQAAAGZ1bl90ZXN0c3QMAAAAc3ludGF4X3Rlc3RzUgcAAABSEAAAAFIWAAAAUhcAAABSLwAAAHQNAAAAY29uam9pbl90ZXN0c3QNAAAAd2Vha3JlZl90ZXN0c3QPAAAAY29yb3V0aW5lX3Rlc3RzdA4AAAByZWZsZWFrc190ZXN0c3QIAAAAX190ZXN0X19SBgAAAFJpAAAAUi0AAAAoAAAAACgAAAAAKAAAAABzXAAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5dAgAAAA8bW9kdWxlPoQAAABzNgAAAAalBr4G7gbZBhYJFQk9CSQTNxP/AFEGGAb/ADkGSwYCCgEHAQcBBwEHAQcBBwEHAQoHDAUMAQ==