REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 104.86 KB
Close
//proc/thread-self/root/opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/linalg/__pycache__/linalg.cpython-311.pyc
Text
Base64
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YWxnLgoKTm90ZXMKLS0tLS0KVGhpcyBtb2R1bGUgaXMgYSBsaXRlIHZlcnNpb24gb2YgdGhlIGxpbmFsZy5weSBtb2R1bGUgaW4gU2NpUHkgd2hpY2gKY29udGFpbnMgaGlnaC1sZXZlbCBQeXRob24gaW50ZXJmYWNlIHRvIHRoZSBMQVBBQ0sgbGlicmFyeS4gIFRoZSBsaXRlCnZlcnNpb24gb25seSBhY2Nlc3NlcyB0aGUgZm9sbG93aW5nIExBUEFDSyBmdW5jdGlvbnM6IGRnZXN2LCB6Z2VzdiwKZGdlZXYsIHpnZWV2LCBkZ2VzZGQsIHpnZXNkZCwgZGdlbHNkLCB6Z2Vsc2QsIGRzeWV2ZCwgemhlZXZkLCBkZ2V0cmYsCnpnZXRyZiwgZHBvdHJmLCB6cG90cmYsIGRnZXFyZiwgemdlcXJmLCB6dW5ncXIsIGRvcmdxci4KKRXaDG1hdHJpeF9wb3dlctoFc29sdmXaC3RlbnNvcnNvbHZl2gl0ZW5zb3JpbnbaA2ludtoIY2hvbGVza3naB2VpZ3ZhbHPaCGVpZ3ZhbHNo2gRwaW522gdzbG9nZGV02gNkZXTaA3N2ZNoDZWln2gRlaWdo2gVsc3RzcdoEbm9ybdoCcXLaBGNvbmTaC21hdHJpeF9yYW5r2gtMaW5BbGdFcnJvctoJbXVsdGlfZG906QAAAABOKQLaCk5hbWVkVHVwbGXaA0FueekCAAAAKQHaCnNldF9tb2R1bGUpKtoFYXJyYXnaB2FzYXJyYXnaBXplcm9z2gVlbXB0edoKZW1wdHlfbGlrZdoEaW50Y9oGc2luZ2xl2gZkb3VibGXaB2NzaW5nbGXaB2Nkb3VibGXaB2luZXhhY3TaD2NvbXBsZXhmbG9hdGluZ9oHbmV3YXhpc9oDYWxs2gNJbmbaA2RvdNoDYWRk2ghtdWx0aXBsedoEc3FydNoDc3Vt2ghpc2Zpbml0ZdoFZmluZm/aCGVycnN0YXRl2glnZXRlcnJvYmraCG1vdmVheGlz2gRhbWlu2gRhbWF42gRwcm9k2gNhYnPaCmF0bGVhc3RfMmTaBGludHDaCmFzYW55YXJyYXnaB29iamVjdF/aBm1hdG11bNoIc3dhcGF4ZXPaBmRpdmlkZdoNY291bnRfbm9uemVyb9oFaXNuYW7aBHNpZ27aB2Fy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CiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogKC4uLiwgTSwgTSkgYXJyYXlfbGlrZQogICAgICAgIENvZWZmaWNpZW50IG1hdHJpeC4KICAgIGIgOiB7KC4uLiwgTSwpLCAoLi4uLCBNLCBLKX0sIGFycmF5X2xpa2UKICAgICAgICBPcmRpbmF0ZSBvciAiZGVwZW5kZW50IHZhcmlhYmxlIiB2YWx1ZXMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgeCA6IHsoLi4uLCBNLCksICguLi4sIE0sIEspfSBuZGFycmF5CiAgICAgICAgU29sdXRpb24gdG8gdGhlIHN5c3RlbSBhIHggPSBiLiAgUmV0dXJuZWQgc2hhcGUgaXMgaWRlbnRpY2FsIHRvIGBiYC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgICBJZiBgYWAgaXMgc2luZ3VsYXIgb3Igbm90IHNxdWFyZS4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIHNjaXB5LmxpbmFsZy5zb2x2ZSA6IFNpbWlsYXIgZnVuY3Rpb24gaW4gU2NpUHkuCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS44LjAKCiAgICBCcm9hZGNhc3RpbmcgcnVsZXMgYXBwbHksIHNlZSB0aGUgYG51bXB5LmxpbmFsZ2AgZG9jdW1lbnRhdGlvbiBmb3IKICAgIGRldGFpbHMuCgogICAgVGhlIHNvbHV0aW9ucyBhcmUgY29tcHV0ZWQgdXNpbmcgTEFQQUNLIHJvdXRpbmUgYGBfZ2VzdmBgLgoKICAgIGBhYCBtdXN0IGJlIHNxdWFyZSBhbmQgb2YgZnVsbC1yYW5rLCBpLmUuLCBhbGwgcm93cyAob3IsIGVxdWl2YWxlbnRseSwKICAgIGNvbHVtbnMpIG11c3QgYmUgbGluZWFybHkgaW5kZXBlbmRlbnQ7IGlmIGVpdGhlciBpcyBub3QgdHJ1ZSwgdXNlCiAgICBgbHN0c3FgIGZvciB0aGUgbGVhc3Qtc3F1YXJlcyBiZXN0ICJzb2x1dGlvbiIgb2YgdGhlCiAgICBzeXN0ZW0v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LnNoYXBlW2luZDpdKWBgLgogICAgaW5kIDogaW50LCBvcHRpb25hbAogICAgICAgIE51bWJlciBvZiBmaXJzdCBpbmRpY2VzIHRoYXQgYXJlIGludm9sdmVkIGluIHRoZSBpbnZlcnNlIHN1bS4KICAgICAgICBNdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgZGVmYXVsdCBpcyAyLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGIgOiBuZGFycmF5CiAgICAgICAgYGFgJ3MgdGVuc29yZG90IGludmVyc2UsIHNoYXBlIGBgYS5zaGFwZVtpbmQ6XSArIGEuc2hhcGVbOmluZF1gYC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgICBJZiBgYWAgaXMgc2luZ3VsYXIgb3Igbm90ICdzcXVhcmUnIChpbiB0aGUgYWJvdmUgc2Vuc2UpLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbnVtcHkudGVuc29yZG90LCB0ZW5zb3Jzb2x2ZQoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGEgPSBucC5leWUoNCo2KQogICAgPj4+IGEuc2hhcGUgPSAoNCwgNiwgOCwgMykKICAgID4+PiBhaW52ID0gbnAubGluYWxnLnRlbnNvcmludihhLCBpbmQ9MikKICAgID4+PiBhaW52LnNoYXBlCiAgICAoOCwgMywgNCwgNikKICAgID4+PiBiID0gbnAucmFuZG9tLnJhbmRuKDQsIDYpCiAgICA+Pj4gbnAuYWxsY2xvc2UobnAudGVuc29yZG90KGFpbnYsIGIpLCBucC5saW5hbGcudGVuc29yc29sdmUoYSwgYikpCiAgICBUcnVlCgogICAgPj4+IGEgPSBucC5leWUoNCo2KQogICAgPj4+IGEuc2hhcGUgPSAoMjQsIDgsIDMpCiAgICA+Pj4gYWludiA9IG5wLmxpbmFsZy50ZW5zb3JpbnYoYSwgaW5kPTEpCiAgICA+Pj4gYWludi5zaGFwZQogICAgKDgsIDMsIDI0KQogICAgPj4+IGIgPSBucC5yYW5kb20ucmFuZG4oMjQpCiAgICA+Pj4gbnAuYWxsY2xvc2UobnAudGVuc29yZG90KGFpbnYsIGIsIDEpLCBucC5saW5hbGcudGVuc29yc29sdmUoYSwgYikpCiAgICBUcnVlCgogICAgcnAAAAByFwAAAE56FUludmFsaWQgaW5kIGFyZ3VtZW50LnLKAAAAKQVyHQAAAHLAAAAA2gpWYWx1ZUVycm9yctYAAAByBgAAACkHco8AAABy7QAAAHLbAAAAcjcAAADaCGludnNoYXBlctoAAADaAmlhcwcAAAAgICAgICAgclcAAAByBQAAAHIFAAAAogEAAHOkAAAAgAD1bAEACRCQAYkKjAqAQdgPEIx3gEjYCwyARNgHCohRgneAd9gTG5hDmESYRJQ+oEioVKhjqFSkTtETMogI2BEZmCOYJJgklB7wAAEJFvAAAQkWiEHYDBCQQYlJiESIRPADAQkW9QYADxnQGTDRDjHUDjHQCDHYCAmPCYoJkCSYAtEIG9QIG4BB3QkMiFGJFowWgELYCxWIMow6kHjQCyDQBCByVgAAAGMBAAAAAAAAAAAAAAABAAAAAwAAAPMIAAAAlwB8AGYBUwBylAAAAHJVAAAAcssAAABzAQAAACByVwAAANoRX3VuYXJ5X2Rpc3BhdGNoZXJy9QAAAOgBAABy7wAAAHJWAAAAYwEAAAAAAAAAAAAAAAYAAAADAAAA80IBAACXAHQBAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAABcAgAAfQB9AXQDAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAAABAHQFAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAAABAHQHAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAABcAgAAfQJ9A3QJAAAAAAAAAAAAAHwCpgEAAKsBAAAAAAAAAAByAmQBbgFkAn0EdAsAAAAAAAAAAAAAdAwAAAAAAAAAAAAApgEAAKsBAAAAAAAAAAB9BXQPAAAAAAAAAAAAAGoIAAAAAAAAAAB8AHwEfAWsA6YDAACrAwAAAAAAAAAAfQYCAHwBfAagCQAAAAAAAAAAAAAAAAAAAAAAAAAAfANkBKwFpgIAAKsCAAAAAAAAAACmAQAAqwEAAAAAAAAAAFMAKQZhUwUAAAogICAgQ29tcHV0ZSB0aGUgKG11bHRpcGxpY2F0aXZlKSBpbnZlcnNlIG9mIGEgbWF0cml4LgoKICAgIEdpdmVuIGEgc3F1YXJlIG1hdHJpeCBgYWAsIHJldHVybiB0aGUgbWF0cml4IGBhaW52YCBzYXRpc2Z5aW5nCiAgICBgYGRvdChhLCBhaW52KSA9IGRvdChhaW52LCBhKSA9IGV5ZShhLnNoYXBlWzBdKWBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGEgOiAoLi4uLCBNLCBNKSBhcnJheV9saWtlCiAgICAgICAgTWF0cml4IHRvIGJlIGludmVydGVkLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGFpbnYgOiAoLi4uLCBNLCBNKSBuZGFycmF5IG9yIG1hdHJpeAogICAgICAgIChNdWx0aXBsaWNhdGl2ZSkgaW52ZXJzZSBvZiB0aGUgbWF0cml4IGBhYC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgICBJZiBgYWAgaXMgbm90IHNxdWFyZSBvciBpbnZlcnNpb24gZmFpbHMuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBzY2lweS5saW5hbGcuaW52IDogU2ltaWxhciBmdW5jdGlvbiBpbiBTY2lQeS4KCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjguMAoKICAgIEJyb2FkY2FzdGluZyBydWxlcyBhcHBseSwgc2VlIHRoZSBgbnVtcHkubGluYWxnYCBkb2N1bWVudGF0aW9uIGZvcgogICAgZGV0YWlscy4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LmxpbmFsZyBpbXBvcnQgaW52CiAgICA+Pj4gYSA9IG5wLmFycmF5KFtbMS4sIDIuXSwgWzMuLCA0Ll1dKQogICAgPj4+IGFpbnYgPSBpbnYoYSkKICAgID4+PiBucC5hbGxjbG9zZShucC5kb3QoYSwgYWludiksIG5wLmV5ZSgyKSkKICAgIFRydWUKICAgID4+PiBucC5hbGxjbG9zZShucC5kb3QoYWludiwgYSksIG5wLmV5ZSgyKSkKICAgIFRydWUKCiAgICBJZiBhIGlzIGEgbWF0cml4IG9i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IDBgYCwgdGhlIGlkZW50aXR5IG1hdHJpeAogICAgb2YgdGhlIHNhbWUgc2hhcGUgYXMgTSBpcyByZXR1cm5lZC4gSWYgYGBuIDwgMGBgLCB0aGUgaW52ZXJzZQogICAgaXMgY29tcHV0ZWQgYW5kIHRoZW4gcmFpc2VkIHRvIHRoZSBgYGFicyhuKWBgLgoKICAgIC4uIG5vdGU6OiBTdGFja3Mgb2Ygb2JqZWN0IG1hdHJpY2VzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogKC4uLiwgTSwgTSkgYXJyYXlfbGlrZQogICAgICAgIE1hdHJpeCB0byBiZSAicG93ZXJlZCIuCiAgICBuIDogaW50CiAgICAgICAgVGhlIGV4cG9uZW50IGNhbiBiZSBhbnkgaW50ZWdlciBvciBsb25nIGludGVnZXIsIHBvc2l0aXZlLAogICAgICAgIG5lZ2F0aXZlLCBvciB6ZXJvLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGEqKm4gOiAoLi4uLCBNLCBNKSBuZGFycmF5IG9yIG1hdHJpeCBvYmplY3QKICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIHNoYXBlIGFuZCB0eXBlIGFzIGBNYDsKICAgICAgICBpZiB0aGUgZXhwb25lbnQgaXMgcG9zaXRpdmUgb3IgemVybyB0aGVuIHRoZSB0eXBlIG9mIHRoZQogICAgICAgIGVsZW1lbnRzIGlzIHRoZSBzYW1lIGFzIHRob3NlIG9mIGBNYC4gSWYgdGhlIGV4cG9uZW50IGlzCiAgICAgICAgbmVnYXRpdmUgdGhlIGVsZW1lbnRzIGFyZSBmbG9hdGluZy1wb2ludC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgICBGb3IgbWF0cmljZXMgdGhhdCBhcmUgbm90IHNxdWFyZSBvciB0aGF0IChmb3IgbmVnYXRpdmUgcG93ZXJzKSBjYW5ub3QKICAgICAgICBiZSBpbnZlcnRlZCBudW1lcmljYWxseS4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LmxpbmFsZyBpbXBvcnQgbWF0cml4X3Bvd2VyCiAgICA+Pj4gaSA9IG5wLmFycmF5KFtbMCwgMV0sIFstMSwgMF1dKSAjIG1hdHJpeCBlcXVpdi4gb2YgdGhlIGltYWdpbmFyeSB1bml0CiAgICA+Pj4gbWF0cml4X3Bvd2VyKGksIDMpICMgc2hvdWxkID0gLWkKICAgIGFycmF5KFtbIDAsIC0xXSwKICAgICAgICAgICBbIDEsICAwXV0pCiAgICA+Pj4gbWF0cml4X3Bvd2VyKGksIDApCiAgICBhcnJheShbWzEsIDBdLAogICAgICAgICAgIFswLCAxXV0pCiAgICA+Pj4gbWF0cml4X3Bvd2VyKGksIC0zKSAjIHNob3VsZCA9IDEvKC1pKSA9IGksIGJ1dCB3LyBmLnAuIGVsZW1lbnRzCiAgICBhcnJheShbWyAwLiwgIDEuXSwKICAgICAgICAgICBbLTEuLCAgMC5dXSkKCiAgICBTb21ld2hhdCBtb3JlIHNvcGhpc3RpY2F0ZWQgZXhhbXBsZQoKICAgID4+PiBxID0gbnAuemVyb3MoKDQsIDQpKQogICAgPj4+IHFbMDoyLCAwOjJdID0gLWkKICAgID4+PiBxWzI6NCwgMjo0XSA9IGkKICAgID4+PiBxICMgb25lIG9mIHRoZSB0aHJlZSBxdWF0ZXJuaW9uIHVuaXRzIG5vdCBlcXVhbCB0byAxCiAgICBhcnJheShbWyAwLiwgLTEuLCAgMC4sICAwLl0sCiAgICAgICAgICAgWyAxLiwgIDAuLCAgMC4sICAwLl0sCiAgICAgICAgICAgWyAwLiwgIDAuLCAgMC4sICAxLl0sCiAgICAgICAgICAgWyAwLiwgIDAuLCAtMS4sICAwLl1dKQogICAgPj4+IG1hdHJpeF9wb3dlcihxLCAyKSAjID0gLW5wLmV5ZSg0KQogICAgYXJyYXkoW1stMS4sICAwLiwgIDAuLCAgMC5dLAogICAgICAgICAgIFsgMC4sIC0xLiwgIDAuLCAgMC5dLAogICAgICAgICAgIFsgMC4sICAwLiwgLTEuLCAgMC5dLAogICAgICAgICAgIFsgMC4sICAwLiwgIDAuLCAtMS5dXSkKCiAgICB6G2V4cG9uZW50IG11c3QgYmUgYW4gaW50ZWdlck5yGgAAAHo2bWF0cml4X3Bvd2VyIG5vdCBzdXBwb3J0ZWQgZm9yIHN0YWNrcyBvZiBvYmplY3QgYXJyYXlzchcAAAByvwAAAHKvAAAALnJwAAAA6QMAAAApEnI7AAAAcr0AAABywwAAANoIb3BlcmF0b3LaBWluZGV4cqQAAAByogAAANoGb2JqZWN0cj0AAAByuQAAAHIrAAAA2hNOb3RJbXBsZW1lbnRlZEVycm9yciAAAABySQAAAHLAAAAAcgYAAAByOAAAANoGZGl2bW9kKQdyjwAAAHLCAAAA2gFl2gdmbWF0bXVs2gF62gZyZXN1bHTaA2JpdHMHAAAAICAgICAgIHJXAAAAcgIAAAByAgAAADkCAABzyQEAAIAA9UICAAkTkDGJDYwNgEHdBBaQcdEEGdQEGdAEGd0EGpgx0QQd1AQd0AQd8AQDBT7dDBSMTpgx0Qwd1AwdiAGIAfjdCxTwAAEFPvAAAQU+8AABBT7dDhfQGDXRDjbUDja4QdAIPfj4+PjwAwEFPvj4+PAKAAgJhHeVJtIHGNAHGN0SGIgHiAfYCQqMFpAxihuIG90SFYgHiAflDiHYDETxAwEPRgH0AAEPRgHwAAEJRgHwBgAICYhBgnaAdt0MFpBxiU2MTYgB3REUkFGUV5hSlFuoAawH0BEw0REw1BEwiAGII4kG2A8QiAjgCQqIUYoViBXdDA+QAYlGjEaIAd0MD5ABiUaMRogB8AYACAmIQYJ2gHbYDxCICOAJCohhihaIFtgPFoh3kHGYIYl9jH3QCBzgCQqIYYoWiBbYDxaId5B3kHeYcaAhkX2UfaBh0Q8o1A8o0Ago8AoAEhbQBBWAQYgG2AoLiGGKJYgl2BESkBmIQYhBoAegB6gBqDGhDaQNiAHdEReYAZgxkRyUHIkGiAGIM9gLDvAAAQlBAdgaIJgukFGQUahnqGewZrhh0S5A1C5AiEbwCQALDIhhiiWIJfAMAAwSgE1zFwAAAK8UQQQAwQQKQSMDwQ4QQR4DwR4FQSMDYwEAAAAAAAAAAAAAAAYAAAADAAAA80gBAACXAHQBAAAAAAAAAAAAAHQCAAAAAAAAAAAAAKYBAACrAQAAAAAAAAAAfQF0BAAAAAAAAAAAAABqAwAAAAAAAAAAfQJ0CQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAXAIAAH0AfQN0CwAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAAQB0DQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAAQB0DwAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAXAIAAH0EfQV0EQAAAAAAAAAAAAB8BKYBAACrAQAAAAAAAAAAcgJkAW4BZAJ9BgIAfAJ8AHwGfAGsA6YDAACrAwAAAAAAAAAAfQcCAHwDfAegCQAAAAAAAAAAAAAAAAAAAAAAAAAAfAVkBKwFpgIAAKsCAAAAAAAAAACmAQAAqwEAAAAAAAAAAFMAKQZh1wkAAAogICAgQ2hvbGVza3kgZGVjb21wb3NpdGlvbi4KCiAgICBSZXR1cm4gdGhlIENob2xlc2t5IGRlY29tcG9zaXRpb24sIGBMICogTC5IYCwgb2YgdGhlIHNxdWFyZSBtYXRyaXggYGFgLAogICAgd2hlcmUgYExgIGlzIGxvd2VyLXRyaWFuZ3VsYXIgYW5kIC5IIGlzIHRoZSBjb25qdWdhdGUgdHJhbnNwb3NlIG9wZXJhdG9yCiAgICAod2hpY2ggaXMgdGhlIG9yZGluYXJ5IHRyYW5zcG9zZSBpZiBgYWAgaXMgcmVhbC12YWx1ZWQpLiAgYGFgIG11c3QgYmUKICAgIEhlcm1pdGlhbiAoc3ltbWV0cmljIGlmIHJlYWwtdmFsdWVkKSBhbmQgcG9zaXRpdmUtZGVmaW5pdGUuIE5vCiAgICBjaGVja2luZyBpcyBwZXJmb3JtZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGFgIGlzIEhlcm1pdGlhbiBvciBub3QuCiAgICBJbiBhZGRpdGlvbiwgb25seSB0aGUgbG93ZXItdHJpYW5ndWxhciBhbmQgZGlhZ29uYWwgZWxlbWVudHMgb2YgYGFgCiAgICBhcmUgdXNlZC4gT25seSBgTGAgaXMgYWN0dWFsbHkgcmV0dXJuZWQuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYSA6ICguLi4sIE0sIE0pIGFycmF5X2xpa2UKICAgICAgICBIZXJtaXRpYW4gKHN5bW1ldHJpYyBpZiBhbGwgZWxlbWVudHMgYXJlIHJlYWwpLCBwb3NpdGl2ZS1kZWZpbml0ZQogICAgICAgIGlucHV0IG1hdHJpeC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBMIDogKC4uLiwgTSwgTSkgYXJyYXlfbGlrZQogICAgICAgIExvd2VyLXRyaWFuZ3VsYXIgQ2hvbGVza3kgZmFjdG9yIG9mIGBhYC4gIFJldHVybnMgYSBtYXRyaXggb2JqZWN0IGlmCiAgICAgICAgYGFgIGlzIGEgbWF0cml4IG9iamVjdC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgIElmIHRoZSBkZWNvbXBvc2l0aW9uIGZhaWxzLCBmb3IgZXhhbXBsZSwgaWYgYGFgIGlzIG5vdAogICAgICAgcG9zaXRpdmUtZGVmaW5pdGUuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBzY2lweS5saW5hbGcuY2hvbGVza3kgOiBTaW1pbGFyIGZ1bmN0aW9uIGluIFNjaVB5LgogICAgc2NpcHkubGluYWxnLmNob2xlc2t5X2JhbmRlZCA6IENob2xlc2t5IGRlY29tcG9zZSBhIGJhbmRlZCBIZXJtaXRpYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZS1kZWZpbml0ZSBtYXRyaXguCiAgICBzY2lweS5saW5hbGcuY2hvX2ZhY3RvciA6IENob2xlc2t5IGRlY29tcG9zaXRpb24gb2YgYSBtYXRyaXgsIHRvIHVzZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgc2NpcHkubGluYWxnLmNob19zb2x2ZWAuCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS44LjAKCiAgICBCcm9hZGNhc3RpbmcgcnVsZXMgYXBwbHksIHNlZSB0aGUgYG51bXB5LmxpbmFsZ2AgZG9jdW1lbnRhdGlvbiBmb3IKICAgIGRldGFpbHMuCgogICAgVGhlIENob2xlc2t5IGRlY29tcG9zaXRpb24gaXMgb2Z0ZW4gdXNlZCBhcyBhIGZhc3Qgd2F5IG9mIHNvbHZpbmcKCiAgICAuLiBtYXRoOjogQSBcbWF0aGJme3h9ID0gXG1hdGhiZntifQoKICAgICh3aGVuIGBBYCBpcyBib3RoIEhlcm1pdGlhbi9zeW1tZXRyaWMgYW5kIHBvc2l0aXZlLWRlZmluaXRlKS4KCiAgICBGaXJzdCwgd2Ugc29sdmUgZm9yIDptYXRoOmBcbWF0aGJme3l9YCBpbgoKICAgIC4uIG1hdGg6OiBMIFxtYXRoYmZ7eX0gPSBcbWF0aGJme2J9LAoKICAgIGFuZCB0aGVuIGZvciA6bWF0aDpgXG1hdGhiZnt4fWAgaW4KCiAgICAuLiBtYXRoOjogTC5IIFxtYXRoYmZ7eH0gPSBcbWF0aGJme3l9LgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IEEgPSBucC5hcnJheShbWzEsLTJqXSxbMmosNV1dKQogICAgPj4+IEEKICAgIGFycmF5KFtbIDEuKzAuaiwgLTAuLTIual0sCiAgICAgICAgICAgWyAwLisyLmosICA1LiswLmpdXSkKICAgID4+PiBMID0gbnAubGluYWxnLmNob2xlc2t5KEEpCiAgICA+Pj4gTAogICAgYXJyYXkoW1sxLiswLmosIDAuKzAual0sCiAgICAgICAgICAgWzAuKzIuaiwgMS4rMC5qXV0pCiAgICA+Pj4gbnAuZG90KEwsIEwuVC5jb25qKCkpICMgdmVyaWZ5IHRoYXQgTCAqIEwuSCA9IEEKICAgIGFycmF5KFtbMS4rMC5qLCAwLi0yLmpdLAogICAgICAgICAgIFswLisyLmosIDUuKzAual1dKQogICAgPj4+IEEgPSBbWzEsLTJqXSxbMmosNV1dICMgd2hhdCBoYXBwZW5zIGlmIEEgaXMgb25seSBhcnJheV9saWtlPwogICAgPj4+IG5wLmxpbmFsZy5jaG9sZXNreShBKSAjIGFuIG5kYXJyYXkgb2JqZWN0IGlzIHJldHVybmVkCiAgICBhcnJheShbWzEuKzAuaiwgMC4rMC5qXSwKICAgICAgICAgICBbMC4rMi5qLCAxLiswLmpdXSkKICAgID4+PiAjIEJ1dCBhIG1hdHJpeCBvYmplY3QgaXMgcmV0dXJuZWQgaWYgQSBpcyBhIG1hdHJpeCBvYmplY3QKICAgID4+PiBucC5saW5hbGcuY2hvbGVza3kobnAubWF0cml4KEEpKQog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ZSBuZXcgaW4gbnVtcHkgMS44LAogICAgICAgIHNlZSB0aGUgbm90ZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uIFRoZSBkZWZhdWx0IGlzICdyZWR1Y2VkJywgYW5kIHRvCiAgICAgICAgbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgbnVtcHkgYm90aAogICAgICAgIGl0IGFuZCB0aGUgb2xkIGRlZmF1bHQgJ2Z1bGwnIGNhbiBiZSBvbWl0dGVkLiBOb3RlIHRoYXQgYXJyYXkgaAogICAgICAgIHJldHVybmVkIGluICdyYXcnIG1vZGUgaXMgdHJhbnNwb3NlZCBmb3IgY2FsbGluZyBGb3J0cmFuLiBUaGUKICAgICAgICAnZWNvbm9taWMnIG1vZGUgaXMgZGVwcmVjYXRlZC4gIFRoZSBtb2RlcyAnZnVsbCcgYW5kICdlY29ub21pYycgbWF5CiAgICAgICAgYmUgcGFzc2VkIHVzaW5nIG9ubHkgdGhlIGZpcnN0IGxldHRlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksCiAgICAgICAgYnV0IGFsbCBvdGhlcnMgbXVzdCBiZSBzcGVsbGVkIG91dC4gU2VlIHRoZSBOb3RlcyBmb3IgbW9yZQogICAgICAgIGV4cGxhbmF0aW9uLgoKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBXaGVuIG1vZGUgaXMgJ3JlZHVjZWQnIG9yICdjb21wbGV0ZScsIHRoZSByZXN1bHQgd2lsbCBiZSBhIG5hbWVkdHVwbGUgd2l0aAogICAgdGhlIGF0dHJpYnV0ZXMgYFFgIGFuZCBgUmAuCgogICAgUSA6IG5kYXJyYXkgb2YgZmxvYXQgb3IgY29tcGxleCwgb3B0aW9uYWwKICAgICAgICBBIG1hdHJpeCB3aXRoIG9ydGhvbm9ybWFsIGNvbHVtbnMuIFdoZW4gbW9kZSA9ICdjb21wbGV0ZScgdGhlCiAgICAgICAgcmVzdWx0IGlzIGFuIG9ydGhvZ29uYWwvdW5pdGFyeSBtYXRyaXggZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90CiAgICAgICAgYSBpcyByZWFsL2NvbXBsZXguIFRoZSBkZXRlcm1pbmFudCBtYXkgYmUgZWl0aGVyICsvLSAxIGluIHRoYXQKICAgICAgICBjYXNlLiBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucyBpbiB0aGUgaW5wdXQgYXJyYXkgaXMKICAgICAgICBncmVhdGVyIHRoYW4gMiB0aGVuIGEgc3RhY2sgb2YgdGhlIG1hdHJpY2VzIHdpdGggYWJvdmUgcHJvcGVydGllcwogICAgICAgIGlzIHJldHVybmVkLgogICAgUiA6IG5kYXJyYXkgb2YgZmxvYXQgb3IgY29tcGxleCwgb3B0aW9uYWwKICAgICAgICBUaGUgdXBwZXItdHJpYW5ndWxhciBtYXRyaXggb3IgYSBzdGFjayBvZiB1cHBlci10cmlhbmd1bGFyCiAgICAgICAgbWF0cmljZXMgaWYgdGhlIG51bWJlciBvZiBkaW1lbnNpb25zIGluIHRoZSBpbnB1dCBhcnJheSBpcyBncmVhdGVyCiAgICAgICAgdGhhbiAyLgogICAgKGgsIHRhdSkgOiBuZGFycmF5cyBvZiBucC5kb3VibGUgb3IgbnAuY2RvdWJsZSwgb3B0aW9uYWwKICAgICAgICBUaGUgYXJyYXkgaCBjb250YWlucyB0aGUgSG91c2Vob2xkZXIgcmVmbGVjdG9ycyB0aGF0IGdlbmVyYXRlIHEKICAgICAgICBhbG9uZyB3aXRoIHIuIFRoZSB0YXUgYXJyYXkgY29udGFpbnMgc2NhbGluZyBmYWN0b3JzIGZvciB0aGUKICAgICAgICByZWZsZWN0b3JzLiBJbiB0aGUgZGVwcmVjYXRlZCAgJ2Vjb25vbWljJyBtb2RlIG9ubHkgaCBpcyByZXR1cm5lZC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgICBJZiBmYWN0b3JpbmcgZmFpbHMuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBzY2lweS5saW5hbGcucXIgOiBTaW1pbGFyIGZ1bmN0aW9uIGluIFNjaVB5LgogICAgc2NpcHkubGluYWxnLnJxIDogQ29tcHV0ZSBSUSBkZWNvbXBvc2l0aW9uIG9mIGEgbWF0cml4LgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgVGhpcyBpcyBhbiBpbnRlcmZhY2UgdG8gdGhlIExBUEFDSyByb3V0aW5lcyBgYGRnZXFyZmBgLCBgYHpnZXFyZmBgLAogICAgYGBkb3JncXJgYCwgYW5kIGBgenVuZ3FyYGAuCgogICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHFyIGZhY3Rvcml6YXRpb24sIHNlZSBmb3IgZXhhbXBsZToKICAgIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1FSX2ZhY3Rvcml6YXRpb24KCiAgICBTdWJjbGFzc2VzIG9mIGBuZGFycmF5YCBhcmUgcHJlc2VydmVkIGV4Y2VwdCBmb3IgdGhlICdyYXcnIG1vZGUuIFNvIGlmCiAgICBgYWAgaXMgb2YgdHlwZSBgbWF0cml4YCwgYWxsIHRoZSByZXR1cm4gdmFsdWVzIHdpbGwgYmUgbWF0cmljZXMgdG9vLgoKICAgIE5ldyAncmVkdWNlZCcsICdjb21wbGV0ZScsIGFuZCAncmF3JyBvcHRpb25zIGZvciBtb2RlIHdlcmUgYWRkZWQgaW4KICAgIE51bVB5IDEuOC4wIGFuZCB0aGUgb2xkIG9wdGlvbiAnZnVsbCcgd2FzIG1hZGUgYW4gYWxpYXMgb2YgJ3JlZHVjZWQnLiAgSW4KICAgIGFkZGl0aW9uIHRoZSBvcHRpb25zICdmdWxsJyBhbmQgJ2Vjb25vbWljJyB3ZXJlIGRlcHJlY2F0ZWQuICBCZWNhdXNlCiAgICAnZnVsbCcgd2FzIHRoZSBwcmV2aW91cyBkZWZhdWx0IGFuZCAncmVkdWNlZCcgaXMgdGhlIG5ldyBkZWZhdWx0LAogICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjYW4gYmUgbWFpbnRhaW5lZCBieSBsZXR0aW5nIGBtb2RlYCBkZWZhdWx0LgogICAgVGhlICdyYXcnIG9wdGlvbiB3YXMgYWRkZWQgc28gdGhhdCBMQVBBQ0sgcm91dGluZXMgdGhhdCBjYW4gbXVsdGlwbHkKICAgIGFycmF5cyBieSBxIHVzaW5nIHRoZSBIb3VzZWhvbGRlciByZWZsZWN0b3JzIGNhbiBiZSB1c2VkLiBOb3RlIHRoYXQgaW4KICAgIHRoaXMgY2FzZSB0aGUgcmV0dXJuZWQgYXJyYXlzIGFyZSBvZiB0eXBlIG5wLmRvdWJsZSBvciBucC5jZG91YmxlIGFuZAogICAgdGhlIGggYXJyYXkgaXMgdHJhbnNwb3NlZCB0byBiZSBGT1JUUkFOIGNvbXBhdGlibGUuICBObyByb3V0aW5lcyB1c2luZwogICAgdGhlICdyYXcnIHJldHVybiBhcmUgY3VycmVudGx5IGV4cG9zZWQgYnkgbnVtcHksIGJ1dCBzb21lIGFyZSBhdmFpbGFibGUKICAgIGluIGxhcGFja19saXRlIGFuZCBqdXN0IGF3YWl0IHRoZSBuZWNlc3Nhcnkgd29yay4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBhID0gbnAucmFuZG9tLnJhbmRuKDksIDYpCiAgICA+Pj4gUSwgUiA9IG5wLmxpbmFsZy5xcihhKQogICAgPj4+IG5wLmFsbGNsb3NlKGEsIG5wLmRvdChRLCBSKSkgICMgYSBkb2VzIGVxdWFsIFFSCiAgICBUcnVlCiAgICA+Pj4gUjIgPSBucC5saW5hbGcucXIoYSwgbW9kZT0ncicpCiAgICA+Pj4gbnAuYWxsY2xvc2UoUiwgUjIpICAjIG1vZGU9J3InIHJldHVybnMgdGhlIHNhbWUgUiBhcyBtb2RlPSdmdWxsJwogICAgVHJ1ZQogICAgPj4+IGEgPSBucC5yYW5kb20ubm9ybWFsKHNpemU9KDMsIDIsIDIpKSAjIFN0YWNrIG9mIDIgeCAyIG1hdHJpY2VzIGFzIGlucHV0CiAgICA+Pj4gUSwgUiA9IG5wLmxpbmFsZy5xcihhKQogICAgPj4+IFEuc2hhcGUKICAgICgzLCAyLCAyKQogICAgPj4+IFIuc2hhcGUKICAgICgzLCAyLCAyKQogICAgPj4+IG5wLmFsbGNsb3NlKGEsIG5wLm1hdG11bChRLCBSKSkKICAgIFRydWUKCiAgICBFeGFtcGxlIGlsbHVzdHJhdGluZyBhIGNvbW1vbiB1c2Ugb2YgYHFyYDogc29sdmluZyBvZiBsZWFzdCBzcXVhcmVzCiAgICBwcm9ibGVtcwoKICAgIFdoYXQgYXJlIHRoZSBsZWFzdC1zcXVhcmVzLWJlc3QgYG1gIGFuZCBgeTBgIGluIGBgeSA9IHkwICsgbXhgYCBmb3IKICAgIHRoZSBmb2xsb3dpbmcgZGF0YTogeygwLDEpLCAoMSwwKSwgKDEsMiksICgyLDEpfS4gKEdyYXBoIHRoZSBwb2ludHMKICAgIGFuZCB5b3UnbGwgc2VlIHRoYXQgaXQgc2hvdWxkIGJlIHkwID0gMCwgbSA9IDEuKSAgVGhlIGFuc3dlciBpcyBwcm92aWRlZAogICAgYnkgc29sdmluZyB0aGUgb3Zlci1kZXRlcm1pbmVkIG1hdHJpeCBlcXVhdGlvbiBgYEF4ID0gYmBgLCB3aGVyZTo6CgogICAgICBBID0gYXJyYXkoW1swLCAxXSwgWzEsIDFdLCBbMSwgMV0sIFsyLCAxXV0pCiAgICAgIHggPSBhcnJheShbW3kwXSwgW21dXSkKICAgICAgYiA9IGFycmF5KFtbMV0sIFswXSwgWzJdLCBbMV1dKQoKICAgIElmIEEgPSBRUiBzdWNoIHRoYXQgUSBpcyBvcnRob25vcm1hbCAod2hpY2ggaXMgYWx3YXlzIHBvc3NpYmxlIHZpYQogICAgR3JhbS1TY2htaWR0KSwgdGhlbiBgYHggPSBpbnYoUikgKiAoUS5UKSAqIGJgYC4gIChJbiBudW1weSBwcmFjdGljZSwKICAgIGhvd2V2ZXIsIHdlIHNpbXBseSB1c2UgYGxzdHNxYC4pCgogICAgPj4+IEEgPSBucC5hcnJheShbWzAsIDFdLCBbMSwgMV0sIFsxLCAxXSwgWzIsIDFdXSkKICAgID4+PiBBCiAgICBhcnJheShbWzAsIDFdLAogICAgICAgICAgIFsxLCAxXSwKICAgICAgICAgICBbMSwgMV0sCiAgICAgICAgICAgWzIsIDFdXSkKICAgID4+PiBiID0gbnAuYXJyYXkoWzEsIDIsIDIsIDNdKQogICAgPj4+IFEsIFIgPSBucC5saW5hbGcucXIoQSkKICAgID4+PiBwID0gbnAuZG90KFEuVCwgYikKICAgID4+PiBucC5kb3QobnAubGluYWxnLmludihSKSwgcCkKICAgIGFycmF5KFsgIDEuLCAgIDEuXSkKCiAgICApBHINAQAA2ghjb21wbGV0ZXLrAAAA2gNyYXcpAtoBZtoE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AAAAAAAAAH0DfAagDwAAAAAAAAAAAAAAAAAAAAAAAAAAfANkBawGpgIAAKsCAAAAAAAAAABTACkHYWkIAAAKICAgIENvbXB1dGUgdGhlIGVpZ2VudmFsdWVzIG9mIGEgZ2VuZXJhbCBtYXRyaXguCgogICAgTWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYGVpZ3ZhbHNgIGFuZCBgZWlnYDogdGhlIGVpZ2VudmVjdG9ycyBhcmVuJ3QKICAgIHJldHVybmVkLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGEgOiAoLi4uLCBNLCBNKSBhcnJheV9saWtlCiAgICAgICAgQSBjb21wbGV4LSBvciByZWFsLXZhbHVlZCBtYXRyaXggd2hvc2UgZWlnZW52YWx1ZXMgd2lsbCBiZSBjb21wdXRlZC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICB3IDogKC4uLiwgTSwpIG5kYXJyYXkKICAgICAgICBUaGUgZWlnZW52YWx1ZXMsIGVhY2ggcmVwZWF0ZWQgYWNjb3JkaW5nIHRvIGl0cyBtdWx0aXBsaWNpdHkuCiAgICAgICAgVGhleSBhcmUgbm90IG5lY2Vzc2FyaWx5IG9yZGVyZWQsIG5vciBhcmUgdGhleSBuZWNlc3NhcmlseQogICAgICAgIHJlYWwgZm9yIHJlYWwgbWF0cmljZXMuCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIExpbkFsZ0Vycm9yCiAgICAgICAgSWYgdGhlIGVpZ2VudmFsdWUgY29tcHV0YXRpb24gZG9lcyBub3QgY29udmVyZ2UuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBlaWcgOiBlaWdlbnZhbHVlcyBhbmQgcmlnaHQgZWlnZW52ZWN0b3JzIG9mIGdlbmVyYWwgYXJyYXlzCiAgICBlaWd2YWxzaCA6IGVpZ2VudmFsdWVzIG9mIHJlYWwgc3ltbWV0cmljIG9yIGNvbXBsZXggSGVybWl0aWFuCiAgICAgICAgICAgICAgIChjb25qdWdhdGUgc3ltbWV0cmljKSBhcnJheXMuCiAgICBlaWdoIDogZWlnZW52YWx1ZXMgYW5kIGVpZ2VudmVjdG9ycyBvZiByZWFsIHN5bW1ldHJpYyBvciBjb21wbGV4CiAgICAgICAgICAgSGVybWl0aWFuIChjb25qdWdhdGUgc3ltbWV0cmljKSBhcnJheXMuCiAgICBzY2lweS5saW5hbGcuZWlndmFscyA6IFNpbWlsYXIgZnVuY3Rpb24gaW4gU2NpUHkuCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS44LjAKCiAgICBCcm9hZGNhc3RpbmcgcnVsZXMgYXBwbHksIHNlZSB0aGUgYG51bXB5LmxpbmFsZ2AgZG9jdW1lbnRhdGlvbiBmb3IKICAgIGRldGFpbHMuCgogICAgVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgYGBfZ2VldmBgIExBUEFDSyByb3V0aW5lcyB3aGljaCBjb21wdXRlCiAgICB0aGUgZWlnZW52YWx1ZXMgYW5kIGVpZ2VudmVjdG9ycyBvZiBnZW5lcmFsIHNxdWFyZSBhcnJheXMuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICBJbGx1c3RyYXRpb24sIHVzaW5nIHRoZSBmYWN0IHRoYXQgdGhlIGVpZ2VudmFsdWVzIG9mIGEgZGlhZ29uYWwgbWF0cml4CiAgICBhcmUgaXRzIGRpYWdvbmFsIGVsZW1lbnRzLCB0aGF0IG11bHRpcGx5aW5nIGEgbWF0cml4IG9uIHRoZSBsZWZ0CiAgICBieSBhbiBvcnRob2dvbmFsIG1hdHJpeCwgYFFgLCBhbmQgb24gdGhlIHJpZ2h0IGJ5IGBRLlRgICh0aGUgdHJhbnNwb3NlCiAgICBvZiBgUWApLCBwcmVzZXJ2ZXMgdGhlIGVpZ2VudmFsdWVzIG9mIHRoZSAibWlkZGxlIiBtYXRyaXguICBJbiBvdGhlciB3b3JkcywKICAgIGlmIGBRYCBpcyBvcnRob2dvbmFsLCB0aGVuIGBgUSAqIEEgKiBRLlRgYCBoYXMgdGhlIHNhbWUgZWlnZW52YWx1ZXMgYXMKICAgIGBgQWBgOgoKICAgID4+PiBmcm9tIG51bXB5IGltcG9ydCBsaW5hbGcgYXMgTEEKICAgID4+PiB4ID0gbnAucmFuZG9tLnJhbmRvbSgpCiAgICA+Pj4gUSA9IG5w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b24gaXMgZG9uZSB3aXRoIHRoZSBsb3dlciB0cmlhbmd1bGFyCiAgICAgICAgcGFydCBvZiBgYWAgKCdMJywgZGVmYXVsdCkgb3IgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgcGFydCAoJ1UnKS4KICAgICAgICBJcnJlc3BlY3RpdmUgb2YgdGhpcyB2YWx1ZSBvbmx5IHRoZSByZWFsIHBhcnRzIG9mIHRoZSBkaWFnb25hbCB3aWxsCiAgICAgICAgYmUgY29uc2lkZXJlZCBpbiB0aGUgY29tcHV0YXRpb24gdG8gcHJlc2VydmUgdGhlIG5vdGlvbiBvZiBhIEhlcm1pdGlhbgogICAgICAgIG1hdHJpeC4gSXQgdGhlcmVmb3JlIGZvbGxvd3MgdGhhdCB0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgdGhlIGRpYWdvbmFsCiAgICAgICAgd2lsbCBhbHdheXMgYmUgdHJlYXRlZCBhcyB6ZXJvLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHcgOiAoLi4uLCBNLCkgbmRhcnJheQogICAgICAgIFRoZSBlaWdlbnZhbHVlcyBpbiBhc2NlbmRpbmcgb3JkZXIsIGVhY2ggcmVwZWF0ZWQgYWNjb3JkaW5nIHRvCiAgICAgICAgaXRzIG11bHRpcGxpY2l0eS4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgICBJZiB0aGUgZWlnZW52YWx1ZSBjb21wdXRhdGlvbiBkb2VzIG5vdCBjb252ZXJnZS4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGVpZ2ggOiBlaWdlbnZhbHVlcyBhbmQgZWlnZW52ZWN0b3JzIG9mIHJlYWwgc3ltbWV0cmljIG9yIGNvbXBsZXggSGVybWl0aWFuCiAgICAgICAgICAgKGNvbmp1Z2F0ZSBzeW1tZXRyaWMpIGFycmF5cy4KICAgIGVpZ3ZhbHMgOiBlaWdlbnZhbHVlcyBvZiBnZW5lcmFsIHJlYWwgb3IgY29tcGxleCBhcnJheXMuCiAgICBlaWcgOiBlaWdlbnZhbHVlcyBhbmQgcmlnaHQgZWlnZW52ZWN0b3JzIG9mIGdlbmVyYWwgcmVhbCBvciBjb21wbGV4CiAgICAgICAgICBhcnJheXMuCiAgICBzY2lweS5saW5hbGcuZWlndmFsc2ggOiBTaW1pbGFyIGZ1bmN0aW9uIGluIFNjaVB5LgoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuOC4wCgogICAgQnJvYWRjYXN0aW5nIHJ1bGVzIGFwcGx5LCBzZWUgdGhlIGBudW1weS5saW5hbGdgIGRvY3VtZW50YXRpb24gZm9yCiAgICBkZXRhaWxzLgoKICAgIFRoZSBlaWdlbnZhbHVlcyBhcmUgY29tcHV0ZWQgdXNpbmcgTEFQQUNLIHJvdXRpbmVzIGBgX3N5ZXZkYGAsIGBgX2hlZXZkYGAuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gZnJvbSBudW1weSBpbXBvcnQgbGluYWxnIGFzIExBCiAgICA+Pj4gYSA9IG5wLmFycmF5KFtbMSwgLTJqXSwgWzJqLCA1XV0pCiAgICA+Pj4gTEEuZWlndmFsc2goYSkKICAgIGFycmF5KFsgMC4xNzE1NzI4OCwgIDUuODI4NDI3MTJdKSAjIG1heSB2YXJ5CgogICAgPj4+ICMgZGVtb25zdHJhdGUgdGhlIHRyZWF0bWVudCBvZiB0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgdGhlIGRpYWdvbmFsCiAgICA+Pj4gYSA9IG5wLmFycmF5KFtbNSsyaiwgOS0yal0sIFswKzJqLCAyLTFqXV0pCiAgICA+Pj4gYQogICAgYXJyYXkoW1s1LisyLmosIDkuLTIual0sCiAgICAgICAgICAgWzAuKzIuaiwgMi4tMS5qXV0pCiAgICA+Pj4gIyB3aXRoIFVQTE89J0wnIHRoaXMgaXMgbnVtZXJpY2FsbHkgZXF1aXZhbGVudCB0byB1c2luZyBMQS5laWd2YWxzKCkKICAgID4+PiAjIHdpdGg6CiAgICA+Pj4gYiA9IG5wLmFycmF5KFtbNS4rMC5qLCAwLi0yLmpdLCBbMC4rMi5qLCAyLi0wLmpdXSkKICAgID4+PiBiCiAgICBhcnJheShbWzUuKzAuaiwgMC4tMi5qXSwKICAgICAgICAgICBbMC4rMi5qLCAyLiswLmpdXSkKICAgID4+PiB3YSA9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bG93aW5nIGF0dHJpYnV0ZXM6CgogICAgZWlnZW52YWx1ZXMgOiAoLi4uLCBNKSBhcnJheQogICAgICAgIFRoZSBlaWdlbnZhbHVlcywgZWFjaCByZXBlYXRlZCBhY2NvcmRpbmcgdG8gaXRzIG11bHRpcGxpY2l0eS4KICAgICAgICBUaGUgZWlnZW52YWx1ZXMgYXJlIG5vdCBuZWNlc3NhcmlseSBvcmRlcmVkLiBUaGUgcmVzdWx0aW5nCiAgICAgICAgYXJyYXkgd2lsbCBiZSBvZiBjb21wbGV4IHR5cGUsIHVubGVzcyB0aGUgaW1hZ2luYXJ5IHBhcnQgaXMKICAgICAgICB6ZXJvIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBjYXN0IHRvIGEgcmVhbCB0eXBlLiBXaGVuIGBhYAogICAgICAgIGlzIHJlYWwgdGhlIHJlc3VsdGluZyBlaWdlbnZhbHVlcyB3aWxsIGJlIHJlYWwgKDAgaW1hZ2luYXJ5CiAgICAgICAgcGFydCkgb3Igb2NjdXIgaW4gY29uanVnYXRlIHBhaXJzCgogICAgZWlnZW52ZWN0b3JzIDogKC4uLiwgTSwgTSkgYXJyYXkKICAgICAgICBUaGUgbm9ybWFsaXplZCAodW5pdCAibGVuZ3RoIikgZWlnZW52ZWN0b3JzLCBzdWNoIHRoYXQgdGhlCiAgICAgICAgY29sdW1uIGBgZWlnZW52ZWN0b3JzWzosaV1gYCBpcyB0aGUgZWlnZW52ZWN0b3IgY29ycmVzcG9uZGluZyB0byB0aGUKICAgICAgICBlaWdlbnZhbHVlIGBgZWlnZW52YWx1ZXNbaV1gYC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgICBJZiB0aGUgZWlnZW52YWx1ZSBjb21wdXRhdGlvbiBkb2VzIG5vdCBjb252ZXJnZS4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGVpZ3ZhbHMgOiBlaWdlbnZhbHVlcyBvZiBhIG5vbi1zeW1tZXRyaWMgYXJyYXkuCiAgICBlaWdoIDogZWlnZW52YWx1ZXMgYW5kIGVpZ2VudmVjdG9ycyBvZiBhIHJlYWwgc3ltbWV0cmljIG9yIGNvbXBsZXgKICAgICAgICAgICBIZXJtaXRpYW4gKGNvbmp1Z2F0ZSBzeW1tZXRyaWMpIGFycmF5LgogICAgZWlndmFsc2ggOiBlaWdlbnZhbHVlcyBvZiBhIHJlYWwgc3ltbWV0cmljIG9yIGNvbXBsZXggSGVybWl0aWFuCiAgICAgICAgICAgICAgIChjb25qdWdhdGUgc3ltbWV0cmljKSBhcnJheS4KICAgIHNjaXB5LmxpbmFsZy5laWcgOiBTaW1pbGFyIGZ1bmN0aW9uIGluIFNjaVB5IHRoYXQgYWxzbyBzb2x2ZXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbGl6ZWQgZWlnZW52YWx1ZSBwcm9ibGVtLgogICAgc2NpcHkubGluYWxnLnNjaHVyIDogQmVzdCBjaG9pY2UgZm9yIHVuaXRhcnkgYW5kIG90aGVyIG5vbi1IZXJtaXRpYW4KICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbCBtYXRyaWNlcy4KCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjguMAoKICAgIEJyb2FkY2FzdGluZyBydWxlcyBhcHBseSwgc2VlIHRoZSBgbnVtcHkubGluYWxnYCBkb2N1bWVudGF0aW9uIGZvcgogICAgZGV0YWlscy4KCiAgICBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBgYF9nZWV2YGAgTEFQQUNLIHJvdXRpbmVzIHdoaWNoIGNvbXB1dGUKICAgIHRoZSBlaWdlbnZhbHVlcyBhbmQgZWlnZW52ZWN0b3JzIG9mIGdlbmVyYWwgc3F1YXJlIGFycmF5cy4KCiAgICBUaGUgbnVtYmVyIGB3YCBpcyBhbiBlaWdlbnZhbHVlIG9mIGBhYCBpZiB0aGVyZSBleGlzdHMgYSB2ZWN0b3IgYHZgIHN1Y2gKICAgIHRoYXQgYGBhIEAgdiA9IHcgKiB2YGAuIFRodXMsIHRoZSBhcnJheXMgYGFgLCBgZWlnZW52YWx1ZXNgLCBhbmQKICAgIGBlaWdlbnZlY3RvcnNgIHNhdGlzZnkgdGhlIGVxdWF0aW9ucyBgYGEgQCBlaWdlbnZlY3RvcnNbOixpXSA9CiAgICBlaWdlbnZhbHVlc1tpXSAqIGVpZ2VudmFsdWVzWzosaV1gYCBmb3IgOm1hdGg6YGkgXGluIFx7MCwuLi4sTS0xXH1gLgoKICAgIFRoZSBhcnJheSBgZWlnZW52ZWN0b3JzYCBtYXkgbm90IGJlIG9mIG1heGltdW0gcmFuaywgdGhhdCBpcywgc29tZSBvZiB0aGUKICAgIGNvbHVtbnMgbWF5IGJlIGxpbmVhcmx5IGRlcGVuZGVudCwgYWx0aG91Z2ggcm91bmQtb2ZmIGVycm9yIG1heSBvYnNjdXJlCiAgICB0aGF0IGZhY3QuIElmIHRoZSBlaWdlbnZhbHVlcyBhcmUgYWxsIGRpZmZlcmVudCwgdGhlbiB0aGVvcmV0aWNhbGx5IHRoZQogICAgZWlnZW52ZWN0b3JzIGFyZSBsaW5lYXJseSBpbmRlcGVuZGVudCBhbmQgYGFgIGNhbiBiZSBkaWFnb25hbGl6ZWQgYnkgYQogICAgc2ltaWxhcml0eSB0cmFuc2Zvcm1hdGlvbiB1c2luZyBgZWlnZW52ZWN0b3JzYCwgaS5lLCBgYGludihlaWdlbnZlY3RvcnMpIEAKICAgIGEgQCBlaWdlbnZlY3RvcnNgYCBpcyBkaWFnb25hbC4KCiAgICBGb3Igbm9uLUhlcm1pdGlhbiBub3JtYWwgbWF0cmljZXMgdGhlIFNjaVB5IGZ1bmN0aW9uIGBzY2lweS5saW5hbGcuc2NodXJgCiAgICBpcyBwcmVmZXJyZWQgYmVjYXVzZSB0aGUgbWF0cml4IGBlaWdlbnZlY3RvcnNgIGlzIGd1YXJhbnRlZWQgdG8gYmUKICAgIHVuaXRhcnksIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSB3aGVuIHVzaW5nIGBlaWdgLiBUaGUgU2NodXIgZmFjdG9yaXphdGlvbgogICAgcHJvZHVjZXMgYW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXggcmF0aGVyIHRoYW4gYSBkaWFnb25hbCBtYXRyaXgsIGJ1dCBmb3IKICAgIG5vcm1hbCBtYXRyaWNlcyBvbmx5IHRoZSBkaWFnb25hbCBvZiB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXggaXMKICAgIG5lZWRlZCwgdGhlIHJlc3QgaXMgcm91bmRvZmYgZXJyb3IuCgogICAgRmluYWxseSwgaXQgaXMgZW1waGFzaXplZCB0aGF0IGBlaWdlbnZlY3RvcnNgIGNvbnNpc3RzIG9mIHRoZSAqcmlnaHQqIChhcwogICAgaW4gcmlnaHQtaGFuZCBzaWRlKSBlaWdlbnZlY3RvcnMgb2YgYGFgLiBBIHZlY3RvciBgeWAgc2F0aXNmeWluZyBgYHkuVCBAIGEKICAgID0geiAqIHkuVGBgIGZvciBzb21lIG51bWJlciBgemAgaXMgY2FsbGVkIGEgKmxlZnQqIGVpZ2VudmVjdG9yIG9mIGBhYCwKICAgIGFuZCwgaW4gZ2VuZXJhbCwgdGhlIGxlZnQgYW5kIHJpZ2h0IGVpZ2VudmVjdG9ycyBvZiBhIG1hdHJpeCBhcmUgbm90CiAgICBuZWNlc3NhcmlseSB0aGUgKHBlcmhhcHMgY29uanVnYXRlKSB0cmFuc3Bvc2VzIG9mIGVhY2ggb3RoZXIuCgogICAgUmVmZXJlbmNlcwogICAgLS0tLS0tLS0tLQogICAgRy4gU3RyYW5nLCAqTGluZWFyIEFsZ2VicmEgYW5kIEl0cyBBcHBsaWNhdGlvbnMqLCAybmQgRWQuLCBPcmxhbmRvLCBGTCwKICAgIEFjYWRlbWljIFByZXNzLCBJbmMuLCAxOTgwLCBWYXJpb3VzIHBwLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkgaW1wb3J0IGxpbmFsZyBhcyBMQQoKICAgIChBbG1vc3QpIHRyaXZpYWwgZXhhbXBsZSB3aXRoIHJlYWwgZWlnZW52YWx1ZXMgYW5kIGVpZ2VudmVjdG9ycy4KCiAgICA+Pj4gZWlnZW52YWx1ZXMsIGVpZ2VudmVjdG9ycyA9IExBLmVpZyhucC5kaWFnKCgxLCAyLCAzKSkpCiAgICA+Pj4gZWlnZW52YWx1ZXMKICAgIGFycmF5KFsxLiwgMi4sIDMuXSkKICAgID4+PiBlaWdlbnZlY3RvcnMKICAgIGFycmF5KFtbMS4sIDAuLCAwLl0sCiAgICAgICAgICAgWzAuLCAxLiwgMC5dLAogICAgICAgICAgIFswLiwgMC4sIDEuXV0pCgogICAgUmVhbCBtYXRyaXggcG9zc2Vzc2luZyBjb21wbGV4IGVpZ2VudmFsdWVzIGFuZCBlaWdlbnZlY3RvcnM7IG5vdGUgdGhhdCB0aGUKICAgIGVpZ2VudmFsdWVzIGFyZSBjb21wbGV4IGNvbmp1Z2F0ZXMgb2YgZWFjaCBvdGhlci4KCiAgICA+Pj4gZWlnZW52YWx1ZXMsIGVpZ2VudmVjdG9ycyA9IExBLmVpZyhucC5hcnJheShbWzEsIC0xXSwgWzEsIDFdXSkpCiAgICA+Pj4gZWlnZW52YWx1ZXMKICAgIGFycmF5KFsxLisxLmosIDEuLTEual0pCiAgICA+Pj4gZWlnZW52ZWN0b3JzCiAgICBhcnJheShbWzAuNzA3MTA2NzgrMC5qICAgICAgICAsIDAuNzA3MTA2NzgtMC5qICAgICAgICBdLAogICAgICAgICAgIFswLiAgICAgICAgLTAuNzA3MTA2NzhqLCAwLiAgICAgICAgKzAuNzA3MTA2NzhqXV0pCgogICAgQ29tcGxleC12YWx1ZWQgbWF0cml4IHdpdGggcmVhbCBlaWdlbnZhbHVlcyAoYnV0IGNvbXBsZXgtdmFsdWVkIGVpZ2VudmVjdG9ycyk7CiAgICBub3RlIHRoYXQgYGBhLmNvbmooKS5UID09IGFgYCwgaS5lLiwgYGFgIGlzIEhlcm1pdGlhbi4KCiAgICA+Pj4gYSA9IG5wLmFycmF5KFtbMSwgMWpdLCBbLTFqLCAxXV0pCiAgICA+Pj4gZWlnZW52YWx1ZXMsIGVpZ2VudmVjdG9ycyA9IExBLmVpZyhhKQogICAgPj4+IGVpZ2VudmFsdWVzCiAgICBhcnJheShbMi4rMC5qLCAwLiswLmpdKQogICAgPj4+IGVpZ2VudmVjdG9ycwogICAgYXJyYXkoW1sgMC4gICAgICAgICswLjcwNzEwNjc4aiwgIDAuNzA3MTA2NzgrMC5qICAgICAgICBdLCAjIG1heSB2YXJ5CiAgICAgICAgICAgWyAwLjcwNzEwNjc4KzAuaiAgICAgICAgLCAtMC4gICAgICAgICswLjcwNzEwNjc4al1dKQoKICAgIEJlIGNhcmVmdWwgYWJvdXQgcm91bmQtb2ZmIGVycm9yIQoKICAgID4+PiBhID0gbnAuYXJyYXkoW1sxICsgMWUtOSwgMF0sIFswLCAxIC0gMWUtOV1dKQog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cyB3aGV0aGVyIHRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIHdpdGggdGhlIGxvd2VyIHRyaWFuZ3VsYXIKICAgICAgICBwYXJ0IG9mIGBhYCAoJ0wnLCBkZWZhdWx0KSBvciB0aGUgdXBwZXIgdHJpYW5ndWxhciBwYXJ0ICgnVScpLgogICAgICAgIElycmVzcGVjdGl2ZSBvZiB0aGlzIHZhbHVlIG9ubHkgdGhlIHJlYWwgcGFydHMgb2YgdGhlIGRpYWdvbmFsIHdpbGwKICAgICAgICBiZSBjb25zaWRlcmVkIGluIHRoZSBjb21wdXRhdGlvbiB0byBwcmVzZXJ2ZSB0aGUgbm90aW9uIG9mIGEgSGVybWl0aWFuCiAgICAgICAgbWF0cml4LiBJdCB0aGVyZWZvcmUgZm9sbG93cyB0aGF0IHRoZSBpbWFnaW5hcnkgcGFydCBvZiB0aGUgZGlhZ29uYWwKICAgICAgICB3aWxsIGFsd2F5cyBiZSB0cmVhdGVkIGFzIHplcm8uCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgQSBuYW1lZHR1cGxlIHdpdGggdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgoKICAgIGVpZ2VudmFsdWVzIDogKC4uLiwgTSkgbmRhcnJheQogICAgICAgIFRoZSBlaWdlbnZhbHVlcyBpbiBhc2NlbmRpbmcgb3JkZXIsIGVhY2ggcmVwZWF0ZWQgYWNjb3JkaW5nIHRvCiAgICAgICAgaXRzIG11bHRpcGxpY2l0eS4KICAgIGVpZ2VudmVjdG9ycyA6IHsoLi4uLCBNLCBNKSBuZGFycmF5LCAoLi4uLCBNLCBNKSBtYXRyaXh9CiAgICAgICAgVGhlIGNvbHVtbiBgYGVpZ2VudmVjdG9yc1s6LCBpXWBgIGlzIHRoZSBub3JtYWxpemVkIGVpZ2VudmVjdG9yCiAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgZWlnZW52YWx1ZSBgYGVpZ2VudmFsdWVzW2ldYGAuICBXaWxsIHJldHVybiBhCiAgICAgICAgbWF0cml4IG9iamVjdCBpZiBgYWAgaXMgYSBtYXRyaXggb2JqZWN0LgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBMaW5BbGdFcnJvcgogICAgICAgIElmIHRoZSBlaWdlbnZhbHVlIGNvbXB1dGF0aW9uIGRvZXMgbm90IGNvbnZlcmdlLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgZWlndmFsc2ggOiBlaWdlbnZhbHVlcyBvZiByZWFsIHN5bW1ldHJpYyBvciBjb21wbGV4IEhlcm1pdGlhbgogICAgICAgICAgICAgICAoY29uanVnYXRlIHN5bW1ldHJpYykgYXJyYXlzLgogICAgZWlnIDogZWlnZW52YWx1ZXMgYW5kIHJpZ2h0IGVpZ2VudmVjdG9ycyBmb3Igbm9uLXN5bW1ldHJpYyBhcnJheXMuCiAgICBlaWd2YWxzIDogZWlnZW52YWx1ZXMgb2Ygbm9uLXN5bW1ldHJpYyBhcnJheXMuCiAgICBzY2lweS5saW5hbGcuZWlnaCA6IFNpbWlsYXIgZnVuY3Rpb24gaW4gU2NpUHkgKGJ1dCBhbHNvIHNvbHZlcyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbGl6ZWQgZWlnZW52YWx1ZSBwcm9ibGVtKS4KCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjguMAoKICAgIEJyb2FkY2FzdGluZyBydWxlcyBhcHBseSwgc2VlIHRoZSBgbnVtcHkubGluYWxnYCBkb2N1bWVudGF0aW9uIGZvcgogICAgZGV0YWlscy4KCiAgICBUaGUgZWlnZW52YWx1ZXMvZWlnZW52ZWN0b3JzIGFyZSBjb21wdXRlZCB1c2luZyBMQVBBQ0sgcm91dGluZXMgYGBfc3lldmRgYCwKICAgIGBgX2hlZXZkYGAuCgogICAgVGhlIGVpZ2VudmFsdWVzIG9mIHJlYWwgc3ltbWV0cmljIG9yIGNvbXBsZXggSGVybWl0aWFuIG1hdHJpY2VzIGFyZSBhbHdheXMKICAgIHJlYWwuIFsxXV8gVGhlIGFycmF5IGBlaWdlbnZhbHVlc2Agb2YgKGNvbHVtbikgZWlnZW52ZWN0b3JzIGlzIHVuaXRhcnkgYW5kCiAgICBgYWAsIGBlaWdlbnZhbHVlc2AsIGFuZCBgZWlnZW52ZWN0b3JzYCBzYXRpc2Z5IHRoZSBlcXVhdGlvbnMgYGBkb3QoYSwKICAgIGVpZ2VudmVjdG9yc1s6LCBpXSkgPSBlaWdlbnZhbHVlc1tpXSAqIGVpZ2VudmVjdG9yc1s6LCBpXWBgLgoKICAgIFJlZmVyZW5jZXMKICAgIC0tLS0tLS0tLS0KICAgIC4uIFsxXSBHLiBTdHJhbmcsICpMaW5lYXIgQWxnZWJyYSBhbmQgSXRzIEFwcGxpY2F0aW9ucyosIDJuZCBFZC4sIE9ybGFuZG8sCiAgICAgICAgICAgRkwsIEFjYWRlbWljIFByZXNzLCBJbmMuLCAxOTgwLCBwZy4gMjIyLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkgaW1wb3J0IGxpbmFsZyBhcyBMQQogICAgPj4+IGEgPSBucC5hcnJheShbWzEsIC0yal0sIFsyaiwgNV1dKQogICAgPj4+IGEKICAgIGFycmF5KFtbIDEuKzAuaiwgLTAuLTIual0sCiAgICAgICAgICAgWyAwLisyLmosICA1LiswLmpdXSkKICAgID4+PiBlaWdlbnZhbHVlcywgZWlnZW52ZWN0b3JzID0gTEEuZWlnaChhKQogICAgPj4+IGVpZ2VudmFsdWVzCiAgICBhcnJheShbMC4xNzE1NzI4OCwgNS44Mjg0MjcxMl0pCiAgICA+Pj4gZWlnZW52ZWN0b3JzCiAgICBhcnJheShbWy0wLjkyMzg3OTUzKzAuaiAgICAgICAgLCAtMC4zODI2ODM0MyswLmogICAgICAgIF0sICMgbWF5IHZhcnkKICAgICAgICAgICBbIDAuICAgICAgICArMC4zODI2ODM0M2osICAwLiAgICAgICAgLTAuOTIzODc5NTNqXV0pCgogICAgPj4+IG5wLmRvdChhLCBlaWdlbnZlY3RvcnNbOiwgMF0pIC0gZWlnZW52YWx1ZXNbMF0gKiBlaWdlbnZlY3RvcnNbOiwgMF0gIyB2ZXJpZnkgMXN0IGVpZ2VudmFsL3ZlYyBwYWlyCiAgICBhcnJheShbNS41NTExMTUxMmUtMTcrMC4wMDAwMDAwZSswMGosIDAuMDAwMDAwMDBlKzAwKzEuMjQ5MDAwOWUtMTZqXSkKICAgID4+PiBucC5kb3QoYSwgZWlnZW52ZWN0b3JzWzosIDFdKSAtIGVpZ2VudmFsdWVzWzFdICogZWlnZW52ZWN0b3JzWzosIDFdICMgdmVyaWZ5IDJuZCBlaWdlbnZhbC92ZWMgcGFpcgogICAgYXJyYXkoWzAuKzAuaiwgMC4rMC5qXSkKCiAgICA+Pj4gQSA9IG5wLm1hdHJpeChhKSAjIHdoYXQgaGFwcGVucyBpZiBpbnB1dCBpcyBhIG1hdHJpeCBvYmplY3QKICAgID4+PiBBCiAgICBtYXRyaXgoW1sgMS4rMC5qLCAtMC4tMi5qXSwKICAgICAgICAgICAgWyAwLisyLmosICA1LiswLmpdXSkKICAgID4+PiBlaWdlbnZhbHVlcywgZWlnZW52ZWN0b3JzID0gTEEuZWlnaChBKQogICAgPj4+IGVpZ2VudmFsdWVzCiAgICBhcnJheShbMC4xNzE1NzI4OCwgNS44Mjg0MjcxMl0pCiAgICA+Pj4gZWlnZW52ZWN0b3JzCiAgICBtYXRyaXgoW1stMC45MjM4Nzk1MyswLmogICAgICAgICwgLTAuMzgyNjgzNDMrMC5qICAgICAgICBdLCAjIG1heSB2YXJ5CiAgICAgICAgICAgIFsgMC4gICAgICAgICswLjM4MjY4MzQzaiwgIDAuICAgICAgICAtMC45MjM4Nzk1M2pdXSkKCiAgICA+Pj4gIyBkZW1vbnN0cmF0ZSB0aGUgdHJlYXRtZW50IG9mIHRoZSBpbWFnaW5hcnkgcGFydCBvZiB0aGUgZGlhZ29uYWwKICAgID4+PiBhID0gbnAuYXJyYXkoW1s1KzJqLCA5LTJqXSwgWzArMmosIDItMWpdXSkKICAgID4+PiBhCiAgICBhcnJheShbWzUuKzIuaiwgOS4tMi5qXSwKICAgICAgICAgICBbMC4rMi5qLCAyLi0xLmpdXSkKICAgID4+PiAjIHdpdGggVVBMTz0nTCcgdGhpcyBpcyBudW1lcmljYWxseSBlcXVpdmFsZW50IHRvIHVzaW5nIExBLmVpZygpIHdpdGg6CiAgICA+Pj4gYiA9IG5wLmFycmF5KFtbNS4rMC5qLCAwLi0yLmpdLCBbMC4rMi5qLCAyLi0wLmpdXSkKICAgID4+PiBiCiAgICBhcnJheShbWzUuKzAuaiwgMC4tMi5qXSwKICAgICAgICAgICBbMC4rMi5q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YW4gdHJhbnNwb3NlIG9mIGB2aGAgYXJlIDJEIGFycmF5cyB3aXRoCiAgICBvcnRob25vcm1hbCBjb2x1bW5zIGFuZCBgc2AgaXMgYSAxRCBhcnJheSBvZiBgYWAncyBzaW5ndWxhcgogICAgdmFsdWVzLiBXaGVuIGBhYCBpcyBoaWdoZXItZGltZW5zaW9uYWwsIFNWRCBpcyBhcHBsaWVkIGluCiAgICBzdGFja2VkIG1vZGUgYXMgZXhwbGFpbmVkIGJlbG93LgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGEgOiAoLi4uLCBNLCBOKSBhcnJheV9saWtlCiAgICAgICAgQSByZWFsIG9yIGNvbXBsZXggYXJyYXkgd2l0aCBgYGEubmRpbSA+PSAyYGAuCiAgICBmdWxsX21hdHJpY2VzIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICBJZiBUcnVlIChkZWZhdWx0KSwgYHVgIGFuZCBgdmhgIGhhdmUgdGhlIHNoYXBlcyBgYCguLi4sIE0sIE0pYGAgYW5kCiAgICAgICAgYGAoLi4uLCBOLCBOKWBgLCByZXNwZWN0aXZlbHkuICBPdGhlcndpc2UsIHRoZSBzaGFwZXMgYXJlCiAgICAgICAgYGAoLi4uLCBNLCBLKWBgIGFuZCBgYCguLi4sIEssIE4pYGAsIHJlc3BlY3RpdmVseSwgd2hlcmUKICAgICAgICBgYEsgPSBtaW4oTSwgTilgYC4KICAgIGNvbXB1dGVfdXYgOiBib29sLCBvcHRpb25hbAogICAgICAgIFdoZXRoZXIgb3Igbm90IHRvIGNvbXB1dGUgYHVgIGFuZCBgdmhgIGluIGFkZGl0aW9uIHRvIGBzYC4gIFRydWUKICAgICAgICBieSBkZWZhdWx0LgogICAgaGVybWl0aWFuIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICBJZiBUcnVlLCBgYWAgaXMgYXNzdW1lZCB0byBiZSBIZXJtaXRpYW4gKHN5bW1ldHJpYyBpZiByZWFsLXZhbHVlZCksCiAgICAgICAgZW5hYmxpbmcgYSBtb3JlIGVmZmljaWVudCBtZXRob2QgZm9yIGZpbmRpbmcgc2luZ3VsYXIgdmFsdWVzLgogICAgICAgIERlZmF1bHRzIHRvIEZhbHNlLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjE3LjAKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBXaGVuIGBjb21wdXRlX3V2YCBpcyBUcnVlLCB0aGUgcmVzdWx0IGlzIGEgbmFtZWR0dXBsZSB3aXRoIHRoZSBmb2xsb3dpbmcKICAgIGF0dHJpYnV0ZSBuYW1lczoKCiAgICBVIDogeyAoLi4uLCBNLCBNKSwgKC4uLiwgTSwgSykgfSBhcnJheQogICAgICAgIFVuaXRhcnkgYXJyYXkocykuIFRoZSBmaXJzdCBgYGEubmRpbSAtIDJgYCBkaW1lbnNpb25zIGhhdmUgdGhlIHNhbWUKICAgICAgICBzaXplIGFzIHRob3NlIG9mIHRoZSBpbnB1dCBgYWAuIFRoZSBzaXplIG9mIHRoZSBsYXN0IHR3byBkaW1lbnNpb25zCiAgICAgICAgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgYGZ1bGxfbWF0cmljZXNgLiBPbmx5IHJldHVybmVkIHdoZW4KICAgICAgICBgY29tcHV0ZV91dmAgaXMgVHJ1ZS4KICAgIFMgOiAoLi4uLCBLKSBhcnJheQogICAgICAgIFZlY3RvcihzKSB3aXRoIHRoZSBzaW5ndWxhciB2YWx1ZXMsIHdpdGhpbiBlYWNoIHZlY3RvciBzb3J0ZWQgaW4KICAgICAgICBkZXNjZW5kaW5nIG9yZGVyLiBUaGUgZmlyc3QgYGBhLm5kaW0gLSAyYGAgZGltZW5zaW9ucyBoYXZlIHRoZSBzYW1lCiAgICAgICAgc2l6ZSBhcyB0aG9zZSBvZiB0aGUgaW5wdXQgYGFgLgogICAgVmggOiB7ICguLi4sIE4sIE4pLCAoLi4uLCBLLCBOKSB9IGFycmF5CiAgICAgICAgVW5pdGFyeSBhcnJheShzKS4gVGhlIGZpcnN0IGBgYS5uZGltIC0gMmBgIGRpbWVuc2lvbnMgaGF2ZSB0aGUgc2FtZQogICAgICAgIHNpemUgYXMgdGhvc2Ugb2YgdGhlIGlucHV0IGBhYC4gVGhlIHNpemUgb2YgdGhlIGxhc3QgdHdvIGRpbWVuc2lvbnMKICAgICAgICBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBgZnVsbF9tYXRyaWNlc2AuIE9ubHkgcmV0dXJuZWQgd2hlbgogICAgICAgIGBjb21wdXRlX3V2YCBpcyBUcnVlLgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBMaW5BbGdFcnJvcgogICAgICAgIElmIFNWRCBjb21wdXRhdGlvbiBkb2VzIG5vdCBjb252ZXJnZS4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIHNjaXB5LmxpbmFsZy5zdmQgOiBTaW1pbGFyIGZ1bmN0aW9uIGluIFNjaVB5LgogICAgc2NpcHkubGluYWxnLnN2ZHZhbHMgOiBDb21wdXRlIHNpbmd1bGFyIHZhbHVlcyBvZiBhIG1hdHJpeC4KCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDEuOC4wCiAgICAgICBCcm9hZGNhc3RpbmcgcnVsZXMgYXBwbHksIHNlZSB0aGUgYG51bXB5LmxpbmFsZ2AgZG9jdW1lbnRhdGlvbiBmb3IKICAgICAgIGRldGFpbHMuCgogICAgVGhlIGRlY29tcG9zaXRpb24gaXMgcGVyZm9ybWVkIHVzaW5nIExBUEFDSyByb3V0aW5lIGBgX2dlc2RkYGAuCgogICAgU1ZEIGlzIHVzdWFsbHkgZGVzY3JpYmVkIGZvciB0aGUgZmFjdG9yaXphdGlvbiBvZiBhIDJEIG1hdHJpeCA6bWF0aDpgQWAuCiAgICBUaGUgaGlnaGVyLWRpbWVuc2lvbmFsIGNhc2Ugd2lsbCBiZSBkaXNjdXNzZWQgYmVsb3cuIEluIHRoZSAyRCBjYXNlLCBTVkQgaXMKICAgIHdyaXR0ZW4gYXMgOm1hdGg6YEEgPSBVIFMgVl5IYCwgd2hlcmUgOm1hdGg6YEEgPSBhYCwgOm1hdGg6YFU9IHVgLAogICAgOm1hdGg6YFM9IFxtYXRodHR7bnAuZGlhZ30ocylgIGFuZCA6bWF0aDpgVl5IID0gdmhgLiBUaGUgMUQgYXJyYXkgYHNgCiAgICBjb250YWlucyB0aGUgc2luZ3VsYXIgdmFsdWVzIG9mIGBhYCBhbmQgYHVgIGFuZCBgdmhgIGFyZSB1bml0YXJ5LiBUaGUgcm93cwogICAgb2YgYHZoYCBhcmUgdGhlIGVpZ2VudmVjdG9ycyBvZiA6bWF0aDpgQV5IIEFgIGFuZCB0aGUgY29sdW1ucyBvZiBgdWAgYXJlCiAgICB0aGUgZWlnZW52ZWN0b3JzIG9mIDptYXRoOmBBIEFeSGAuIEluIGJvdGggY2FzZXMgdGhlIGNvcnJlc3BvbmRpbmcKICAgIChwb3NzaWJseSBub24temVybykgZWlnZW52YWx1ZXMgYXJlIGdpdmVuIGJ5IGBgcyoqMmBgLgoKICAgIElmIGBhYCBoYXMgbW9yZSB0aGFuIHR3byBkaW1lbnNpb25zLCB0aGVuIGJyb2FkY2FzdGluZyBydWxlcyBhcHBseSwgYXMKICAgIGV4cGxhaW5lZCBpbiA6cmVmOmByb3V0aW5lcy5saW5hbGctYnJvYWRjYXN0aW5nYC4gVGhpcyBtZWFucyB0aGF0IFNWRCBpcwogICAgd29ya2luZyBpbiAic3RhY2tlZCIgbW9kZTogaXQgaXRlcmF0ZXMgb3ZlciBhbGwgaW5kaWNlcyBvZiB0aGUgZmlyc3QKICAgIGBgYS5uZGltIC0gMmBgIGRpbWVuc2lvbnMgYW5kIGZvciBlYWNoIGNvbWJpbmF0aW9uIFNWRCBpcyBhcHBsaWVkIHRvIHRoZQogICAgbGFzdCB0d28gaW5kaWNlcy4gVGhlIG1hdHJpeCBgYWAgY2FuIGJlIHJlY29uc3RydWN0ZWQgZnJvbSB0aGUKICAgIGRlY29tcG9zaXRpb24gd2l0aCBlaXRoZXIgYGAodSAqIHNbLi4uLCBOb25lLCA6XSkgQCB2aGBgIG9yCiAgICBgYHUgQCAoc1suLi4sIE5vbmVdICogdmgpYGAuIChUaGUgYGBAYGAgb3BlcmF0b3IgY2FuIGJlIHJlcGxhY2VkIGJ5IHRoZQogICAgZnVuY3Rpb24gYGBucC5tYXRtdWxgYCBmb3IgcHl0aG9uIHZlcnNpb25zIGJlbG93IDMuNS4pCgogICAgSWYgYGFgIGlzIGEgYGBtYXRyaXhgYCBvYmplY3QgKGFzIG9wcG9zZWQgdG8gYW4gYGBuZGFycmF5YGApLCB0aGVuIHNvIGFyZQogICAgYWxsIHRoZSByZXR1cm4gdmFsdWVzLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGEgPSBucC5yYW5kb20ucmFuZG4oOSwgNikgKyAxaipucC5yYW5kb20ucmFuZG4oOSwgNikKICAgID4+PiBiID0gbnAucmFuZG9tLnJhbmRuKDIsIDcsIDgsIDMpICsgMWoqbnAucmFuZG9tLnJhbmRuKDIsIDcsIDgsIDMpCgogICAgUmVjb25zdHJ1Y3Rpb24gYmFzZWQgb24gZnVsbCBTVkQsIDJEIGNhc2U6CgogICAgPj4+IFUsIFMsIFZoID0gbnAubGluYWxnLnN2ZChhLCBmdWxsX21hdHJpY2VzPVRydWUpCiAgICA+Pj4gVS5zaGFwZSwgUy5zaGFwZSwgVmguc2hhcGUKICAgICgoOSwgOSksICg2LCksICg2LCA2KSkKICAgID4+PiBucC5hbGxjbG9zZShhLCBucC5kb3QoVVs6LCA6Nl0gKiBTLCBWaCkpCiAgICBUcnVlCiAgICA+Pj4gc21hdCA9IG5wLnplcm9zKCg5LCA2KSwgZHR5cGU9Y29tcGxleCkKICAgID4+PiBzbWF0Wzo2LCA6Nl0gPSBucC5kaWFnKFMpCiAgICA+Pj4gbnAuYWxsY2xvc2UoYSwgbnAuZG90KFUsIG5wLmRvdChzbWF0LCBWaCkpKQogICAgVHJ1ZQoKICAgIFJlY29uc3RydWN0aW9uIGJhc2VkIG9uIHJlZHVjZWQgU1ZELCAyRCBjYXNlOgoKICAgID4+PiBVLCBTLCBWaCA9IG5wLmxpbmFsZy5zdmQoYSwgZnVsbF9tYXRyaWNlcz1GYWxzZSkKICAgID4+PiBVLnNoYXBlLCBTLnNoYXBlLCBWaC5zaGFwZQogICAgKCg5LCA2KSwgKDYsKSwgKDYsIDYpKQogICAgPj4+IG5wLmFsbGNsb3NlKGEsIG5wLmRvdChVICogUywgVmgpKQogICAgVHJ1ZQogICAgPj4+IHNtYXQgPSBucC5kaWFnKFMpCiAgICA+Pj4gbnAuYWxsY2xvc2UoYSwgbnAuZG90KFUsIG5wLmRvdChzbWF0LCBWaCkpKQogICAgVHJ1ZQoKICAgIFJlY29uc3RydWN0aW9uIGJhc2VkIG9uIGZ1bGwgU1ZELCA0RCBjYXNlOgoKICAgID4+PiBVLCBTLCBWaCA9IG5wLmxpbmFsZy5zdmQoYiwgZnVs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EWsEAAAAAHILdCAAAAAAAAAAAAAAfAN8CDwAAABuDHwIcgp0IAAAAAAAAAAAAAB8A2QSPAAAAHwDag8AAAAAAAAAAGQRawIAAAAAcgh8A2QSGQAAAAAAAAAAAH0DfANTACkTYdIIAAAKICAgIENvbXB1dGUgdGhlIGNvbmRpdGlvbiBudW1iZXIgb2YgYSBtYXRyaXguCgogICAgVGhpcyBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIHJldHVybmluZyB0aGUgY29uZGl0aW9uIG51bWJlciB1c2luZwogICAgb25lIG9mIHNldmVuIGRpZmZlcmVudCBub3JtcywgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBgcGAgKHNlZQogICAgUGFyYW1ldGVycyBiZWxvdykuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCA6ICguLi4sIE0sIE4pIGFycmF5X2xpa2UKICAgICAgICBUaGUgbWF0cml4IHdob3NlIGNvbmRpdGlvbiBudW1iZXIgaXMgc291Z2h0LgogICAgcCA6IHtOb25lLCAxLCAtMSwgMiwgLTIsIGluZiwgLWluZiwgJ2Zybyd9LCBvcHRpb25hbAogICAgICAgIE9yZGVyIG9mIHRoZSBub3JtIHVzZWQgaW4gdGhlIGNvbmRpdGlvbiBudW1iZXIgY29tcHV0YXRpb246CgogICAgICAgID09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgcCAgICAgIG5vcm0gZm9yIG1hdHJpY2VzCiAgICAgICAgPT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICBOb25lICAgMi1ub3JtLCBjb21wdXRlZCBkaXJlY3RseSB1c2luZyB0aGUgYGBTVkRgYAogICAgICAgICdmcm8nICBGcm9iZW5pdXMgbm9ybQogICAgICAgIGluZiAgICBtYXgoc3VtKGFicyh4KSwgYXhpcz0xKSkKICAgICAgICAtaW5mICAgbWluKHN1bShhYnMoeCksIGF4aXM9MSkpCiAgICAgICAgMSAgICAgIG1heChzdW0oYWJzKHgpLCBheGlzPTApKQogICAgICAgIC0xICAgICBtaW4oc3VtKGFicyh4KSwgYXhpcz0wKSkKICAgICAgICAyICAgICAgMi1ub3JtIChsYXJnZXN0IHNpbmcuIHZhbHVlKQogICAgICAgIC0yICAgICBzbWFsbGVzdCBzaW5ndWxhciB2YWx1ZQogICAgICAgID09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgIGluZiBtZWFucyB0aGUgYG51bXB5LmluZmAgb2JqZWN0LCBhbmQgdGhlIEZyb2Jlbml1cyBub3JtIGlzCiAgICAgICAgdGhlIHJvb3Qtb2Ytc3VtLW9mLXNxdWFyZXMgbm9ybS4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBjIDoge2Zsb2F0LCBpbmZ9CiAgICAgICAgVGhlIGNvbmRpdGlvbiBudW1iZXIgb2YgdGhlIG1hdHJpeC4gTWF5IGJlIGluZmluaXRlLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbnVtcHkubGluYWxnLm5vcm0KCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoZSBjb25kaXRpb24gbnVtYmVyIG9mIGB4YCBpcyBkZWZpbmVkIGFzIHRoZSBub3JtIG9mIGB4YCB0aW1lcyB0aGUKICAgIG5vcm0gb2YgdGhlIGludmVyc2Ugb2YgYHhgIFsxXV87IHRoZSBub3JtIGNhbiBiZSB0aGUgdXN1YWwgTDItbm9ybQogICAgKHJvb3Qtb2Ytc3VtLW9mLXNxdWFyZXMpIG9yIG9uZSBvZiBhIG51bWJlciBvZiBvdGhlciBtYXRyaXggbm9ybXMuCgogICAgUmVmZXJlbmNlcwogICAgLS0tLS0tLS0tLQogICAgLi4gWzFdIEcuIFN0cmFuZywgKkxpbmVhciBBbGdlYnJhIGFuZCBJdHMgQXBwbGljYXRpb25zKiwgT3JsYW5kbywgRkwsCiAgICAgICAgICAgQWNhZGVtaWMgUHJlc3MsIEluYy4sIDE5ODAsIHBnLiAyODUuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gZnJvbSBudW1weSBpbXBvcnQgbGluYWxnIGFzIExBCiAgICA+Pj4gYSA9IG5wLmFycmF5KFtbMSwgMCwg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IG9mIGBgU2BgLCB0aGVuIGB0b2xgIGlzCiAgICAgICAgc2V0IHRvIGBgUy5tYXgoKSAqIG1heChNLCBOKSAqIGVwc2BgLgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDEuMTQKICAgICAgICAgICBCcm9hZGNhc3RlZCBhZ2FpbnN0IHRoZSBzdGFjayBvZiBtYXRyaWNlcwogICAgaGVybWl0aWFuIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICBJZiBUcnVlLCBgQWAgaXMgYXNzdW1lZCB0byBiZSBIZXJtaXRpYW4gKHN5bW1ldHJpYyBpZiByZWFsLXZhbHVlZCksCiAgICAgICAgZW5hYmxpbmcgYSBtb3JlIGVmZmljaWVudCBtZXRob2QgZm9yIGZpbmRpbmcgc2luZ3VsYXIgdmFsdWVzLgogICAgICAgIERlZmF1bHRzIHRvIEZhbHNlLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjE0CgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgcmFuayA6ICguLi4pIGFycmF5X2xpa2UKICAgICAgICBSYW5rIG9mIEEuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBUaGUgZGVmYXVsdCB0aHJlc2hvbGQgdG8gZGV0ZWN0IHJhbmsgZGVmaWNpZW5jeSBpcyBhIHRlc3Qgb24gdGhlIG1hZ25pdHVkZQogICAgb2YgdGhlIHNpbmd1bGFyIHZhbHVlcyBvZiBgQWAuICBCeSBkZWZhdWx0LCB3ZSBpZGVudGlmeSBzaW5ndWxhciB2YWx1ZXMgbGVzcwogICAgdGhhbiBgYFMubWF4KCkgKiBtYXgoTSwgTikgKiBlcHNgYCBhcyBpbmRpY2F0aW5nIHJhbmsgZGVmaWNpZW5jeSAod2l0aAogICAgdGhlIHN5bWJvbHMgZGVmaW5lZCBhYm92ZSkuIFRoaXMgaXMgdGhlIGFsZ29yaXRobSBNQVRMQUIgdXNlcyBbMV0uICBJdCBhbHNvCiAgICBhcHBlYXJzIGluICpOdW1lcmljYWwgcmVjaXBlcyogaW4gdGhlIGRpc2N1c3Npb24gb2YgU1ZEIHNvbHV0aW9ucyBmb3IgbGluZWFyCiAgICBsZWFzdCBzcXVhcmVzIFsyXS4KCiAgICBUaGlzIGRlZmF1bHQgdGhyZXNob2xkIGlzIGRlc2lnbmVkIHRvIGRldGVjdCByYW5rIGRlZmljaWVuY3kgYWNjb3VudGluZyBmb3IKICAgIHRoZSBudW1lcmljYWwgZXJyb3JzIG9mIHRoZSBTVkQgY29tcHV0YXRpb24uICBJbWFnaW5lIHRoYXQgdGhlcmUgaXMgYSBjb2x1bW4KICAgIGluIGBBYCB0aGF0IGlzIGFuIGV4YWN0IChpbiBmbG9hdGluZyBwb2ludCkgbGluZWFyIGNvbWJpbmF0aW9uIG9mIG90aGVyCiAgICBjb2x1bW5zIGluIGBBYC4gQ29tcHV0aW5nIHRoZSBTVkQgb24gYEFgIHdpbGwgbm90IHByb2R1Y2UgYSBzaW5ndWxhciB2YWx1ZQogICAgZXhhY3RseSBlcXVhbCB0byAwIGluIGdlbmVyYWw6IGFueSBkaWZmZXJlbmNlIG9mIHRoZSBzbWFsbGVzdCBTVkQgdmFsdWUgZnJvbQogICAgMCB3aWxsIGJlIGNhdXNlZCBieSBudW1lcmljYWwgaW1wcmVjaXNpb24gaW4gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBTVkQuCiAgICBPdXIgdGhyZXNob2xkIGZvciBzbWFsbCBTVkQgdmFsdWVzIHRha2VzIHRoaXMgbnVtZXJpY2FsIGltcHJlY2lzaW9uIGludG8KICAgIGFjY291bnQsIGFuZCB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgd2lsbCBkZXRlY3Qgc3VjaCBudW1lcmljYWwgcmFuawogICAgZGVmaWNpZW5jeS4gIFRoZSB0aHJlc2hvbGQgbWF5IGRlY2xhcmUgYSBtYXRyaXggYEFgIHJhbmsgZGVmaWNpZW50IGV2ZW4gaWYKICAgIHRoZSBsaW5lYXIgY29tYmluYXRpb24gb2Ygc29tZSBjb2x1bW5zIG9mIGBBYCBpcyBub3QgZXhhY3RseSBlcXVhbCB0bwogICAgYW5vdGhlciBjb2x1bW4gb2YgYEFgIGJ1dCBvbmx5IG51bWVyaWNhbGx5IHZlcnkgY2xvc2UgdG8gYW5vdGhlciBjb2x1bW4gb2YKICAgIGBBYC4KCiAgICBXZSBjaG9zZSBvdXIgZGVmYXVsdCB0aHJlc2hvbGQgYmVjYXVzZSBpdCBpcyBpbiB3aWRlIHVzZS4gIE90aGVyIHRocmVzaG9sZHMKICAgIGFyZSBwb3NzaWJsZS4gIEZvciBleGFtcGxlLCBlbHNld2hlcmUgaW4gdGhlIDIwMDcgZWRpdGlvbiBvZiAqTnVtZXJpY2FsCiAgICByZWNpcGVzKiB0aGVyZSBpcyBhbiBhbHRlcm5hdGl2ZSB0aHJlc2hvbGQgb2YgYGBTLm1heCgpICoKICAgIG5wLmZpbmZvKEEuZHR5cGUpLmVwcyAvIDIuICogbnAuc3FydChtICsgbiArIDEuKWBgLiBUaGUgYXV0aG9ycyBkZXNjcmliZQogICAgdGhpcyB0aHJlc2hvbGQgYXMgYmVpbmcgYmFzZWQgb24gImV4cGVjdGVkIHJvdW5kb2ZmIGVycm9yIiAocCA3MSkuCgogICAgVGhlIHRocmVzaG9sZHMgYWJvdmUgZGVhbCB3aXRoIGZsb2F0aW5nIHBvaW50IHJvdW5kb2ZmIGVycm9yIGluIHRoZQogICAgY2FsY3VsYXRpb24gb2YgdGhlIFNWRC4gIEhvd2V2ZXIsIHlvdSBtYXkgaGF2ZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQogICAgc291cmNlcyBvZiBlcnJvciBpbiBgQWAgdGhhdCB3b3VsZCBtYWtlIHlvdSBjb25zaWRlciBvdGhlciB0b2xlcmFuY2UgdmFsdWVzCiAgICB0byBkZXRlY3QgKmVmZmVjdGl2ZSogcmFuayBkZWZpY2llbmN5LiAgVGhlIG1vc3QgdXNlZnVsIG1lYXN1cmUgb2YgdGhlCiAgICB0b2xlcmFuY2UgZGVwZW5kcyBvbiB0aGUgb3BlcmF0aW9ucyB5b3UgaW50ZW5kIHRvIHVzZSBvbiB5b3VyIG1hdHJpeC4gIEZvcgogICAgZXhhbXBsZSwgaWYgeW91ciBkYXRhIGNvbWUgZnJvbSB1bmNlcnRhaW4gbWVhc3VyZW1lbnRzIHdpdGggdW5jZXJ0YWludGllcwogICAgZ3JlYXRlciB0aGFuIGZsb2F0aW5nIHBvaW50IGVwc2lsb24sIGNob29zaW5nIGEgdG9sZXJhbmNlIG5lYXIgdGhhdAogICAgdW5jZXJ0YWludHkgbWF5IGJlIHByZWZlcmFibGUuICBUaGUgdG9sZXJhbmNlIG1heSBiZSBhYnNvbHV0ZSBpZiB0aGUKICAgIHVuY2VydGFpbnRpZXMgYXJlIGFic29sdXRlIHJhdGhlciB0aGFuIHJlbGF0aXZlLgoKICAgIFJlZmVyZW5jZXMKICAgIC0tLS0tLS0tLS0KICAgIC4uIFsxXSBNQVRMQUIgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24sICJSYW5rIgogICAgICAgICAgIGh0dHBzOi8vd3d3Lm1hdGh3b3Jrcy5jb20vaGVscC90ZWNoZG9jL3JlZi9yYW5rLmh0bWwKICAgIC4uIFsyXSBXLiBILiBQcmVzcywgUy4gQS4gVGV1a29sc2t5LCBXLiBULiBWZXR0ZXJsaW5nIGFuZCBCLiBQLiBGbGFubmVyeSwKICAgICAgICAgICAiTnVtZXJpY2FsIFJlY2lwZXMgKDNyZCBlZGl0aW9uKSIsIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzLCAyMDA3LAogICAgICAgICAgIHBhZ2UgNzk1LgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkubGluYWxnIGltcG9ydCBtYXRyaXhfcmFuawogICAgPj4+IG1hdHJpeF9yYW5rKG5wLmV5ZSg0KSkgIyBGdWxsIHJhbmsgbWF0cml4CiAgICA0CiAgICA+Pj4gST1ucC5leWUoNCk7IElbLTEsLTFdID0gMC4gIyByYW5rIGRlZmljaWVudCBtYXRyaXgKICAgID4+PiBtYXRyaXhfcmFuayhJKQogICAgMwogICAgPj4+IG1hdHJpeF9yYW5rKG5wLm9uZXMoKDQsKSkpICMgMSBkaW1lbnNpb24gLSByYW5rIDEgdW5sZXNzIGFsbCAwCiAgICAxCiAgICA+Pj4gbWF0cml4X3JhbmsobnAuemVyb3MoKDQsKSkpCiAgICAwCiAgICByGgAAAHIXAAAARikCckABAAByQQEAAE5yygAAAFSpAnJFAQAA2ghrZWVwZGltc3K/AAAALnJEAQAAKQxyHQAAAHK5AAAA2gNpbnRyKQAAAHINAAAA2gNtYXhywAAAAHIxAAAAcqIAAADaA2Vwc3IoAAAAckAAAAApBHJhAQAAcmIBAAByQQEAAHJlAAAAcwQAAAAgICAgclcAAAByFAAAAHIUAAAAIQcAAHO3AAAAgAD1fAIACRCQAYkKjAqAQdgHCIR2kAGCeoB63Q8SlXOYMZhhmjSReZR5kD3RDyHUDyHQCCHdCAuIQZglqDnQCDXRCDXUCDWAQdgHCoB72A4Pj2WKZZgSoGSIZdEOK9QOK61jsCG0J7giuCO4I7Qs0S4/1C4/0Q4/xSXIAcwHwS7ELtRCVNEOVIgDiAPlDhWQY4lsjGyYM6UHmDzUDiiIA90LGJgRmFOaF6By0Asq0Qsq1Asq0AQqclYAAABjAwAAAAAAAAAAAAAAAQAAAAMAAADzCAAAAJcAfABmAVMAcpQAAAByVQAAACkDco8AAADaBXJjb25kckEBAABzAwAAACAgIHJXAAAA2hBfcGludl9kaXNwYXRjaGVycmwBAACMBwAAcu8AAAByVgAAAOcWVueerwPSPGMDAAAAAAAAAAAAAAAJAAAAAwAAAPNiAgAAlwB0AQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAXAIAAH0AfQN0AwAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAfQF0BQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAckV8AGoDAAAAAAAAAABkAWQChQIZAAAAAAAAAAAAXAIAAH0EfQV0CQAAAAAAAAAAAAB8AGoDAAAAAAAAAABkAmQBhQIZAAAAAAAAAAAAfAV8BGYCegAAAHwAagUAAAAAAAAAAKwDpgIAAKsCAAAAAAAAAAB9BgIAfAN8BqYBAACrAQAAAAAAAAAAUwB8AKAGAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAH0AdA8AAAAAAAAAAAAAfABkBHwCrAWmAwAAqwMAAAAAAAAAAFwDAAB9B30IfQl8AWQGdBAAAAAAAAAAAAAAZgIZAAAAAAAAAAAAdBMAAAAAAAAAAAAAfAhkB2QIrAmmAwAAqwMAAAAAAAAAAHoFAAB9CnwIfAprBAAAAAB9C3QVAAAAAAAAAAAAAGQKfAh8C3wIrAumBAAAqwQAAAAAAAAAAH0IZAx8CHwLDwA8AAAAdBcAAAAAAAAAAAAAdBkAAAAAAAAAAAAAfAmmAQAAqwEAAAAAAAAAAHQbAAAAAAAAAAAAAHwIZAZ0EAAAAAAAAAAAAABmAhkAAAAAAAAAAAB0GQAAAAAAAAAAAAB8B6YBAACrAQAAAAAAAAAApgIAAKsCAAAAAAAAAACmAgAAqwIAAAAAAAAAAH0GAgB8A3wGpgEAAKsBAAAAAAAAAABTACkNYd8JAAAKICAgIENvbXB1dGUgdGhlIChNb29yZS1QZW5yb3NlKSBwc2V1ZG8taW52ZXJzZSBvZiBhIG1hdHJpeC4KCiAgICBDYWxjdWxhdGUgdGhlIGdlbmVyYWxpemVkIGludmVyc2Ugb2YgYSBtYXRyaXggdXNpbmcgaXRzCiAgICBzaW5ndWxhci12YWx1ZSBkZWNvbXBvc2l0aW9uIChTVkQpIGFuZCBpbmNsdWRpbmcgYWxsCiAgICAqbGFyZ2UqIHNpbmd1bGFyIHZhbHVlcy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDEuMTQKICAgICAgIENhbiBub3cgb3BlcmF0ZSBvbiBzdGFja3Mgb2YgbWF0cmljZXMKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogKC4uLiwgTSwgTikgYXJyYXlfbGlrZQogICAgICAgIE1hdHJpeCBvciBzdGFjayBvZiBtYXRyaWNlcyB0byBiZSBwc2V1ZG8taW52ZXJ0ZWQuCiAgICByY29uZCA6ICguLi4pIGFycmF5X2xpa2Ugb2YgZmxvYXQKICAgICAgICBDdXRvZmYgZm9yIHNtYWxsIHNpbmd1bGFyIHZhbHVlcy4KICAgICAgICBTaW5ndWxhciB2YWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCiAgICAgICAgYGByY29uZCAqIGxhcmdlc3Rfc2luZ3VsYXJfdmFsdWVgYCBhcmUgc2V0IHRvIHplcm8uCiAgICAgICAgQnJvYWRjYXN0cyBhZ2FpbnN0IHRoZSBzdGFjayBvZiBtYXRyaWNlcy4KICAgIGhlcm1pdGlhbiA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgSWYgVHJ1ZSwgYGFgIGlzIGFzc3VtZWQgdG8gYmUgSGVybWl0aWFuIChzeW1tZXRyaWMgaWYgcmVhbC12YWx1ZWQpLAogICAgICAgIGVuYWJsaW5nIGEgbW9yZSBlZmZpY2llbnQgbWV0aG9kIGZvciBmaW5kaW5nIHNpbmd1bGFyIHZhbHVlcy4KICAgICAgICBEZWZhdWx0cyB0byBGYWxzZS4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xNy4wCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgQiA6ICguLi4sIE4sIE0pIG5kYXJyYXkKICAgICAgICBUaGUgcHNldWRvLWludmVyc2Ugb2YgYGFgLiBJZiBgYWAgaXMgYSBgbWF0cml4YCBpbnN0YW5jZSwgdGhlbiBzbwogICAgICAgIGlzIGBCYC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgTGluQWxnRXJyb3IKICAgICAgICBJZiB0aGUgU1ZEIGNvbXB1dGF0aW9uIGRvZXMgbm90IGNvbnZlcmdlLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgc2NpcHkubGluYWxnLnBpbnYgOiBTaW1pbGFyIGZ1bmN0aW9uIGluIFNjaVB5LgogICAgc2NpcHkubGluYWxnLnBpbnZoIDogQ29tcHV0ZSB0aGUgKE1vb3JlLVBlbnJvc2UpIHBzZXVkby1pbnZlcnNlIG9mIGEKICAgICAgICAgICAgICAgICAgICAgICAgIEhlcm1pdGlhbiBtYXRyaXguCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBUaGUgcHNldWRvLWludmVyc2Ugb2YgYSBtYXRyaXggQSwgZGVub3RlZCA6bWF0aDpgQV4rYCwgaXMKICAgIGRlZmluZWQgYXM6ICJ0aGUgbWF0cml4IHRoYXQgJ3NvbHZlcycgW3RoZSBsZWFzdC1zcXVhcmVzIHByb2JsZW1dCiAgICA6bWF0aDpgQXggPSBiYCwiIGkuZS4sIGlmIDptYXRoOmBcYmFye3h9YCBpcyBzYWlkIHNvbHV0aW9uLCB0aGVuCiAgICA6bWF0aDpgQV4rYCBpcyB0aGF0IG1hdHJpeCBzdWNoIHRoYXQgOm1hdGg6YFxiYXJ7eH0gPSBBXitiYC4KCiAgICBJdCBjYW4gYmUgc2hvd24gdGhhdCBpZiA6bWF0aDpgUV8xIFxTaWdtYSBRXzJeVCA9IEFgIGlzIHRoZSBzaW5ndWxhcgogICAgdmFsdWUgZGVjb21wb3NpdGlvbiBvZiBBLCB0aGVuCiAgICA6bWF0aDpg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ZGV0ZXJtaW5hbnQgb2YgYW4gYXJyYXkuCgogICAgSWYgYW4gYXJyYXkgaGFzIGEgdmVyeSBzbWFsbCBvciB2ZXJ5IGxhcmdlIGRldGVybWluYW50LCB0aGVuIGEgY2FsbCB0bwogICAgYGRldGAgbWF5IG92ZXJmbG93IG9yIHVuZGVyZmxvdy4gVGhpcyByb3V0aW5lIGlzIG1vcmUgcm9idXN0IGFnYWluc3Qgc3VjaAogICAgaXNzdWVzLCBiZWNhdXNlIGl0IGNvbXB1dGVzIHRoZSBsb2dhcml0aG0gb2YgdGhlIGRldGVybWluYW50IHJhdGhlciB0aGFuCiAgICB0aGUgZGV0ZXJtaW5hbnQgaXRzZWxmLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGEgOiAoLi4uLCBNLCBNKSBhcnJheV9saWtlCiAgICAgICAgSW5wdXQgYXJyYXksIGhhcyB0byBiZSBhIHNxdWFyZSAyLUQgYXJyYXkuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgQSBuYW1lZHR1cGxlIHdpdGggdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgoKICAgIHNpZ24gOiAoLi4uKSBhcnJheV9saWtlCiAgICAgICAgQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBkZXRlcm1pbmFudC4gRm9yIGEgcmVhbCBtYXRyaXgsCiAgICAgICAgdGhpcyBpcyAxLCAwLCBvciAtMS4gRm9yIGEgY29tcGxleCBtYXRyaXgsIHRoaXMgaXMgYSBjb21wbGV4IG51bWJlcgogICAgICAgIHdpdGggYWJzb2x1dGUgdmFsdWUgMSAoaS5lLiwgaXQgaXMgb24gdGhlIHVuaXQgY2lyY2xlKSwgb3IgZWxzZSAwLgogICAgbG9nYWJzZGV0IDogKC4uLikgYXJyYXlfbGlrZQogICAgICAgIFRoZSBuYXR1cmFsIGxvZyBvZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGRldGVybWluYW50LgoKICAgIElmIHRoZSBkZXRlcm1pbmFudCBpcyB6ZXJvLCB0aGVuIGBzaWduYCB3aWxsIGJlIDAgYW5kIGBsb2dhYnNkZXRgIHdpbGwgYmUKICAgIC1JbmYuIEluIGFsbCBjYXNlcywgdGhlIGRldGVybWluYW50IGlzIGVxdWFsIHRvIGBgc2lnbiAqIG5wLmV4cChsb2dhYnNkZXQpYGAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBkZXQKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjguMAoKICAgIEJyb2FkY2FzdGluZyBydWxlcyBhcHBseSwgc2VlIHRoZSBgbnVtcHkubGluYWxnYCBkb2N1bWVudGF0aW9uIGZvcgogICAgZGV0YWlscy4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjYuMAoKICAgIFRoZSBkZXRlcm1pbmFudCBpcyBjb21wdXRlZCB2aWEgTFUgZmFjdG9yaXphdGlvbiB1c2luZyB0aGUgTEFQQUNLCiAgICByb3V0aW5lIGBgei9kZ2V0cmZgYC4KCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICBUaGUgZGV0ZXJtaW5hbnQgb2YgYSAyLUQgYXJyYXkgYGBbW2EsIGJdLCBbYywgZF1dYGAgaXMgYGBhZCAtIGJjYGA6CgogICAgPj4+IGEgPSBucC5hcnJheShbWzEsIDJdLCBbMywgNF1dKQogICAgPj4+IChzaWduLCBsb2dhYnNkZXQpID0gbnAubGluYWxnLnNsb2dkZXQoYSkKICAgID4+PiAoc2lnbiwgbG9nYWJzZGV0KQogICAgKC0xLCAwLjY5MzE0NzE4MDU1OTk0NTI5KSAjIG1heSB2YXJ5CiAgICA+Pj4gc2lnbiAqIG5wLmV4cChsb2dhYnNkZXQpCiAgICAtMi4wCgogICAgQ29tcHV0aW5nIGxvZy1kZXRlcm1pbmFudHMgZm9yIGEgc3RhY2sgb2YgbWF0cmljZXM6CgogICAgPj4+IGEgPSBucC5hcnJheShbIFtbMSwgMl0sIFszLCA0XV0sIFtbMSwgMl0sIFsyLCAxXV0sIFtbMSwgM10sIFszLCAxXV0gXSkKICAgID4+PiBhLnNoYXBlCiAgICAoMywgMiwgMikKICAgID4+PiBzaWduLCBsb2dhYnNkZXQgPSBucC5saW5hbGcuc2xvZ2RldChhKQogICAg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PQ0AAAogICAgUmV0dXJuIHRoZSBsZWFzdC1zcXVhcmVzIHNvbHV0aW9uIHRvIGEgbGluZWFyIG1hdHJpeCBlcXVhdGlvbi4KCiAgICBDb21wdXRlcyB0aGUgdmVjdG9yIGB4YCB0aGF0IGFwcHJveGltYXRlbHkgc29sdmVzIHRoZSBlcXVhdGlvbgogICAgYGBhIEAgeCA9IGJgYC4gVGhlIGVxdWF0aW9uIG1heSBiZSB1bmRlci0sIHdlbGwtLCBvciBvdmVyLWRldGVybWluZWQKICAgIChpLmUuLCB0aGUgbnVtYmVyIG9mIGxpbmVhcmx5IGluZGVwZW5kZW50IHJvd3Mgb2YgYGFgIGNhbiBiZSBsZXNzIHRoYW4sCiAgICBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIGl0cyBudW1iZXIgb2YgbGluZWFybHkgaW5kZXBlbmRlbnQgY29sdW1ucykuCiAgICBJZiBgYWAgaXMgc3F1YXJlIGFuZCBvZiBmdWxsIHJhbmssIHRoZW4gYHhgIChidXQgZm9yIHJvdW5kLW9mZiBlcnJvcikKICAgIGlzIHRoZSAiZXhhY3QiIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbi4gRWxzZSwgYHhgIG1pbmltaXplcyB0aGUKICAgIEV1Y2xpZGVhbiAyLW5vcm0gOm1hdGg6YHx8YiAtIGF4fHxgLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWluaW1pemluZwogICAgc29sdXRpb25zLCB0aGUgb25lIHdpdGggdGhlIHNtYWxsZXN0IDItbm9ybSA6bWF0aDpgfHx4fHxgIGlzIHJldHVybmVkLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGEgOiAoTSwgTikgYXJyYXlfbGlrZQogICAgICAgICJDb2VmZmljaWVudCIgbWF0cml4LgogICAgYiA6IHsoTSwpLCAoTSwgSyl9IGFycmF5X2xpa2UKICAgICAgICBPcmRpbmF0ZSBvciAiZGVwZW5kZW50IHZhcmlhYmxlIiB2YWx1ZXMuIElmIGBiYCBpcyB0d28tZGltZW5zaW9uYWwsCiAgICAgICAgdGhlIGxlYXN0LXNxdWFyZXMgc29sdXRpb24gaXMgY2FsY3VsYXRlZCBmb3IgZWFjaCBvZiB0aGUgYEtgIGNvbHVtbnMKICAgICAgICBvZiBgYmAuCiAgICByY29uZCA6IGZsb2F0LCBvcHRpb25hbAogICAgICAgIEN1dC1vZmYgcmF0aW8gZm9yIHNtYWxsIHNpbmd1bGFyIHZhbHVlcyBvZiBgYWAuCiAgICAgICAgRm9yIHRoZSBwdXJwb3NlcyBvZiByYW5rIGRldGVybWluYXRpb24sIHNpbmd1bGFyIHZhbHVlcyBhcmUgdHJlYXRlZAogICAgICAgIGFzIHplcm8gaWYgdGhleSBhcmUgc21hbGxlciB0aGFuIGByY29uZGAgdGltZXMgdGhlIGxhcmdlc3Qgc2luZ3VsYXIKICAgICAgICB2YWx1ZSBvZiBgYWAuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4xNC4wCiAgICAgICAgICAgSWYgbm90IHNldCwgYSBGdXR1cmVXYXJuaW5nIGlzIGdpdmVuLiBUaGUgcHJldmlvdXMgZGVmYXVsdAogICAgICAgICAgIG9mIGBgLTFgYCB3aWxsIHVzZSB0aGUgbWFjaGluZSBwcmVjaXNpb24gYXMgYHJjb25kYCBwYXJhbWV0ZXIsCiAgICAgICAgICAgdGhlIG5ldyBkZWZhdWx0IHdpbGwgdXNlIHRoZSBtYWNoaW5lIHByZWNpc2lvbiB0aW1lcyBgbWF4KE0sIE4pYC4KICAgICAgICAgICBUbyBzaWxlbmNlIHRoZSB3YXJuaW5nIGFuZCB1c2UgdGhlIG5ldyBkZWZhdWx0LCB1c2UgYGByY29uZD1Ob25lYGAsCiAgICAgICAgICAgdG8ga2VlcCB1c2luZyB0aGUgb2xkIGJlaGF2aW9yLCB1c2UgYGByY29uZD0tMWBgLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHggOiB7KE4sKSwgKE4sIEspfSBuZGFycmF5CiAgICAgICAgTGVhc3Qtc3F1YXJlcyBzb2x1dGlvbi4gSWYgYGJgIGlzIHR3by1kaW1lbnNpb25hbCwKICAgICAgICB0aGUgc29sdXRpb25zIGFyZSBpbiB0aGUgYEtgIGNvbHVtbnMgb2YgYHhgLgogICAgcmVzaWR1YWxzIDogeygxLCksIChLLCksICgwLCl9IG5kYXJyYXkKICAgICAgICBTdW1zIG9mIHNxdWFyZWQgcmVzaWR1YWxzOiBTcXVhcmVkIEV1Y2xpZGVhbiAyLW5vcm0gZm9yIGVhY2ggY29sdW1uIGluCiAgICAgICAgYGBiIC0gYSBAIHhgYC4KICAgICAgICBJZiB0aGUgcmFuayBvZiBgYWAgaXMgPCBOIG9yIE0gPD0gTiwgdGhpcyBpcyBhbiBlbXB0eSBhcnJheS4KICAgICAgICBJZiBgYmAgaXMgMS1kaW1lbnNpb25hbCwgdGhpcyBpcyBhICgxLCkgc2hhcGUgYXJyYXkuCiAgICAgICAgT3RoZXJ3aXNlIHRoZSBzaGFwZSBpcyAoSywpLgogICAgcmFuayA6IGludAogICAgICAgIFJhbmsgb2YgbWF0cml4IGBhYC4KICAgIHMgOiAobWluKE0sIE4pLCkgbmRhcnJheQogICAgICAgIFNpbmd1bGFyIHZhbHVlcyBvZiBgYWAuCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIExpbkFsZ0Vycm9yCiAgICAgICAgSWYgY29tcHV0YXRpb24gZG9lcyBub3QgY29udmVyZ2UuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBzY2lweS5saW5hbGcubHN0c3EgOiBTaW1pbGFyIGZ1bmN0aW9uIGluIFNjaVB5LgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgSWYgYGJgIGlzIGEgbWF0cml4LCB0aGVuIGFsbCBhcnJheSByZXN1bHRzIGFyZSByZXR1cm5lZCBhcyBtYXRyaWNlcy4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgIEZpdCBhIGxpbmUsIGBgeSA9IG14ICsgY2BgLCB0aHJvdWdoIHNvbWUgbm9pc3kgZGF0YS1wb2ludHM6CgogICAgPj4+IHggPSBucC5hcnJheShbMCwgMSwgMiwgM10pCiAgICA+Pj4geSA9IG5wLmFycmF5KFstMSwgMC4yLCAwLjksIDIuMV0pCgogICAgQnkgZXhhbWluaW5nIHRoZSBjb2VmZmljaWVudHMsIHdlIHNlZSB0aGF0IHRoZSBsaW5lIHNob3VsZCBoYXZlIGEKICAgIGdyYWRpZW50IG9mIHJvdWdo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bHVlIG9mIHRoZSBgYG9yZGBgIHBhcmFtZXRlci4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZQogICAgICAgIElucHV0IGFycmF5LiAgSWYgYGF4aXNgIGlzIE5vbmUsIGB4YCBtdXN0IGJlIDEtRCBvciAyLUQsIHVubGVzcyBgb3JkYAogICAgICAgIGlzIE5vbmUuIElmIGJvdGggYGF4aXNgIGFuZCBgb3JkYCBhcmUgTm9uZSwgdGhlIDItbm9ybSBvZgogICAgICAgIGBgeC5yYXZlbGBgIHdpbGwgYmUgcmV0dXJuZWQuCiAgICBvcmQgOiB7bm9uLXplcm8gaW50LCBpbmYsIC1pbmYsICdmcm8nLCAnbnVjJ30sIG9wdGlvbmFsCiAgICAgICAgT3JkZXIgb2YgdGhlIG5vcm0gKHNlZSB0YWJsZSB1bmRlciBgYE5vdGVzYGApLiBpbmYgbWVhbnMgbnVtcHkncwogICAgICAgIGBpbmZgIG9iamVjdC4gVGhlIGRlZmF1bHQgaXMgTm9uZS4KICAgIGF4aXMgOiB7Tm9uZSwgaW50LCAyLXR1cGxlIG9mIGludHN9LCBvcHRpb25hbC4KICAgICAgICBJZiBgYXhpc2AgaXMgYW4gaW50ZWdlciwgaXQgc3BlY2lmaWVzIHRoZSBheGlzIG9mIGB4YCBhbG9uZyB3aGljaCB0bwogICAgICAgIGNvbXB1dGUgdGhlIHZlY3RvciBub3Jtcy4gIElmIGBheGlzYCBpcyBhIDItdHVwbGUsIGl0IHNwZWNpZmllcyB0aGUKICAgICAgICBheGVzIHRoYXQgaG9sZCAyLUQgbWF0cmljZXMsIGFuZCB0aGUgbWF0cml4IG5vcm1zIG9mIHRoZXNlIG1hdHJpY2VzCiAgICAgICAgYXJlIGNvbXB1dGVkLiAgSWYgYGF4aXNgIGlzIE5vbmUgdGhlbiBlaXRoZXIgYSB2ZWN0b3Igbm9ybSAod2hlbiBgeGAKICAgICAgICBpcyAxLUQpIG9yIGEgbWF0cml4IG5vcm0gKHdoZW4gYHhgIGlzIDItRCkgaXMgcmV0dXJuZWQuIFRoZSBkZWZhdWx0CiAgICAgICAgaXMgTm9uZS4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS44LjAKCiAgICBrZWVwZGltcyA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgSWYgdGhpcyBpcyBzZXQgdG8gVHJ1ZSwgdGhlIGF4ZXMgd2hpY2ggYXJlIG5vcm1lZCBvdmVyIGFyZSBsZWZ0IGluIHRoZQogICAgICAgIHJlc3VsdCBhcyBkaW1lbnNpb25zIHdpdGggc2l6ZSBvbmUuICBXaXRoIHRoaXMgb3B0aW9uIHRoZSByZXN1bHQgd2lsbAogICAgICAgIGJyb2FkY2FzdCBjb3JyZWN0bHkgYWdhaW5zdCB0aGUgb3JpZ2luYWwgYHhgLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEwLjAKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBuIDogZmxvYXQgb3IgbmRhcnJheQogICAgICAgIE5vcm0gb2YgdGhlIG1hdHJpeCBvciB2ZWN0b3IocykuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBzY2lweS5saW5hbGcubm9ybSA6IFNpbWlsYXIgZnVuY3Rpb24gaW4gU2NpUHkuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBGb3IgdmFsdWVzIG9mIGBgb3JkIDwgMWBgLCB0aGUgcmVzdWx0IGlzLCBzdHJpY3RseSBzcGVha2luZywgbm90IGEKICAgIG1hdGhlbWF0aWNhbCAnbm9ybScsIGJ1dCBpdCBtYXkgc3RpbGwgYmUgdXNlZnVsIGZvciB2YXJpb3VzIG51bWVyaWNhbAogICAgcHVycG9zZXMuCgogICAgVGhlIGZvbGxvd2luZyBub3JtcyBjYW4gYmUgY2FsY3VsYXRlZDoKCiAgICA9PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIG9yZCAgICBub3JtIGZvciBtYXRyaWNlcyAgICAgICAgICAgICBub3JtIGZvciB2ZWN0b3JzCiAgICA9PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIE5vbmUgICBGcm9iZW5pdXMgbm9ybSAgICAgICAgICAgICAgICAyLW5vcm0KICAgICdmcm8nICBGcm9iZW5pdXMgbm9ybSAgICAgICAgICAgICAgICAtLQogICAgJ251YycgIG51Y2xlYXIgbm9ybSAgICAgICAgICAgICAgICAgIC0tCiAgICBpbmYgICAgbWF4KHN1bShhYnMoeCksIGF4aXM9MSkpICAgICAgbWF4KGFicyh4KSkKICAgIC1pbmYgICBtaW4oc3VtKGFicyh4KSwgYXhpcz0xKSkgICAgICBtaW4oYWJzKHgpKQogICAgMCAgICAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bSh4ICE9IDApCiAgICAxICAgICAgbWF4KHN1bShhYnMoeCksIGF4aXM9MCkpICAgICAgYXMgYmVsb3cKICAgIC0xICAgICBtaW4oc3VtKGFicyh4KSwgYXhpcz0wKSkgICAgICBhcyBiZWxvdwogICAgMiAgICAgIDItbm9ybSAobGFyZ2VzdCBzaW5nLiB2YWx1ZSkgIGFzIGJlbG93CiAgICAtMiAgICAgc21hbGxlc3Qgc2luZ3VsYXIgdmFsdWUgICAgICAgYXMgYmVsb3cKICAgIG90aGVyICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0oYWJzKHgpKipvcmQpKiooMS4vb3JkKQogICAgPT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgVGhlIEZyb2Jlbml1cyBub3JtIGlzIGdpdmVuIGJ5IFsxXV86CgogICAgICAgIDptYXRoOmB8fEF8fF9GID0gW1xzdW1fe2ksan0gYWJzKGFfe2ksan0pXjJdXnsxLzJ9YAoKICAgIFRoZSBudWNsZWFyIG5vcm0gaXMgdGhlIHN1bSBvZiB0aGUgc2luZ3VsYXIgdmFsdWVzLgoKICAgIEJvdGggdGhlIEZyb2Jlbml1cyBhbmQgbnVjbGVhciBub3JtIG9yZGVycyBhcmUgb25seSBkZWZpbmVkIGZvcgogICAgbWF0cmljZXMgYW5kIHJhaXNlIGEgVmFsdWVFcnJvciB3aGVuIGBgeC5uZGltICE9IDJgYC4KCiAgICBSZWZlcmVuY2VzCiAgICAtLS0tLS0tLS0tCiAgICAuLiBbMV0gRy4gSC4gR29sdWIgYW5kIEMuIEYuIFZhbiBMb2FuLCAqTWF0cml4IENvbXB1dGF0aW9ucyosCiAgICAgICAgICAgQmFsdGltb3JlLCBNRCwgSm9obnMgSG9wa2lucyBVbml2ZXJzaXR5IFByZXNzLCAxOTg1LCBwZy4gMTUKCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5IGltcG9ydCBsaW5hbGcgYXMgTEEKICAgID4+PiBhID0gbnAuYXJhbmdlKDkpIC0gNAogICAgPj4+IGEKICAgIGFycmF5KFstNCwgLTMsIC0yLCAuLi4sICAyLCAgMywgIDRdKQogICAgPj4+IGIgPSBhLnJlc2hhcGUoKDMsIDMpKQogICAgPj4+IGIKICAgIGFycmF5KFtbLTQsIC0zLCAtMl0sCiAgICAgICAgICAgWy0xLCAgMCwgIDFdLAogICAgICAgICAgIFsgMiwgIDMsICA0XV0pCgogICAgPj4+IExBLm5vcm0oYSkKICAgIDcuNzQ1OTY2NjkyNDE0ODM0CiAgICA+Pj4gTEEubm9ybShiKQogICAgNy43NDU5NjY2OTI0MTQ4MzQKICAgID4+PiBMQS5ub3JtKGIsICdmcm8nKQogICAgNy43NDU5NjY2OTI0MTQ4MzQKICAgID4+PiBMQS5ub3JtKGEsIG5wLmluZikKICAgIDQuMAogICAgPj4+IExBLm5vcm0oYiwgbnAuaW5mKQogICAgOS4wCiAgICA+Pj4gTEEubm9ybShhLCAtbnAuaW5mKQogICAgMC4wCiAgICA+Pj4gTEEubm9ybShiLCAtbnAuaW5mKQogICAgMi4wCgogICAgPj4+IExBLm5vcm0oYSwgMSkKICAgIDIwLjAKICAgID4+PiBMQS5ub3JtKGIsIDEpCiAgICA3LjAKICAgID4+PiBMQS5ub3JtKGEsIC0xKQogICAgLTQuNjU2NjEyODc3NDE0MjAxM2UtMDEwCiAgICA+Pj4gTEEubm9ybShiLCAtMSkKICAgIDYuMAogICAgPj4+IExBLm5vcm0oYSwgMikKICAgIDcuNzQ1OTY2NjkyNDE0ODM0CiAgICA+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IHZlY3Rvci4KICAgICAgICBJZiB0aGUgbGFzdCBhcmd1bWVudCBpcyAxLUQgaXQgaXMgdHJlYXRlZCBhcyBjb2x1bW4gdmVjdG9yLgogICAgICAgIFRoZSBvdGhlciBhcmd1bWVudHMgbXVzdCBiZSAyLUQuCiAgICBvdXQgOiBuZGFycmF5LCBvcHRpb25hbAogICAgICAgIE91dHB1dCBhcmd1bWVudC4gVGhpcyBtdXN0IGhhdmUgdGhlIGV4YWN0IGtpbmQgdGhhdCB3b3VsZCBiZSByZXR1cm5lZAogICAgICAgIGlmIGl0IHdhcyBub3QgdXNlZC4gSW4gcGFydGljdWxhciwgaXQgbXVzdCBoYXZlIHRoZSByaWdodCB0eXBlLCBtdXN0IGJlCiAgICAgICAgQy1jb250aWd1b3VzLCBhbmQgaXRzIGR0eXBlIG11c3QgYmUgdGhlIGR0eXBlIHRoYXQgd291bGQgYmUgcmV0dXJuZWQKICAgICAgICBmb3IgYGRvdChhLCBiKWAuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBmZWF0dXJlLiBUaGVyZWZvcmUsIGlmIHRoZXNlCiAgICAgICAgY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCwgaW5zdGVhZCBvZiBhdHRlbXB0aW5nCiAgICAgICAgdG8gYmUgZmxleGlibGUuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTkuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIG91dHB1dCA6IG5kYXJyYXkKICAgICAgICBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiB0aGUgc3VwcGxpZWQgYXJyYXlzLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbnVtcHkuZG90IDogZG90IG11bHRpcGxpY2F0aW9uIHdpdGggdHdvIGFyZ3VtZW50cy4KCiAgICBSZWZlcmVuY2VzCiAgICAtLS0tLS0tLS0tCgogICAgLi4gWzFdIENvcm1lbiwgIkludHJvZHVjdGlvbiB0byBBbGdvcml0aG1zIiwgQ2hhcHRlciAxNS4yLCBwLiAzNzAtMzc4CiAgICAuLiBbMl0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWF0cml4X2NoYWluX211bHRpcGxpY2F0aW9uCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICBgbXVsdGlfZG90YCBhbGxvd3MgeW91IHRvIHdyaXRlOjoKCiAgICA+Pj4gZnJvbSBudW1weS5saW5hbGcgaW1wb3J0IG11bHRpX2RvdAogICAgPj4+ICMgUHJlcGFyZSBzb21lIGRhdGEKICAgID4+PiBBID0gbnAucmFuZG9tLnJhbmRvbSgoMTAwMDAsIDEwMCkpCiAgICA+Pj4gQiA9IG5wLnJhbmRvbS5yYW5kb20oKDEwMCwgMTAwMCkpCiAgICA+Pj4gQyA9IG5wLnJhbmRvbS5yYW5kb20oKDEwMDAsIDUpKQogICAgPj4+IEQgPSBucC5yYW5kb20ucmFuZG9tKCg1LCAzMzMpKQogICAgPj4+ICMgdGhlIGFjdHVhbCBkb3QgbXVsdGlwbGljYXRpb24KICAgID4+PiBfID0gbXVsdGlfZG90KFtBLCBCLCBDLCBEXSkKCiAgICBpbnN0ZWFkIG9mOjoKCiAgICA+Pj4gXyA9IG5wLmRvdChucC5kb3QobnAuZG90KEEsIEIpLCBDKSwgRCkKICAgID4+PiAjIG9yCiAgICA+Pj4gXyA9IEEuZG90KEIpLmRvdChDKS5kb3QoRCkKCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoZSBjb3N0IGZvciBhIG1hdHJpeCBtdWx0aXBsaWNhdGlvbiBjYW4gYmUgY2FsY3VsYXRlZCB3aXRoIHRoZQogICAgZm9sbG93aW5nIGZ1bmN0aW9uOjoKCiAgICAgICAgZGVmIGNvc3QoQSwgQik6CiAgICAgICAgICAgIHJldHVybiBBLnNoYXBlWzBdICogQS5zaGFwZVsxXSAqIEIuc2hhcGVbMV0KCiAgICBBc3N1bWUgd2UgaGF2ZSB0aHJlZSBtYXRyaWNlcwogICAgOm1hdGg6YEFfezEweDEwMH0sIEJfezEwMHg1fSwgQ197NXg1MH1gLgoKICAgIFRoZSBjb3N0cyBmb3IgdGhlIHR3byBkaWZmZXJlbnQgcGFyZW50aGVzaXphdGlvbnMgYXJlIGFzIGZvbGxvd3M6OgoKICAgICAgICBj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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 3
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
linalg.cpython-311.pyc
104.86 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-311.pyc
4.23 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
2.07 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).