ISB7IGRnLWRvIHJ1biB9CiEKISAxMy43LjUzICAgIElOVChBIFssIEtJTkRdKQohCiEgRGVzY3JpcHRpb24uICBDb252ZXJ0IHRvIGludGVnZXIgdHlwZS4KISBDbGFzcy4gICAgICAgRWxlbWVudGFsIGZ1bmN0aW9uLgohIEFyZ3VtZW50cy4KISAgICBBICAgICAgICAgICAgICAgc2hhbGwgYmUgb2YgdHlwZSBpbnRlZ2VyLCByZWFsLCBvciBjb21wbGV4LAohICAgICAgICAgICAgICAgICAgICBvciBhIGJvei1saXRlcmFsLWNvbnN0YW50IC4KISAgICBLSU5EIChvcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgaW50ZWdlciBpbml0aWFsaXphdGlvbiBleHByZXNzaW9uLgohCiEgUmVzdWx0IENoYXJhY3RlcmlzdGljcy4gSW50ZWdlci4gSWYgS0lORCBpcyBwcmVzZW50LCB0aGUga2luZCB0eXBlCiEgICAgcGFyYW1ldGVyIGlzIHRoYXQgc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZSBvZiBLSU5EOyBvdGhlcndpc2UsIHRoZQohICAgIGtpbmQgdHlwZSBwYXJhbWV0ZXIgaXMgdGhhdCBvZiBkZWZhdWx0IGludGVnZXIgdHlwZS4KIQohIFJlc3VsdCBWYWx1ZS4KIQohICAgIENhc2UgKDEpOiAgSWYgQSBpcyBvZiB0eXBlIGludGVnZXIsIElOVCAoQSkgPSBBLgohCiEgICAgQ2FzZSAoMik6ICBJZiBBIGlzIG9mIHR5cGUgcmVhbCwgdGhlcmUgYXJlIHR3byBjYXNlczoKISAgICAgIChhKSBpZiB8QXwgPCAxLCBJTlQgKEEpIGhhcyB0aGUgdmFsdWUgMAohICAgICAgKGIpIGlmIHxBfCAuZ2UuIDEsIElOVCAoQSkgaXMgdGhlIGludGVnZXIgd2hvc2UgbWFnbml0dWRlIGlzIHRoZQohICAgICAgICAgIGxhcmdlc3QgaW50ZWdlciB0aGF0IGRvZXMgbm90IGV4Y2VlZCB0aGUgbWFnbml0dWRlIG9mIEEgYW5kCiEgICAgICAgICAgd2hvc2Ugc2lnbiBpcyB0aGUgc2FtZSBhcyB0aGUgc2lnbiBvZiBBLgohCiEgICAgQ2FzZSAoMyk6ICBJZiBBIGlzIG9mIHR5cGUgY29tcGxleCwgSU5UKEEpID0gSU5UKFJFQUwoQSwgS0lORChBKSkpLgohCiEgICAgQ2FzZSAoNCk6ICBJZiBBIGlzIGEgYm96LWxpdGVyYWwtY29uc3RhbnQsIGl0IGlzIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZQohICAgICAgICAgICAgICAgYW4gaW50LWxpdGVyYWwtY29uc3RhbnQgd2l0aCBhIGtpbmQtcGFyYW0gdGhhdCBzcGVjaWZpZXMgdGhlCiEgICAgICAgICAgICAgICByZXByZXNlbnRhdGlvbiBtZXRob2Qgd2l0aCB0aGUgbGFyZ2VzdCBkZWNpbWFsIGV4cG9uZW50IHJhbmdlCiEgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgdGhlIHByb2Nlc3Nvci4KIQohICAgIEV4YW1wbGUuIElOVCAorTMuNykgaGFzIHRoZSB2YWx1ZSCtMy4KIQptb2R1bGUgbXlraW5kcwogICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogaWsxID0gc2VsZWN0ZWRfaW50X2tpbmQoMikKICAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IGlrMiA9IHNlbGVjdGVkX2ludF9raW5kKDQpCiAgIGludGVnZXIsIHBhcmFtZXRlciA6OiBpazQgPSBzZWxlY3RlZF9pbnRfa2luZCg5KQogICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogaWs4ID0gc2VsZWN0ZWRfaW50X2tpbmQoMTgpCiAgIGludGVnZXIsIHBhcmFtZXRlciA6OiBzcCA9IHNlbGVjdGVkX3JlYWxfa2luZCg2LDMwKQogICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogZHAgPSBzZWxlY3RlZF9yZWFsX2tpbmQoMTUsMzAwKQogICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogY2sgPSBraW5kKCdhJykKZW5kIG1vZHVsZSBteWtpbmRzCgpwcm9ncmFtIHRlc3RfaW50CgogICB1c2UgbXlraW5kcwoKICAgaW50ZWdlcihpazEpIGkxCiAgIGludGVnZXIoaWsyKSBpMgogICBpbnRlZ2VyKGlrNCkgaTQKICAgaW50ZWdlcihpazgpIGk4CiAgIHJlYWwoc3ApIHI0CiAgIHJlYWwoZHApIHI4CiAgIGNvbXBsZXgoc3ApIGM0CiAgIGNvbXBsZXgoZHApIGM4CiAgICEKICAgISBDYXNlIDEKICAgIQogICBpMSA9IGludCgtMykKICAgaTIgPSBpbnQoLTMpCiAgIGk0ID0gaW50KC0zKQogICBpOCA9IGludCgtMykKICAgaWYgKGkxIC89IC0zX2lrMSAub3IuIGkyIC89IC0zX2lrMikgY2FsbCBhYm9ydAogICBpZiAoaTQgLz0gLTNfaWs0IC5vci4gaTggLz0gLTNfaWs4KSBjYWxsIGFib3J0CgogICBpMSA9IGludCg1LCAgaWsxKQogICBpMiA9IGludChpMSwgaWsyKQogICBpNCA9IGludChpMSwgaWs0KQogICBpOCA9IGludChpMSwgaWs4KQogICBpZiAoaTEgLz0gNV9pazEgLm9yLiBpMiAvPSA1X2lrMikgY2FsbCBhYm9ydAogICBpZiAoaTQgLz0gNV9pazQgLm9yLiBpOCAvPSA1X2lrOCkgY2FsbCBhYm9ydAoKICAgaTggPSBpbnQoMTAsIGlrOCkKICAgaTEgPSBpbnQoaTgsIGlrMSkKICAgaTIgPSBpbnQoaTgsIGlrMikKICAgaTQgPSBpbnQoaTgsIGlrNCkKICAgaWYgKGkxIC89IDEwX2lrMSAub3IuIGkyIC89IDEwX2lrMikgY2FsbCBhYm9ydAogICBpZiAoaTQgLz0gMTBfaWs0IC5vci4gaTggLz0gMTBfaWs4KSBjYWxsIGFib3J0CiAgICEKICAgISBjYXNlIDIoYikKICAgIQogICByNCA9IC0zLjdfc3AKICAgaTEgPSBpbnQocjQsICBpazEpCiAgIGkyID0gaW50KHI0LCBpazIpCiAgIGk0ID0gaW50KHI0LCBpazQpCiAgIGk4ID0gaW50KHI0LCBpazgpCiAgIGlmIChpMSAvPSAtM19pazEgLm9yLiBpMiAvPSAtM19pazIpIGNhbGwgYWJvcnQKICAgaWYgKGk0IC89IC0zX2lrNCAub3IuIGk4IC89IC0zX2lrOCkgY2FsbCBhYm9ydAoKICAgcjggPSAtMy43X2RwCiAgIGkxID0gaW50KHI4LCAgaWsxKQogICBpMiA9IGludChyOCwgaWsyKQogICBpNCA9IGludChyOCwgaWs0KQogICBpOCA9IGludChyOCwgaWs4KQogICBpZiAoaTEgLz0gLTNfaWsxIC5vci4gaTIgLz0gLTNfaWsyKSBjYWxsIGFib3J0CiAgIGlmIChpNCAvPSAtM19pazQgLm9yLiBpOCAvPSAtM19pazgpIGNhbGwgYWJvcnQKICAgIQogICAhIENhc2UgMihhKQogICAhCiAgIHI0ID0gLTMuN0UtMV9zcAogICBpMSA9IGludChyNCwgaWsxKQogICBpMiA9IGludChyNCwgaWsyKQogICBpNCA9IGludChyNCwgaWs0KQogICBpOCA9IGludChyNCwgaWs4KQogICBpZiAoaTEgLz0gMF9pazEgLm9yLiBpMiAvPSAwX2lrMikgY2FsbCBhYm9ydAogICBpZiAoaTQgLz0gMF9pazQgLm9yLiBpOCAvPSAwX2lrOCkgY2FsbCBhYm9ydAoKICAgcjggPSAtMy43RS0xX2RwCiAgIGkxID0gaW50KHI4LCBpazEpCiAgIGkyID0gaW50KHI4LCBpazIpCiAgIGk0ID0gaW50KHI4LCBpazQpCiAgIGk4ID0gaW50KHI4LCBpazgpCiAgIGlmIChpMSAvPSAwX2lrMSAub3IuIGkyIC89IDBfaWsyKSBjYWxsIGFib3J0CiAgIGlmIChpNCAvPSAwX2lrNCAub3IuIGk4IC89IDBfaWs4KSBjYWxsIGFib3J0CiAgICEKICAgISBDYXNlIDMKICAgIQogICBjNCA9ICgtMy43RS0xX3NwLDMuN0UtMV9zcCkKICAgaTEgPSBpbnQoYzQsIGlrMSkKICAgaTIgPSBpbnQoYzQsIGlrMikKICAgaTQgPSBpbnQoYzQsIGlrNCkKICAgaTggPSBpbnQoYzQsIGlrOCkKICAgaWYgKGkxIC89IDBfaWsxIC5vci4gaTIgLz0gMF9pazIpIGNhbGwgYWJvcnQKICAgaWYgKGk0IC89IDBfaWs0IC5vci4gaTggLz0gMF9pazgpIGNhbGwgYWJvcnQKCiAgIGM4ID0gKC0zLjdFLTFfZHAsMy43RS0xX2RwKQogICBpMSA9IGludChjOCwgaWsxKQogICBpMiA9IGludChjOCwgaWsyKQogICBpNCA9IGludChjOCwgaWs0KQogICBpOCA9IGludChjOCwgaWs4KQogICBpZiAoaTEgLz0gMF9pazEgLm9yLiBpMiAvPSAwX2lrMikgY2FsbCBhYm9ydAogICBpZiAoaTQgLz0gMF9pazQgLm9yLiBpOCAvPSAwX2lrOCkgY2FsbCBhYm9ydAoKICAgYzQgPSAoLTMuN19zcCwzLjdfc3ApCiAgIGkxID0gaW50KGM0LCBpazEpCiAgIGkyID0gaW50KGM0LCBpazIpCiAgIGk0ID0gaW50KGM0LCBpazQpCiAgIGk4ID0gaW50KGM0LCBpazgpCiAgIGlmIChpMSAvPSAtM19pazEgLm9yLiBpMiAvPSAtM19pazIpIGNhbGwgYWJvcnQKICAgaWYgKGk0IC89IC0zX2lrNCAub3IuIGk4IC89IC0zX2lrOCkgY2FsbCBhYm9ydAoKICAgYzggPSAoMy43X2RwLDMuN19kcCkKICAgaTEgPSBpbnQoYzgsIGlrMSkKICAgaTIgPSBpbnQoYzgsIGlrMikKICAgaTQgPSBpbnQoYzgsIGlrNCkKICAgaTggPSBpbnQoYzgsIGlrOCkKICAgaWYgKGkxIC89IDNfaWsxIC5vci4gaTIgLz0gM19pazIpIGNhbGwgYWJvcnQKICAgaWYgKGk0IC89IDNfaWs0IC5vci4gaTggLz0gM19pazgpIGNhbGwgYWJvcnQKICAgIQogICAhIENhc2UgNAogICAhCiAgIGkxID0gaW50KGInMDAxMScsIGlrMSkKICAgaTIgPSBpbnQoYicwMDExJywgaWsyKQogICBpNCA9IGludChiJzAwMTEnLCBpazQpCiAgIGk4ID0gaW50KGInMDAxMScsIGlrOCkKICAgaWYgKGkxIC89IDNfaWsxIC5vci4gaTIgLz0gM19pazIpIGNhbGwgYWJvcnQKICAgaWYgKGk0IC89IDNfaWs0IC5vci4gaTggLz0gM19pazgpIGNhbGwgYWJvcnQKICAgaTEgPSBpbnQobycwMDExJywgaWsxKQogICBpMiA9IGludChvJzAwMTEnLCBpazIpCiAgIGk0ID0gaW50KG8nMDAxMScsIGlrNCkKICAgaTggPSBpbnQobycwMDExJywgaWs4KQogICBpZiAoaTEgLz0gOV9pazEgLm9yLiBpMiAvPSA5X2lrMikgY2FsbCBhYm9ydAogICBpZiAoaTQgLz0gOV9pazQgLm9yLiBpOCAvPSA5X2lrOCkgY2FsbCBhYm9ydAogICBpMSA9IGludCh6JzAwMTEnLCBpazEpCiAgIGkyID0gaW50KHonMDAxMScsIGlrMikKICAgaTQgPSBpbnQoeicwMDExJywgaWs0KQogICBpOCA9IGludCh6JzAwMTEnLCBpazgpCiAgIGlmIChpMSAvPSAxN19pazEgLm9yLiBpMiAvPSAxN19pazIpIGNhbGwgYWJvcnQKICAgaWYgKGk0IC89IDE3X2lrNCAub3IuIGk4IC89IDE3X2lrOCkgY2FsbCBhYm9ydAogICAKZW5kIHByb2dyYW0gdGVzdF9pbnQKCiEgeyBkZy1maW5hbCB7IGNsZWFudXAtbW9kdWxlcyAibXlraW5kcyIgfSB9Cg==