LmZpbGUgInRhbmNvdGYucyIKCgovLyBDb3B5cmlnaHQgKGMpIDIwMDAgLSAyMDA1LCBJbnRlbCBDb3Jwb3JhdGlvbgovLyBBbGwgcmlnaHRzIHJlc2VydmVkLgovLwovLyBDb250cmlidXRlZCAyMDAwIGJ5IHRoZSBJbnRlbCBOdW1lcmljcyBHcm91cCwgSW50ZWwgQ29ycG9yYXRpb24KLy8KLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLy8gbWV0OgovLwovLyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLy8KLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAovLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi8vIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi8vCi8vICogVGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQovLyBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLy8gcGVybWlzc2lvbi4KCi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCi8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIAovLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIE9SIElUUyAKLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCi8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZIE9SIFRPUlQgKElOQ0xVRElORwovLyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgCi8vIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLy8KLy8gSW50ZWwgQ29ycG9yYXRpb24gaXMgdGhlIGF1dGhvciBvZiB0aGlzIGNvZGUsIGFuZCByZXF1ZXN0cyB0aGF0IGFsbAovLyBwcm9ibGVtIHJlcG9ydHMgb3IgY2hhbmdlIHJlcXVlc3RzIGJlIHN1Ym1pdHRlZCB0byBpdCBkaXJlY3RseSBhdCAKLy8gaHR0cDovL3d3dy5pbnRlbC5jb20vc29mdHdhcmUvcHJvZHVjdHMvb3BlbnNvdXJjZS9saWJyYXJpZXMvbnVtLmh0bS4KLy8KLy8gSGlzdG9yeQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIDAyLzAyLzAwIEluaXRpYWwgdmVyc2lvbgovLyAwNC8wNC8wMCBVbndpbmQgc3VwcG9ydCBhZGRlZAovLyAxMi8yNy8wMCBJbXByb3ZlZCBzcGVlZAovLyAwMi8yMS8wMSBVcGRhdGVkIHRvIGNhbGwgdGFubAovLyAwNS8zMC8wMiBJbXByb3ZlZCBzcGVlZCwgYWRkZWQgY290Zi4KLy8gMTEvMjUvMDIgQWRkZWQgZXhwbGljaXQgY29tcGxldGVyIG9uIGZub3JtCi8vIDAyLzEwLzAzIFJlb3JkZXJlZCBoZWFkZXI6IC5zZWN0aW9uLCAuZ2xvYmFsLCAucHJvYywgLmFsaWduCi8vIDA0LzE3LzAzIEVsaW1pbmF0ZWQgcmVkdW5kYW50IHN0b3AgYml0cwovLyAwMy8zMS8wNSBSZWZvcm1hdHRlZCBkZWxpbWl0ZXJzIGJldHdlZW4gZGF0YSB0YWJsZXMKLy8KLy8gQVBJcwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIGZsb2F0IHRhbmYoZmxvYXQpCi8vIGZsb2F0IGNvdGYoZmxvYXQpCi8vCi8vIEFsZ29yaXRobSBEZXNjcmlwdGlvbiBmb3IgdGFuZgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIFRoZSB0YW5mIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBwcmluY2lwbGUgdmFsdWUgb2YgdGhlIHRhbmdlbnQgb2YgeCwKLy8gd2hlcmUgeCBpcyByYWRpYW4gYXJndW1lbnQuCi8vCi8vIFRoZXJlIGFyZSA1IHBhdGhzOgovLyAxLiB4ID0gKy8tMC4wCi8vICAgIFJldHVybiB0YW5mKHgpID0gKy8tMC4wCi8vCi8vIDIuIHggPSBbUyxRXU5hTgovLyAgICBSZXR1cm4gdGFuZih4KSA9IFFOYU4KLy8KLy8gMy4geCA9ICsvLUluZgovLyAgICBSZXR1cm4gdGFuZih4KSA9IFFOYU4KLy8KLy8gNC4geCA9IHIgKyAoUGkvMikqTiwgTiA9IFJvdW5kSW50KHgqKDIvUGkpKSwgTiBpcyBldmVuLCB8cnw8UGkvNAovLyAgICBSZXR1cm4gdGFuZih4KSA9IFAxOShyKSA9IEExKnIgKyBBMypyXjMgKyBBNSpyXjUgKyAuLi4gKyBBMTkqcl4xOSA9Ci8vICAgID0gciooQTEgKyBBMyp0ICsgQTUqdF4yICsgLi4uICsgQTE5KnReOSkgPSByKlA5KHQpLCB3aGVyZSB0ID0gcl4yCi8vCi8vIDUuIHggPSByICsgKFBpLzIpKk4sIE4gPSBSb3VuZEludCh4KigyL1BpKSksIE4gaXMgb2RkLCB8cnw8UGkvNAovLyAgICBSZXR1cm4gdGFuZih4KSA9IC0xL3IgKyBQMTEocikgPSAtMS9yICsgQjEqciArIEIzKnJeMyArIC4uLiArIEIxMSpyXjExID0KLy8gICAgPSAtMS9yICsgciooQjEgKyBCMyp0ICsgQjUqdF4yICsgLi4uICsgQjExKnReNSkgPSAtMS9yICsgcipQMTEodCksCi8vICAgIHdoZXJlIHQgPSByXjIKLy8KLy8gQWxnb3JpdGhtIERlc2NyaXB0aW9uIGZvciBjb3RmCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gVGhlIGNvdGYgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIHByaW5jaXBsZSB2YWx1ZSBvZiB0aGUgY290YW5nZW50IG9mIHgsCi8vIHdoZXJlIHggaXMgcmFkaWFuIGFyZ3VtZW50LgovLwovLyBUaGVyZSBhcmUgNSBwYXRoczoKLy8gMS4geCA9ICsvLTAuMAovLyAgICBSZXR1cm4gY290Zih4KSA9ICsvLUluZiBhbmQgZXJyb3IgaGFuZGxpbmcgaXMgY2FsbGVkCi8vCi8vIDIuIHggPSBbUyxRXU5hTgovLyAgICBSZXR1cm4gY290Zih4KSA9IFFOYU4KLy8KLy8gMy4geCA9ICsvLUluZgovLyAgICBSZXR1cm4gY290Zih4KSA9IFFOYU4KLy8KLy8gNC4geCA9IHIgKyAoUGkvMikqTiwgTiA9IFJvdW5kSW50KHgqKDIvUGkpKSwgTiBpcyBvZGQsIHxyfDxQaS80Ci8vICAgIFJldHVybiBjb3RmKHgpID0gUDE5KC1yKSA9IEExKigtcikgKyBBMyooLXJeMykgKyAuLi4gKyBBMTkqKC1yXjE5KSA9Ci8vICAgID0gLXIqKEExICsgQTMqdCArIEE1KnReMiArIC4uLiArIEExOSp0XjkpID0gLXIqUDkodCksIHdoZXJlIHQgPSByXjIKLy8KLy8gNS4geCA9IHIgKyAoUGkvMikqTiwgTiA9IFJvdW5kSW50KHgqKDIvUGkpKSwgTiBpcyBldmVuLCB8cnw8UGkvNAovLyAgICBSZXR1cm4gY290Zih4KSA9IDEvciArIFAxMSgtcikgPSAxL3IgKyBCMSooLXIpICsgLi4uICsgQjExKigtcl4xMSkgPQovLyAgICA9IDEvciAtIHIqKEIxICsgQjMqdCArIEI1KnReMiArIC4uLiArIEIxMSp0XjUpID0gMS9yIC0gcipQMTEodCksCi8vICAgIHdoZXJlIHQgPSByXjIKLy8KLy8gICAgV2Ugc2V0IHAxMCBhbmQgY2xlYXIgcDExIGlmIGNvbXB1dGluZyB0YW5mLCB2aWNlIHZlcnNhIGZvciBjb3RmLgovLwovLwovLyBSZWdpc3RlcnMgdXNlZAovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIEZsb2F0aW5nIFBvaW50IHJlZ2lzdGVycyB1c2VkOgovLyBmOCwgaW5wdXQKLy8gZjMyIC0+IGY4MAovLwovLyBHZW5lcmFsIHJlZ2lzdGVycyB1c2VkOgovLyByMTQgLT4gcjIzLCByMzIgLT4gcjM5Ci8vCi8vIFByZWRpY2F0ZSByZWdpc3RlcnMgdXNlZDoKLy8gcDYgLT4gcDEzCi8vCi8vIEFzc2VtYmx5IG1hY3JvcwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIGludGVnZXIgcmVnaXN0ZXJzCnJFeHAgICAgICAgICAgICAgICAgICAgICAgICA9IHIxNApyU2lnbk1hc2sgICAgICAgICAgICAgICAgICAgPSByMTUKclJzaGYgICAgICAgICAgICAgICAgICAgICAgID0gcjE2CnJTY0ZjdHJFeHAgICAgICAgICAgICAgICAgICA9IHIxNwpySW50TiAgICAgICAgICAgICAgICAgICAgICAgPSByMTgKclNpZ1JjcFBpYnkyICAgICAgICAgICAgICAgID0gcjE5CnJTY1JzaGYgICAgICAgICAgICAgICAgICAgICA9IHIyMApyQ29lZmZBICAgICAgICAgICAgICAgICAgICAgPSByMjEKckNvZWZmQiAgICAgICAgICAgICAgICAgICAgID0gcjIyCnJFeHBDdXQgICAgICAgICAgICAgICAgICAgICA9IHIyMwoKR1JfU0FWRV9CMCAgICAgICAgICAgICAgICAgID0gcjMzCkdSX1NBVkVfUEZTICAgICAgICAgICAgICAgICA9IHIzNApHUl9TQVZFX0dQICAgICAgICAgICAgICAgICAgPSByMzUKR1JfUGFyYW1ldGVyX1ggICAgICAgICAgICAgID0gcjM2CkdSX1BhcmFtZXRlcl9ZICAgICAgICAgICAgICA9IHIzNwpHUl9QYXJhbWV0ZXJfUkVTVUxUICAgICAgICAgPSByMzgKR1JfUGFyYW1ldGVyX1RhZyAgICAgICAgICAgID0gcjM5CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycwpmU2NSY3BQaWJ5MiAgICAgICAgICAgICAgICAgPSBmMzIKZlNjUnNoZiAgICAgICAgICAgICAgICAgICAgID0gZjMzCmZOb3JtQXJnICAgICAgICAgICAgICAgICAgICA9IGYzNApmU2NGY3RyICAgICAgICAgICAgICAgICAgICAgPSBmMzUKZlJzaGYgICAgICAgICAgICAgICAgICAgICAgID0gZjM2CmZTaGlmdGVkTiAgICAgICAgICAgICAgICAgICA9IGYzNwpmTiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmMzgKZlIgICAgICAgICAgICAgICAgICAgICAgICAgID0gZjM5CmZBMDEgICAgICAgICAgICAgICAgICAgICAgICA9IGY0MApmQTAzICAgICAgICAgICAgICAgICAgICAgICAgPSBmNDEKZkEwNSAgICAgICAgICAgICAgICAgICAgICAgID0gZjQyCmZBMDcgICAgICAgICAgICAgICAgICAgICAgICA9IGY0MwpmQTA5ICAgICAgICAgICAgICAgICAgICAgICAgPSBmNDQKZkExMSAgICAgICAgICAgICAgICAgICAgICAgID0gZjQ1CmZBMTMgICAgICAgICAgICAgICAgICAgICAgICA9IGY0NgpmQTE1ICAgICAgICAgICAgICAgICAgICAgICAgPSBmNDcKZkExNyAgICAgICAgICAgICAgICAgICAgICAgID0gZjQ4CmZBMTkgICAgICAgICAgICAgICAgICAgICAgICA9IGY0OQpmQjAxICAgICAgICAgICAgICAgICAgICAgICAgPSBmNTAKZkIwMyAgICAgICAgICAgICAgICAgICAgICAgID0gZjUxCmZCMDUgICAgICAgICAgICAgICAgICAgICAgICA9IGY1MgpmQjA3ICAgICAgICAgICAgICAgICAgICAgICAgPSBmNTMKZkIwOSAgICAgICAgICAgICAgICAgICAgICAgID0gZjU0CmZCMTEgICAgICAgICAgICAgICAgICAgICAgICA9IGY1NQpmQTAzXzAxICAgICAgICAgICAgICAgICAgICAgPSBmNTYKZkEwN18wNSAgICAgICAgICAgICAgICAgICAgID0gZjU3CmZBMTFfMDkgICAgICAgICAgICAgICAgICAgICA9IGY1OApmQTE1XzEzICAgICAgICAgICAgICAgICAgICAgPSBmNTkKZkExOV8xNyAgICAgICAgICAgICAgICAgICAgID0gZjYwCmZBMTFfMDUgICAgICAgICAgICAgICAgICAgICA9IGY2MQpmQTE5XzEzICAgICAgICAgICAgICAgICAgICAgPSBmNjIKZkExOV8wNSAgICAgICAgICAgICAgICAgICAgID0gZjYzCmZSYnlBMDNfMDEgICAgICAgICAgICAgICAgICA9IGY2NApmQjAzXzAxICAgICAgICAgICAgICAgICAgICAgPSBmNjUKZkIwN18wNSAgICAgICAgICAgICAgICAgICAgID0gZjY2CmZCMTFfMDkgICAgICAgICAgICAgICAgICAgICA9IGY2NwpmQjExXzA1ICAgICAgICAgICAgICAgICAgICAgPSBmNjgKZlJieUIwM18wMSAgICAgICAgICAgICAgICAgID0gZjY5CmZSYnlCMTFfMDEgICAgICAgICAgICAgICAgICA9IGY3MApmUnAyICAgICAgICAgICAgICAgICAgICAgICAgPSBmNzEKZlJwNCAgICAgICAgICAgICAgICAgICAgICAgID0gZjcyCmZScDggICAgICAgICAgICAgICAgICAgICAgICA9IGY3MwpmUnA1ICAgICAgICAgICAgICAgICAgICAgICAgPSBmNzQKZlkwICAgICAgICAgICAgICAgICAgICAgICAgID0gZjc1CmZZMSAgICAgICAgICAgICAgICAgICAgICAgICA9IGY3NgpmRCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmNzcKZkRwMiAgICAgICAgICAgICAgICAgICAgICAgID0gZjc4CmZJbnZSICAgICAgICAgICAgICAgICAgICAgICA9IGY3OQpmUGlieTIgICAgICAgICAgICAgICAgICAgICAgPSBmODAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKClJPREFUQQouYWxpZ24gMTYKCkxPQ0FMX09CSkVDVF9TVEFSVChjb2VmZl9BKQpkYXRhOCAweDNGRjAwMDAwMDAwMDAwMDAgLy8gQTEgID0gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAKZGF0YTggMHgzRkQ1NTU1NTU2QkNFNzU4IC8vIEEzICA9IDMuMzMzMzMzMzQ2NDE0NDI2NDE2MDZlLTAxCmRhdGE4IDB4M0ZDMTExMTA1QzJEQUU0OCAvLyBBNSAgPSAxLjMzMzMzMjQ5MTAwNjg5MDk5MTc1ZS0wMQpkYXRhOCAweDNGQUJBMUY4NzYzNDEwNjAgLy8gQTcgID0gNS4zOTcwMTEyMjU2MTY3MzIyOTczOWUtMDIKZGF0YTggMHgzRjk2NUZCODZEMTJBMzhEIC8vIEE5ICA9IDIuMTg0OTUxOTQwMjc2NzA3MTk3NTBlLTAyCmRhdGE4IDB4M0Y4MjY1RjYyNDE1RjlENiAvLyBBMTEgPSA4Ljk4MzUzODYwNDk3NzE3NDM5NDY1ZS0wMwpkYXRhOCAweDNGNjlFM0FFNjRDQ0Y1OEQgLy8gQTEzID0gMy4xNjAzMjQ2ODEwODkxMjc0NjM0MmUtMDMKZGF0YTggMHgzRjYzOTIwRDA5RDBFNkY2IC8vIEExNSA9IDIuMzg4OTc4NDQ4NDA1NTcyMzUzMzFlLTAzCkxPQ0FMX09CSkVDVF9FTkQoY29lZmZfQSkKCkxPQ0FMX09CSkVDVF9TVEFSVChjb2VmZl9CKQpkYXRhOCAweEM5MEZEQUEyMjE2OEMyMzUsIDB4M0ZGRiAvLyBwaS8yCmRhdGE4IDB4M0ZENTU1NTU1NTUzNThEQiAvLyBCMSAgPSAzLjMzMzMzMzMzMzI2MTA3NDI2NTgzZS0wMQpkYXRhOCAweDNGOTZDMTZDMjUyRjY0M0YgLy8gQjMgID0gMi4yMjIyMjIzMDYyMTMzNjEyOTIzOWUtMDIKZGF0YTggMHgzRjYxNTY2MjQzQUIzQzYwIC8vIEI1ICA9IDIuMTE2Mzg2MzM5Njg2MDY4OTY3ODVlLTAzCmRhdGE4IDB4M0YyQkMxMTY5QkQ0NDM4QiAvLyBCNyAgPSAyLjExNzQ4MTMyNTY0NTUxMDk0MzkxZS0wNApkYXRhOCAweDNFRjYxMUI0Q0VBMDU2QTEgLy8gQjkgID0gMi4xMDQ2Nzk1OTg2MDk5MDIwMDk0MmUtMDUKZGF0YTggMHgzRUM2MDBGOUUzMjE5NEJGIC8vIEIxMSA9IDIuNjIzMDU4OTEyMzQyNzQxODY2MDhlLTA2CmRhdGE4IDB4QkY0MkJBN0JDQzE3NzYxNiAvLyBBMTcgPS01LjcxNTQ2OTgxNjg1MzI0ODc3MjA1ZS0wNApkYXRhOCAweDNGNEYyNjE0QkM2RDNCQjggLy8gQTE5ID0gOS41MDU4NDUzMDg0OTgzMjc4MjU0MmUtMDQKTE9DQUxfT0JKRUNUX0VORChjb2VmZl9CKQoKCi5zZWN0aW9uIC50ZXh0CgpMT0NBTF9MSUJNX0VOVFJZKGNvdGYpCgp7IC5tbHgKICAgICAgZ2V0Zi5leHAgIHJFeHAgICAgICAgID0gZjggICAgICAgICAgICAgICAgICAgIC8vICoqKioqIEdldCAyiDE3ICogcyArIEUKICAgICAgbW92bCAgICAgIHJTaWdSY3BQaWJ5Mj0gMHhBMkY5ODM2RTRFNDQxNTJBICAgIC8vIHNpZ25pZmljYW5kIG9mIDIvUGkKfQp7IC5tbHgKICAgICAgYWRkbCAgICAgIHJDb2VmZkEgICAgID0gQGx0b2ZmKGNvZWZmX0EpLCBncAogICAgICBtb3ZsICAgICAgclNjUnNoZiAgICAgPSAweDQ3ZTgwMDAwMDAwMDAwMDAgICAgLy8gMS41KjJeKDYzKzYzKzEpCn0KOzsKCnsgLm1maQogICAgICBhbGxvYyAgICAgcjMyICAgICAgICAgPSBhci5wZnMsIDAsIDQsIDQsIDAKICAgICAgZmNsYXNzLm0gIHA5LCBwMCAgICAgID0gZjgsIDB4YzMgICAgICAgICAgICAgIC8vIFRlc3QgZm9yIHg9bmFuCiAgICAgIGNtcC5lcSAgICBwMTEsIHAxMCAgICA9IHIwLCByMCAgICAgICAgICAgICAgICAvLyBpZiBwMTE9MSB3ZSBjb21wdXRlIGNvdGYKfQp7IC5taWIKICAgICAgbGQ4ICAgICAgIHJDb2VmZkEgICAgID0gW3JDb2VmZkFdCiAgICAgIG1vdiAgICAgICByRXhwQ3V0ICAgICA9IDB4MTAwMDkgICAgICAgICAgICAgICAvLyBjdXRvZmYgZm9yIGV4cG9uZW50CiAgICAgIGJyLmNvbmQuc3B0ayBDb21tb25fUGF0aAp9Cjs7CgpMT0NBTF9MSUJNX0VORChjb3RmKQoKCkdMT0JBTF9JRUVFNzU0X0VOVFJZKHRhbmYpCgp7IC5tbHgKICAgICAgZ2V0Zi5leHAgIHJFeHAgICAgICAgID0gZjggICAgICAgICAgICAgICAgICAgIC8vICoqKioqIEdldCAyiDE3ICogcyArIEUKICAgICAgbW92bCAgICAgIHJTaWdSY3BQaWJ5Mj0gMHhBMkY5ODM2RTRFNDQxNTJBICAgIC8vIHNpZ25pZmljYW5kIG9mIDIvUGkKfQp7IC5tbHgKICAgICAgYWRkbCAgICAgIHJDb2VmZkEgICAgID0gQGx0b2ZmKGNvZWZmX0EpLCBncAogICAgICBtb3ZsICAgICAgclNjUnNoZiAgICAgPSAweDQ3ZTgwMDAwMDAwMDAwMDAgICAgLy8gMS41KjJeKDYzKzYzKzEpCn0KOzsKCnsgLm1maQogICAgICBhbGxvYyAgICAgcjMyICAgICAgICAgPSBhci5wZnMsIDAsIDQsIDQsIDAKICAgICAgZmNsYXNzLm0gIHA5LCBwMCAgICAgID0gZjgsIDB4YzMgICAgICAgICAgICAgIC8vIFRlc3QgZm9yIHg9bmFuCiAgICAgIGNtcC5lcSAgICBwMTAsIHAxMSAgICA9IHIwLCByMCAgICAgICAgICAgICAgICAvLyBpZiBwMTA9MSB3ZSBjb21wdXRlIHRhbmRmCn0KeyAubWliCiAgICAgIGxkOCAgICAgICByQ29lZmZBICAgICA9IFtyQ29lZmZBXQogICAgICBtb3YgICAgICAgckV4cEN1dCAgICAgPSAweDEwMDA5ICAgICAgICAgICAgICAgLy8gY3V0b2ZmIGZvciBleHBvbmVudAogICAgICBub3AuYiAgICAgMAp9Cjs7CgovLyBCZWxvdyBpcyBjb21tb24gcGF0aCBmb3IgYm90aCB0YW5kZiBhbmQgY290ZGYKQ29tbW9uX1BhdGg6CnsgLm1maQogICAgICBzZXRmLnNpZyAgZlNjUmNwUGlieTIgPSByU2lnUmNwUGlieTIgICAgICAgICAgLy8gMl4oNjMrMSkqKDIvUGkpCiAgICAgIGZjbGFzcy5tICBwOCwgcDAgICAgICA9IGY4LCAweDIzICAgICAgICAgICAgICAvLyBUZXN0IGZvciB4PWluZgogICAgICBtb3YgICAgICAgclNpZ25NYXNrICAgPSAweDFmZmZmICAgICAgICAgICAgICAgLy8gbWFzayBmb3Igc2lnbiBiaXQKfQp7IC5tbHgKICAgICAgc2V0Zi5kICAgIGZTY1JzaGYgICAgID0gclNjUnNoZiAgICAgICAgICAgICAgIC8vIDEuNSoyXig2Mys2MysxKQogICAgICBtb3ZsICAgICAgclJzaGYgICAgICAgPSAweDQzZTgwMDAwMDAwMDAwMDAgICAgLy8gMS41IDJeNjMgZm9yIHJpZ2h0IHNoaWZ0Cn0KOzsKCnsgLm1maQogICAgICBhbmQgICAgICAgclNpZ25NYXNrICAgPSByU2lnbk1hc2ssIHJFeHAgICAgICAgLy8gY2xlYXIgc2lnbiBiaXQKKHAxMCkgZmNsYXNzLm0udW5jIHA3LCBwMCAgID0gZjgsIDB4MDcgICAgICAgICAgICAgIC8vIFRlc3QgZm9yIHg9MCAoZm9yIHRhbmYpCiAgICAgIG1vdiAgICAgICByU2NGY3RyRXhwICA9IDB4ZmZmZi02NCAgICAgICAgICAgICAvLyBleHAgb2Ygc2NhbGluZyBmYWN0b3IKfQp7IC5tZmIKICAgICAgYWRkcyAgICAgIHJDb2VmZkIgICAgID0gY29lZmZfQiAtIGNvZWZmX0EsIHJDb2VmZkEKKHA5KSAgZm1hLnMuczAgIGY4ICAgICAgICAgID0gZjgsIGYxLCBmOCAgICAgICAgICAgIC8vIFNldCBxbmFuIGlmIHg9bmFuCihwOSkgIGJyLnJldC5zcG50IGIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGl0IGZvciB4PW5hbgp9Cjs7Cgp7IC5tZmkKICAgICAgY21wLmdlICAgIHA2LCBwMCAgICAgID0gclNpZ25NYXNrLCByRXhwQ3V0ICAgIC8vIHA2ID0gKEUgPT4gMHgxMDAwOSkKKHA4KSAgZnJjcGEuczAgIGY4LCBwMCAgICAgID0gZjAsIGYwICAgICAgICAgICAgICAgIC8vIFNldCBxbmFuIGluZGVmIGlmIHg9aW5mCiAgICAgIG1vdiBHUl9QYXJhbWV0ZXJfVGFnICA9IDIyNyAgICAgICAgICAgICAgICAgICAvLyAoY290ZikKfQp7IC5tYmIKICAgICAgbGRmZSAgICAgIGZQaWJ5MiAgICAgID0gW3JDb2VmZkJdLCAxNgoocDgpICBici5yZXQuc3BudCBiMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhpdCBmb3IgeD1pbmYKKHA2KSAgYnIuY29uZC5zcG50IEh1Z2VfQXJndW1lbnQgICAgICAgICAgICAgICAgICAgIC8vIEJyYW5jaCBpZiB8eHw+PTJeMTAKfQo7OwoKeyAubWZpCiAgICAgIG5vcC5tICAgICAwCihwMTEpIGZjbGFzcy5tLnVuYyBwNiwgcDAgICA9IGY4LCAweDA3ICAgICAgICAgICAgICAvLyBUZXN0IGZvciB4PTAgKGZvciBjb3RmKQogICAgICBub3AuaSAgICAgMAp9CnsgLm1mYgogICAgICBub3AubSAgICAgMAogICAgICBmbm9ybS5zMCAgZk5vcm1BcmcgICAgPSBmOAoocDcpICBici5yZXQuc3BudCBiMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhpdCBmb3IgeD0wIChmb3IgdGFuZikKfQo7OwoKeyAubW1mCiAgICAgIGxkZnBkICAgICBmQTAxLCBmQTAzICA9IFtyQ29lZmZBXSwgMTYKICAgICAgbGRmcGQgICAgIGZCMDEsIGZCMDMgID0gW3JDb2VmZkJdLCAxNgogICAgICBmbWVyZ2UucyAgZjEwICAgICAgICAgPSBmOCwgZjggICAgICAgICAgICAgICAgLy8gU2F2ZSBpbnB1dCBmb3IgZXJyb3IgY2FsbAp9Cjs7Cgp7IC5tbWYKICAgICAgc2V0Zi5leHAgIGZTY0ZjdHIgICAgID0gclNjRmN0ckV4cCAgICAgICAgICAgIC8vIGdldCBhcyByZWFsCiAgICAgIHNldGYuZCAgICBmUnNoZiAgICAgICA9IHJSc2hmICAgICAgICAgICAgICAgICAvLyBnZXQgcmlnaHQgc2hpZnRlciBhcyByZWFsCihwNikgIGZyY3BhLnMwICBmOCwgcDAgICAgICA9IGYxLCBmOCAgICAgICAgICAgICAgICAvLyBjb3RmKCstMCkgPSArLUluZgp9Cjs7Cgp7IC5tbWIKICAgICAgbGRmcGQgICAgIGZBMDUsIGZBMDcgID0gW3JDb2VmZkFdLCAxNgogICAgICBsZGZwZCAgICAgZkIwNSwgZkIwNyAgPSBbckNvZWZmQl0sIDE2CihwNikgIGJyLmNvbmQuc3BudCBfX2xpYm1fZXJyb3JfcmVnaW9uICAgIC8vIGNhbGwgZXJyb3Igc3VwcG9ydCBpZiBjb3RmKCstMCkKfQo7OwoKeyAubW1pCiAgICAgIGxkZnBkICAgICBmQTA5LCBmQTExICA9IFtyQ29lZmZBXSwgMTYKICAgICAgbGRmcGQgICAgIGZCMDksIGZCMTEgID0gW3JDb2VmZkJdLCAxNgogICAgICBub3AuaSAgICAgMAp9Cjs7Cgp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKICAgICAgZm1hLnMxICAgIGZTaGlmdGVkTiA9IGZOb3JtQXJnLGZTY1JjcFBpYnkyLGZTY1JzaGYgLy8geCoyXjcwKigyL1BpKStTY1JzaGYKICAgICAgbm9wLmkgICAgIDAKfQo7OwoKeyAubWZpCiAgICAgIG5vcC5tICAgICAwCiAgICAgIGZtcy5zMSAgICBmTiAgICAgICAgICA9IGZTaGlmdGVkTiwgZlNjRmN0ciwgZlJzaGYgLy8gTiA9IFkqMl4oLTcwKSAtIFJzaGYKICAgICAgbm9wLmkgICAgIDAKfQo7OwoKLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCnsgLm1maQogICAgICBnZXRmLnNpZyAgckludE4gICAgICAgPSBmU2hpZnRlZE4gICAgICAgICAgICAgLy8gZ2V0IE4gYXMgaW50ZWdlcgoocDEwKSBmbm1hLnMxICAgZlIgICAgICAgICAgPSBmTiwgZlBpYnkyLCBmTm9ybUFyZyAgLy8gUiA9IHggLSAoUGkvMikqTiAodGFuZikKICAgICAgbm9wLmkgICAgIDAKfQp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKKHAxMSkgZm1zLnMxICAgIGZSICAgICAgICAgID0gZk4sIGZQaWJ5MiwgZk5vcm1BcmcgIC8vIFIgPSAoUGkvMikqTiAtIHggKGNvdGYpCiAgICAgIG5vcC5pICAgICAwCn0KOzsKCnsgLm1taQogICAgICBsZGZwZCAgICAgZkExMywgZkExNSAgPSBbckNvZWZmQV0sIDE2CiAgICAgIGxkZnBkICAgICBmQTE3LCBmQTE5ICA9IFtyQ29lZmZCXSwgMTYKICAgICAgbm9wLmkgICAgIDAKfQo7OwoKUmV0dXJuX0Zyb21fSHVnZXM6CnsgLm1maQogICAgICBub3AubSAgICAgMAogICAgICBmbWEuczEgICAgZlJwMiAgICAgICAgPSBmUiwgZlIsIGYwICAgICAgICAgICAgLy8gUl4yCihwMTEpIGFkZCAgICAgICBySW50TiAgICAgICA9IDB4MSwgckludE4gICAgICAgICAgICAvLyBOID0gTiArIDEgKGNvdGYpCn0KOzsKCnsgLm1maQogICAgICBub3AubSAgICAgMAogICAgICBmcmNwYS5zMSAgZlkwLCBwMCAgICAgPSBmMSwgZlIgICAgICAgICAgICAgICAgLy8gWTAgfiAxL1IKICAgICAgdGJpdC56ICAgIHA4LCBwOSAgICAgID0gckludE4sIDAgICAgICAgICAgICAgIC8vIHA4PTEgaWYgTiBpcyBldmVuCn0KOzsKCi8vIEJlbG93IGFyZSBtaXhlZCBwb2x5bm9taWFsIGNhbGN1bGF0aW9ucyAobWl4ZWQgZm9yIGV2ZW4gYW5kIG9kZCBOKQp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKKHA5KSAgZm1hLnMxICAgIGZCMDNfMDEgICAgID0gZlJwMiwgZkIwMywgZkIwMSAgICAgIC8vIFJeMipCMyArIEIxCiAgICAgIG5vcC5pICAgICAwCn0KeyAubWZpCiAgICAgIG5vcC5tICAgICAwCiAgICAgIGZtYS5zMSAgICBmUnA0ICAgICAgICA9IGZScDIsIGZScDIsIGYwICAgICAgICAvLyBSXjQKICAgICAgbm9wLmkgICAgIDAKfQo7OwoKeyAubWZpCiAgICAgIG5vcC5tICAgICAwCihwOCkgIGZtYS5zMSAgICBmQTE1XzEzICAgICA9IGZScDIsIGZBMTUsIGZBMTMgICAgICAvLyBSXjIqQTE1ICsgQTEzCiAgICAgIG5vcC5pICAgICAwCn0KeyAubWZpCiAgICAgIG5vcC5tICAgICAwCihwOCkgIGZtYS5zMSAgICBmQTE5XzE3ICAgICA9IGZScDIsIGZBMTksIGZBMTcgICAgICAvLyBSXjIqQTE5ICsgQTE3CiAgICAgIG5vcC5pICAgICAwCn0KOzsKCnsgLm1maQogICAgICBub3AubSAgICAgMAoocDgpICBmbWEuczEgICAgZkEwN18wNSAgICAgPSBmUnAyLCBmQTA3LCBmQTA1ICAgICAgLy8gUl4yKkE3ICsgQTUKICAgICAgbm9wLmkgICAgIDAKfQp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKKHA4KSAgZm1hLnMxICAgIGZBMTFfMDkgICAgID0gZlJwMiwgZkExMSwgZkEwOSAgICAgIC8vIFJeMipBMTEgKyBBOQogICAgICBub3AuaSAgICAgMAp9Cjs7Cgp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKKHA5KSAgZm1hLnMxICAgIGZCMDdfMDUgICAgID0gZlJwMiwgZkIwNywgZkIwNSAgICAgIC8vIFJeMipCNyArIEI1CiAgICAgIG5vcC5pICAgICAwCn0KeyAubWZpCiAgICAgIG5vcC5tICAgICAwCihwOSkgIGZtYS5zMSAgICBmQjExXzA5ICAgICA9IGZScDIsIGZCMTEsIGZCMDkgICAgICAvLyBSXjIqQjExICsgQjkKICAgICAgbm9wLmkgICAgIDAKfQo7OwoKeyAubWZpCiAgICAgIG5vcC5tICAgICAwCihwOSkgIGZubWEuczEgICBmRCAgICAgICAgICA9IGZSLCBmWTAsIGYxICAgICAgICAgICAvLyBEID0gMSAtIFIqWTAKICAgICAgbm9wLmkgICAgIDAKfQp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKKHA4KSAgZm1hLnMxICAgIGZBMDNfMDEgICAgID0gZlJwMiwgZkEwMywgZkEwMSAgICAgIC8vIFJeMipBMyArIEExCiAgICAgIG5vcC5pICAgICAwCn0KOzsKCnsgLm1maQogICAgICBub3AubSAgICAgMAogICAgICBmbWEuczEgICAgZlJwOCAgICAgICAgPSBmUnA0LCBmUnA0LCBmMCAgICAgICAgLy8gUl44CiAgICAgIG5vcC5pICAgICAwCn0KeyAubWZpCiAgICAgIG5vcC5tICAgICAwCiAgICAgIGZtYS5zMSAgICBmUnA1ICAgICAgICA9IGZSLCBmUnA0LCBmMCAgICAgICAgICAvLyBSXjUKICAgICAgbm9wLmkgICAgIDAKfQo7OwoKeyAubWZpCiAgICAgIG5vcC5tICAgICAwCihwOCkgIGZtYS5zMSAgICBmQTExXzA1ICAgICA9IGZScDQsIGZBMTFfMDksIGZBMDdfMDUgLy8gUl40KihSXjIqQTExICsgQTkpICsgLi4uCiAgICAgIG5vcC5pICAgICAwCn0KeyAubWZpCiAgICAgIG5vcC5tICAgICAwCihwOCkgIGZtYS5zMSAgICBmQTE5XzEzICAgICA9IGZScDQsIGZBMTlfMTcsIGZBMTVfMTMgLy8gUl40KihSXjIqQTE5ICsgQTE3KSArIC4uCiAgICAgIG5vcC5pICAgICAwCn0KOzsKCnsgLm1maQogICAgICBub3AubSAgICAgMAoocDkpICBmbWEuczEgICAgZkIxMV8wNSAgICAgPSBmUnA0LCBmQjExXzA5LCBmQjA3XzA1IC8vIFJeNCooUl4yKkIxMSArIEI5KSArIC4uLgogICAgICBub3AuaSAgICAgMAp9CnsgLm1maQogICAgICBub3AubSAgICAgMAoocDkpICBmbWEuczEgICAgZlJieUIwM18wMSAgPSBmUiwgZkIwM18wMSwgZjAgICAgICAgLy8gUiooUl4yKkIzICsgQjEpCiAgICAgIG5vcC5pICAgICAwCn0KOzsKCnsgLm1maQogICAgICBub3AubSAgICAgMAoocDkpICBmbWEuczEgICAgZlkxICAgICAgICAgPSBmWTAsIGZELCBmWTAgICAgICAgICAgLy8gWTEgPSBZMCpEICsgWTAKICAgICAgbm9wLmkgICAgIDAKfQp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKKHA5KSAgZm1hLnMxICAgIGZEcDIgICAgICAgID0gZkQsIGZELCBmMCAgICAgICAgICAgIC8vIEReMgogICAgICBub3AuaSAgICAgMAp9Cjs7Cgp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKICAgLy8gUl44KihSXjYqQTE5ICsgUl40KkExNyArIFJeMipBMTUgKyBBMTMpICsgUl42KkExMSArIFJeNCpBOSArIFJeMipBNyArIEE1CihwOCkgIGZtYS5kLnMxICBmQTE5XzA1ICAgICA9IGZScDgsIGZBMTlfMTMsIGZBMTFfMDUKICAgICAgbm9wLmkgICAgIDAKfQp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKKHA4KSAgZm1hLmQuczEgIGZSYnlBMDNfMDEgID0gZlIsIGZBMDNfMDEsIGYwICAgICAgIC8vIFIqKFJeMipBMyArIEExKQogICAgICBub3AuaSAgICAgMAp9Cjs7Cgp7IC5tZmkKICAgICAgbm9wLm0gICAgIDAKKHA5KSAgZm1hLmQuczEgIGZJbnZSICAgICAgID0gZlkxLCBmRHAyLCBmWTEgICAgICAgIC8vIDEvUiA9IFkxKkReMiArIFkxCiAgICAgIG5vcC5pICAgICAwCn0KeyAubWZpCiAgICAgIG5vcC5tICAgICAwCiAgIC8vIFJeNSooUl42KkIxMSArIFJeNCpCOSArIFJeMipCNyArIEI1KSArIFJeMypCMyArIFIqQjEKKHA5KSAgZm1hLmQuczEgIGZSYnlCMTFfMDEgID0gZlJwNSwgZkIxMV8wNSwgZlJieUIwM18wMQogICAgICBub3AuaSAgICAgMAp9Cjs7CgoucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CnsgLm1maQogICAgICBub3AubSAgICAgMAogICAvLyBSZXN1bHQgPSBSXjUqKFJeMTQqQTE5ICsgUl4xMipBMTcgKyBSXjEwKkExNSArIC4uLikgKyBSXjMqQTMgKyBSKkExCihwOCkgIGZtYS5zLnMwICBmOCAgICAgICAgICA9IGZScDUsIGZBMTlfMDUsIGZSYnlBMDNfMDEKICAgICAgbm9wLmkgMAp9CnsgLm1mYgogICAgICBub3AubSAgICAgMAogICAvLyBSZXN1bHQgPSAtMS9SICsgUl4xMSpCMTEgKyBSXjkqQjkgKyBSXjcqQjcgKyBSXjUqQjUgKyBSXjMqQjMgKyBSKkIxCihwOSkgIGZubWEucy5zMCBmOCAgICAgICAgICA9IGYxLCBmSW52UiwgZlJieUIxMV8wMQogICAgICBici5yZXQuc3B0ayBiMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhpdCBmb3IgbWFpbiBwYXRoCn0KOzsKCkdMT0JBTF9JRUVFNzU0X0VORCh0YW5mKQoKCkxPQ0FMX0xJQk1fRU5UUlkoX19saWJtX2NhbGxvdXQpCkh1Z2VfQXJndW1lbnQ6Ci5wcm9sb2d1ZQoKeyAubWZpCiAgICAgIG5vcC5tIDAKICAgICAgZm1lcmdlLnMgZjkgPSBmMCxmMAouc2F2ZSBhci5wZnMsR1JfU0FWRV9QRlMKICAgICAgbW92ICBHUl9TQVZFX1BGUz1hci5wZnMKfQo7OwoKeyAubWZpCiAgICAgIG1vdiBHUl9TQVZFX0dQPWdwCiAgICAgIG5vcC5mIDAKLnNhdmUgYjAsIEdSX1NBVkVfQjAKICAgICAgbW92IEdSX1NBVkVfQjA9YjAKfQoKLmJvZHkKeyAubW1iCiAgICAgIG5vcC5tIDk5OQogICAgICBub3AubSA5OTkKKHAxMCkgYnIuY29uZC5zcHRrLm1hbnkgIGNhbGxfdGFubCA7Owp9CgovLyBIZXJlIGlmIHdlIHNob3VsZCBjYWxsIGNvdGwgKHAxMD0wLCBwMTE9MSkKeyAubW1iCiAgICAgIG5vcC5tIDk5OQogICAgICBub3AubSA5OTkKICAgICAgYnIuY2FsbC5zcHRrLm1hbnkgIGIwPV9fbGlibV9jb3RsIyA7Owp9Cgp7IC5tZmkKICAgICAgbW92IGdwICAgICAgICA9IEdSX1NBVkVfR1AKICAgICAgZm5vcm0ucy5zMCBmOCA9IGY4CiAgICAgIG1vdiBiMCAgICAgICAgPSBHUl9TQVZFX0IwCn0KOzsKCnsgLm1pYgogICAgICBub3AubSA5OTkKICAgICAgbW92IGFyLnBmcyAgICA9IEdSX1NBVkVfUEZTCiAgICAgIGJyLnJldC5zcHRrICAgICBiMAo7Owp9CgovLyBIZXJlIGlmIHdlIHNob3VsZCBjYWxsIHRhbmwgKHAxMD0xLCBwMTE9MCkKY2FsbF90YW5sOgp7IC5tbWIKICAgICAgbm9wLm0gOTk5CiAgICAgIG5vcC5tIDk5OQogICAgICBici5jYWxsLnNwdGsubWFueSAgYjA9X19saWJtX3RhbmwjIDs7Cn0KCnsgLm1maQogICAgICBtb3YgZ3AgICAgICAgID0gR1JfU0FWRV9HUAogICAgICBmbm9ybS5zLnMwIGY4ID0gZjgKICAgICAgbW92IGIwICAgICAgICA9IEdSX1NBVkVfQjAKfQo7OwoKeyAubWliCiAgICAgIG5vcC5tIDk5OQogICAgICBtb3YgYXIucGZzICAgID0gR1JfU0FWRV9QRlMKICAgICAgYnIucmV0LnNwdGsgICAgIGIwCjs7Cn0KCkxPQ0FMX0xJQk1fRU5EKF9fbGlibV9jYWxsb3V0KQoKLnR5cGUgX19saWJtX3RhbmwjLEBmdW5jdGlvbgouZ2xvYmFsIF9fbGlibV90YW5sIwoudHlwZSBfX2xpYm1fY290bCMsQGZ1bmN0aW9uCi5nbG9iYWwgX19saWJtX2NvdGwjCgoKTE9DQUxfTElCTV9FTlRSWShfX2xpYm1fZXJyb3JfcmVnaW9uKQoucHJvbG9ndWUKCi8vICgxKQp7IC5tZmkKICAgICAgYWRkICAgICAgICAgICBHUl9QYXJhbWV0ZXJfWT0tMzIsc3AgICAgICAgIC8vIFBhcmFtZXRlciAyIHZhbHVlCiAgICAgIG5vcC5mICAgICAgICAgMAouc2F2ZSAgIGFyLnBmcyxHUl9TQVZFX1BGUwogICAgICBtb3YgICAgICAgICAgIEdSX1NBVkVfUEZTPWFyLnBmcyAgICAgICAgICAgLy8gU2F2ZSBhci5wZnMKfQp7IC5tZmkKLmZmcmFtZSA2NAogICAgICBhZGQgc3A9LTY0LHNwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBzdGFjawogICAgICBub3AuZiAwCiAgICAgIG1vdiBHUl9TQVZFX0dQPWdwICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIGdwCn07OwoKLy8gKDIpCnsgLm1taQogICAgICBzdGZzIFtHUl9QYXJhbWV0ZXJfWV0gPSBmMSwxNiAgICAgICAgICAgICAgLy8gU1RPUkUgUGFyYW1ldGVyIDIgb24gc3RhY2sKICAgICAgYWRkIEdSX1BhcmFtZXRlcl9YID0gMTYsc3AgICAgICAgICAgICAgICAgIC8vIFBhcmFtZXRlciAxIGFkZHJlc3MKLnNhdmUgICBiMCwgR1JfU0FWRV9CMAogICAgICBtb3YgR1JfU0FWRV9CMD1iMCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSBiMAp9OzsKCi5ib2R5Ci8vICgzKQp7IC5taWIKICAgICAgc3RmcyBbR1JfUGFyYW1ldGVyX1hdID0gZjEwICAgICAgICAgICAgICAgIC8vIFNUT1JFIFBhcmFtZXRlciAxIG9uIHN0YWNrCiAgICAgIGFkZCAgIEdSX1BhcmFtZXRlcl9SRVNVTFQgPSAwLEdSX1BhcmFtZXRlcl9ZICAvLyBQYXJhbWV0ZXIgMyBhZGRyZXNzCiAgICAgIG5vcC5iIDAKfQp7IC5taWIKICAgICAgc3RmcyBbR1JfUGFyYW1ldGVyX1ldID0gZjggICAgICAgICAgICAgICAgIC8vIFNUT1JFIFBhcmFtZXRlciAzIG9uIHN0YWNrCiAgICAgIGFkZCAgIEdSX1BhcmFtZXRlcl9ZID0gLTE2LEdSX1BhcmFtZXRlcl9ZCiAgICAgIGJyLmNhbGwuc3B0ayBiMD1fX2xpYm1fZXJyb3Jfc3VwcG9ydCMgICAgICAvLyBDYWxsIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uCn07Owp7IC5tbWkKICAgICAgbm9wLm0gMAogICAgICBub3AubSAwCiAgICAgIGFkZCAgIEdSX1BhcmFtZXRlcl9SRVNVTFQgPSA0OCxzcAp9OzsKCi8vICg0KQp7IC5tbWkKICAgICAgbGRmcyAgZjggPSBbR1JfUGFyYW1ldGVyX1JFU1VMVF0gICAgICAgICAgIC8vIEdldCByZXR1cm4gcmVzdWx0IG9mZiBzdGFjawoucmVzdG9yZSBzcAogICAgICBhZGQgICBzcCA9IDY0LHNwICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBzdGFjayBwb2ludGVyCiAgICAgIG1vdiAgIGIwID0gR1JfU0FWRV9CMCAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHJldHVybiBhZGRyZXNzCn07Owp7IC5taWIKICAgICAgbW92ICAgZ3AgPSBHUl9TQVZFX0dQICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgZ3AKICAgICAgbW92ICAgYXIucGZzID0gR1JfU0FWRV9QRlMgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgYXIucGZzCiAgICAgIGJyLnJldC5zcHRrICAgICBiMCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4KfTs7CgpMT0NBTF9MSUJNX0VORChfX2xpYm1fZXJyb3JfcmVnaW9uKQoKLnR5cGUgICBfX2xpYm1fZXJyb3Jfc3VwcG9ydCMsQGZ1bmN0aW9uCi5nbG9iYWwgX19saWJtX2Vycm9yX3N1cHBvcnQjCgo=