A/MNCmL5IVRjAAAAAAAAAAALAAAAQAAAAHOlAQAAZAAAWgAAZAEAZAIAZAMAZAQAZAUAZAYAZAcAZAgAZAkAZAoAZAsAZwsAWgEAZAwAZA0AbAIAWgIAZAwAZA4AbAMAbQQAWgUAAWQMAGQPAGwGAG0HAFoHAAFlBQBkCwBkEACDAgBaCABkEQCEAABaCQBkBABmAABkEgCEAACDAABZWgoAZBMAZBQAZBUAhAIAWgsAZBYAhAAAWgwAZAUAZgAAZBcAhAAAgwAAWVoNAGQMAGQNAGwOAFoOAGUOAGoPAGQYAIMBAGoQAGQZAIQBAFoRAGQaAGQbAIQBAFoSAGQcAIQAAFoTAGQdAGQdAGQdAGQdAGQTAGQeAGQfAIQGAFoUAGQgAIQAAFoVAGQdAGQdAGQdAGQdAGQTAGQeAGQhAIQGAFoWAGUXAGUSAGQiAIQCAFoYAGUXAGUXAGUSAGQjAIQDAFoZAGQkAFoaAGQlAFobAGQmAFocAGQnAFodAGQKAGUeAGYBAGQoAIQAAIMAAFlaHwBbDgBkKQCEAABaIABkKgCEAABaIQBlIgBkKwBrAgByoQFlIQCDAAABbgAAZA0AUygsAAAAc2UDAAAKTW9kdWxlIGRpZmZsaWIgLS0gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMuCgpGdW5jdGlvbiBnZXRfY2xvc2VfbWF0Y2hlcyh3b3JkLCBwb3NzaWJpbGl0aWVzLCBuPTMsIGN1dG9mZj0wLjYpOgogICAgVXNlIFNlcXVlbmNlTWF0Y2hlciB0byByZXR1cm4gbGlzdCBvZiB0aGUgYmVzdCAiZ29vZCBlbm91Z2giIG1hdGNoZXMuCgpGdW5jdGlvbiBjb250ZXh0X2RpZmYoYSwgYik6CiAgICBGb3IgdHdvIGxpc3RzIG9mIHN0cmluZ3MsIHJldHVybiBhIGRlbHRhIGluIGNvbnRleHQgZGlmZiBmb3JtYXQuCgpGdW5jdGlvbiBuZGlmZihhLCBiKToKICAgIFJldHVybiBhIGRlbHRhOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBhYCBhbmQgYGJgIChsaXN0cyBvZiBzdHJpbmdzKS4KCkZ1bmN0aW9uIHJlc3RvcmUoZGVsdGEsIHdoaWNoKToKICAgIFJldHVybiBvbmUgb2YgdGhlIHR3byBzZXF1ZW5jZXMgdGhhdCBnZW5lcmF0ZWQgYW4gbmRpZmYgZGVsdGEuCgpGdW5jdGlvbiB1bmlmaWVkX2RpZmYoYSwgYik6CiAgICBGb3IgdHdvIGxpc3RzIG9mIHN0cmluZ3MsIHJldHVybiBhIGRlbHRhIGluIHVuaWZpZWQgZGlmZiBmb3JtYXQuCgpDbGFzcyBTZXF1ZW5jZU1hdGNoZXI6CiAgICBBIGZsZXhpYmxlIGNsYXNzIGZvciBjb21wYXJpbmcgcGFpcnMgb2Ygc2VxdWVuY2VzIG9mIGFueSB0eXBlLgoKQ2xhc3MgRGlmZmVyOgogICAgRm9yIHByb2R1Y2luZyBodW1hbi1yZWFkYWJsZSBkZWx0YXMgZnJvbSBzZXF1ZW5jZXMgb2YgbGluZXMgb2YgdGV4dC4KCkNsYXNzIEh0bWxEaWZmOgogICAgRm9yIHByb2R1Y2luZyBIVE1MIHNpZGUgYnkgc2lkZSBjb21wYXJpc29uIHdpdGggY2hhbmdlIGhpZ2hsaWdodHMuCnQRAAAAZ2V0X2Nsb3NlX21hdGNoZXN0BQAAAG5kaWZmdAcAAAByZXN0b3JldA8AAABTZXF1ZW5jZU1hdGNoZXJ0BgAAAERpZmZlcnQRAAAASVNfQ0hBUkFDVEVSX0pVTkt0DAAAAElTX0xJTkVfSlVOS3QMAAAAY29udGV4dF9kaWZmdAwAAAB1bmlmaWVkX2RpZmZ0CAAAAEh0bWxEaWZmdAUAAABNYXRjaGn/////TigBAAAAdAoAAABuYW1lZHR1cGxlKAEAAAB0BgAAAHJlZHVjZXMIAAAAYSBiIHNpemVjAgAAAAIAAAACAAAAQwAAAHMWAAAAfAEAchIAZAEAfAAAFHwBABVTZAIAUygDAAAATmcAAAAAAAAAQGcAAAAAAADwPygAAAAAKAIAAAB0BwAAAG1hdGNoZXN0BgAAAGxlbmd0aCgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZGlmZmxpYi5weXQQAAAAX2NhbGN1bGF0ZV9yYXRpbykAAABzBgAAAAABBgEMAWMAAAAAAAAAAAUAAABCAAAAc4kAAABlAABaAQBkAABaAgBkDwBkAQBkAQBlBABkAgCEBABaBQBkAwCEAABaBgBkBACEAABaBwBkBQCEAABaCABkBgCEAABaCQBkBwCEAABaCgBkCACEAABaCwBkCQCEAABaDABkCgBkCwCEAQBaDQBkDACEAABaDgBkDQCEAABaDwBkDgCEAABaEABSUygQAAAAc50QAAAKICAgIFNlcXVlbmNlTWF0Y2hlciBpcyBhIGZsZXhpYmxlIGNsYXNzIGZvciBjb21wYXJpbmcgcGFpcnMgb2Ygc2VxdWVuY2VzIG9mCiAgICBhbnkgdHlwZSwgc28gbG9uZyBhcyB0aGUgc2VxdWVuY2UgZWxlbWVudHMgYXJlIGhhc2hhYmxlLiAgVGhlIGJhc2ljCiAgICBhbGdvcml0aG0gcHJlZGF0ZXMsIGFuZCBpcyBhIGxpdHRsZSBmYW5jaWVyIHRoYW4sIGFuIGFsZ29yaXRobQogICAgcHVibGlzaGVkIGluIHRoZSBsYXRlIDE5ODAncyBieSBSYXRjbGlmZiBhbmQgT2JlcnNoZWxwIHVuZGVyIHRoZQogICAgaHlwZXJib2xpYyBuYW1lICJnZXN0YWx0IHBhdHRlcm4gbWF0Y2hpbmciLiAgVGhlIGJhc2ljIGlkZWEgaXMgdG8gZmluZAogICAgdGhlIGxvbmdlc3QgY29udGlndW91cyBtYXRjaGluZyBzdWJzZXF1ZW5jZSB0aGF0IGNvbnRhaW5zIG5vICJqdW5rIgogICAgZWxlbWVudHMgKFItTyBkb2Vzbid0IGFkZHJlc3MganVuaykuICBUaGUgc2FtZSBpZGVhIGlzIHRoZW4gYXBwbGllZAogICAgcmVjdXJzaXZlbHkgdG8gdGhlIHBpZWNlcyBvZiB0aGUgc2VxdWVuY2VzIHRvIHRoZSBsZWZ0IGFuZCB0byB0aGUgcmlnaHQKICAgIG9mIHRoZSBtYXRjaGluZyBzdWJzZXF1ZW5jZS4gIFRoaXMgZG9lcyBub3QgeWllbGQgbWluaW1hbCBlZGl0CiAgICBzZXF1ZW5jZXMsIGJ1dCBkb2VzIHRlbmQgdG8geWllbGQgbWF0Y2hlcyB0aGF0ICJsb29rIHJpZ2h0IiB0byBwZW9wbGUuCgogICAgU2VxdWVuY2VNYXRjaGVyIHRyaWVzIHRvIGNvbXB1dGUgYSAiaHVtYW4tZnJpZW5kbHkgZGlmZiIgYmV0d2VlbiB0d28KICAgIHNlcXVlbmNlcy4gIFVubGlrZSBlLmcuIFVOSVgodG0pIGRpZmYsIHRoZSBmdW5kYW1lbnRhbCBub3Rpb24gaXMgdGhlCiAgICBsb25nZXN0ICpjb250aWd1b3VzKiAmIGp1bmstZnJlZSBtYXRjaGluZyBzdWJzZXF1ZW5jZS4gIFRoYXQncyB3aGF0CiAgICBjYXRjaGVzIHBlb3BsZXMnIGV5ZXMuICBUaGUgV2luZG93cyh0bSkgd2luZGlmZiBoYXMgYW5vdGhlciBpbnRlcmVzdGluZwogICAgbm90aW9uLCBwYWlyaW5nIHVwIGVsZW1lbnRzIHRoYXQgYXBwZWFyIHVuaXF1ZWx5IGluIGVhY2ggc2VxdWVuY2UuCiAgICBUaGF0LCBhbmQgdGhlIG1ldGhvZCBoZXJlLCBhcHBlYXIgdG8geWllbGQgbW9yZSBpbnR1aXRpdmUgZGlmZmVyZW5jZQogICAgcmVwb3J0cyB0aGFuIGRvZXMgZGlmZi4gIFRoaXMgbWV0aG9kIGFwcGVhcnMgdG8gYmUgdGhlIGxlYXN0IHZ1bG5lcmFibGUKICAgIHRvIHN5bmNoaW5nIHVwIG9uIGJsb2NrcyBvZiAianVuayBsaW5lcyIsIHRob3VnaCAobGlrZSBibGFuayBsaW5lcyBpbgogICAgb3JkaW5hcnkgdGV4dCBmaWxlcywgb3IgbWF5YmUgIjxQPiIgbGluZXMgaW4gSFRNTCBmaWxlcykuICBUaGF0IG1heSBiZQogICAgYmVjYXVzZSB0aGlzIGlzIHRoZSBvbmx5IG1ldGhvZCBvZiB0aGUgMyB0aGF0IGhhcyBhICpjb25jZXB0KiBvZgogICAgImp1bmsiIDx3aW5rPi4KCiAgICBFeGFtcGxlLCBjb21wYXJpbmcgdHdvIHN0cmluZ3MsIGFuZCBjb25zaWRlcmluZyBibGFua3MgdG8gYmUgImp1bmsiOgoKICAgID4+PiBzID0gU2VxdWVuY2VNYXRjaGVyKGxhbWJkYSB4OiB4ID09ICIgIiwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICJwcml2YXRlIFRocmVhZCBjdXJyZW50VGhyZWFkOyIsCiAgICAuLi4gICAgICAgICAgICAgICAgICAgICAicHJpdmF0ZSB2b2xhdGlsZSBUaHJlYWQgY3VycmVudFRocmVhZDsiKQogICAgPj4+CgogICAgLnJhdGlvKCkgcmV0dXJucyBhIGZsb2F0IGluIFswLCAxXSwgbWVhc3VyaW5nIHRoZSAic2ltaWxhcml0eSIgb2YgdGhlCiAgICBzZXF1ZW5jZXMuICBBcyBhIHJ1bGUgb2YgdGh1bWIsIGEgLnJhdGlvKCkgdmFsdWUgb3ZlciAwLjYgbWVhbnMgdGhlCiAgICBzZXF1ZW5jZXMgYXJlIGNsb3NlIG1hdGNoZXM6CgogICAgPj4+IHByaW50IHJvdW5kKHMucmF0aW8oKSwgMykKICAgIDAuODY2CiAgICA+Pj4KCiAgICBJZiB5b3UncmUgb25seSBpbnRlcmVzdGVkIGluIHdoZXJlIHRoZSBzZXF1ZW5jZXMgbWF0Y2gsCiAgICAuZ2V0X21hdGNoaW5nX2Jsb2NrcygpIGlzIGhhbmR5OgoKICAgID4+PiBmb3IgYmxvY2sgaW4gcy5nZXRfbWF0Y2hpbmdfYmxvY2tzKCk6CiAgICAuLi4gICAgIHByaW50ICJhWyVkXSBhbmQgYlslZF0gbWF0Y2ggZm9yICVkIGVsZW1lbnRzIiAlIGJsb2NrCiAgICBhWzBdIGFuZCBiWzBdIG1hdGNoIGZvciA4IGVsZW1lbnRzCiAgICBhWzhdIGFuZCBiWzE3XSBtYXRjaCBmb3IgMjEgZWxlbWVudHMKICAgIGFbMjldIGFuZCBiWzM4XSBtYXRjaCBmb3IgMCBlbGVtZW50cwoKICAgIE5vdGUgdGhhdCB0aGUgbGFzdCB0dXBsZSByZXR1cm5lZCBieSAuZ2V0X21hdGNoaW5nX2Jsb2NrcygpIGlzIGFsd2F5cyBhCiAgICBkdW1teSwgKGxlbihhKSwgbGVuKGIpLCAwKSwgYW5kIHRoaXMgaXMgdGhlIG9ubHkgY2FzZSBpbiB3aGljaCB0aGUgbGFzdAogICAgdHVwbGUgZWxlbWVudCAobnVtYmVyIG9mIGVsZW1lbnRzIG1hdGNoZWQpIGlzIDAuCgogICAgSWYgeW91IHdhbnQgdG8ga25vdyBob3cgdG8gY2hhbmdlIHRoZSBmaXJzdCBzZXF1ZW5jZSBpbnRvIHRoZSBzZWNvbmQsCiAgICB1c2UgLmdldF9vcGNvZGVzKCk6CgogICAgPj4+IGZvciBvcGNvZGUgaW4gcy5nZXRfb3Bjb2RlcygpOgogICAgLi4uICAgICBwcmludCAiJTZzIGFbJWQ6JWRdIGJbJWQ6JWRdIiAlIG9wY29kZQogICAgIGVxdWFsIGFbMDo4XSBiWzA6OF0KICAgIGluc2VydCBhWzg6OF0gYls4OjE3XQogICAgIGVxdWFsIGFbODoyOV0gYlsxNzozOF0KCiAgICBTZWUgdGhlIERpZmZlciBjbGFzcyBmb3IgYSBmYW5jeSBodW1hbi1mcmllbmRseSBmaWxlIGRpZmZlcmVuY2VyLCB3aGljaAogICAgdXNlcyBTZXF1ZW5jZU1hdGNoZXIgYm90aCB0byBjb21wYXJlIHNlcXVlbmNlcyBvZiBsaW5lcywgYW5kIHRvIGNvbXBhcmUKICAgIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzIHdpdGhpbiBzaW1pbGFyIChuZWFyLW1hdGNoaW5nKSBsaW5lcy4KCiAgICBTZWUgYWxzbyBmdW5jdGlvbiBnZXRfY2xvc2VfbWF0Y2hlcygpIGluIHRoaXMgbW9kdWxlLCB3aGljaCBzaG93cyBob3cKICAgIHNpbXBsZSBjb2RlIGJ1aWxkaW5nIG9uIFNlcXVlbmNlTWF0Y2hlciBjYW4gYmUgdXNlZCB0byBkbyB1c2VmdWwgd29yay4KCiAgICBUaW1pbmc6ICBCYXNpYyBSLU8gaXMgY3ViaWMgdGltZSB3b3JzdCBjYXNlIGFuZCBxdWFkcmF0aWMgdGltZSBleHBlY3RlZAogICAgY2FzZS4gIFNlcXVlbmNlTWF0Y2hlciBpcyBxdWFkcmF0aWMgdGltZSBmb3IgdGhlIHdvcnN0IGNhc2UgYW5kIGhhcwogICAgZXhwZWN0ZWQtY2FzZSBiZWhhdmlvciBkZXBlbmRlbnQgaW4gYSBjb21wbGljYXRlZCB3YXkgb24gaG93IG1hbnkKICAgIGVsZW1lbnRzIHRoZSBzZXF1ZW5jZXMgaGF2ZSBpbiBjb21tb247IGJlc3QgY2FzZSB0aW1lIGlzIGxpbmVhci4KCiAgICBNZXRob2RzOgoKICAgIF9faW5pdF9fKGlzanVuaz1Ob25lLCBhPScnLCBiPScnKQogICAgICAgIENvbnN0cnVjdCBhIFNlcXVlbmNlTWF0Y2hlci4KCiAgICBzZXRfc2VxcyhhLCBiKQogICAgICAgIFNldCB0aGUgdHdvIHNlcXVlbmNlcyB0byBiZSBjb21wYXJlZC4KCiAgICBzZXRfc2VxMShhKQogICAgICAgIFNldCB0aGUgZmlyc3Qgc2VxdWVuY2UgdG8gYmUgY29tcGFyZWQuCgogICAgc2V0X3NlcTIoYikKICAgICAgICBTZXQgdGhlIHNlY29uZCBzZXF1ZW5jZSB0byBiZSBjb21wYXJlZC4KCiAgICBmaW5kX2xvbmdlc3RfbWF0Y2goYWxvLCBhaGksIGJsbywgYmhpKQogICAgICAgIEZpbmQgbG9uZ2VzdCBtYXRjaGluZyBibG9jayBpbiBhW2FsbzphaGldIGFuZCBiW2JsbzpiaGldLgoKICAgIGdldF9tYXRjaGluZ19ibG9ja3MoKQogICAgICAgIFJldHVybiBsaXN0IG9mIHRyaXBsZXMgZGVzY3JpYmluZyBtYXRjaGluZyBzdWJzZXF1ZW5jZXMuCgogICAgZ2V0X29wY29kZXMoKQogICAgICAgIFJldHVybiBsaXN0IG9mIDUtdHVwbGVzIGRlc2NyaWJpbmcgaG93IHRvIHR1cm4gYSBpbnRvIGIuCgogICAgcmF0aW8oKQogICAgICAgIFJldHVybiBhIG1lYXN1cmUgb2YgdGhlIHNlcXVlbmNlcycgc2ltaWxhcml0eSAoZmxvYXQgaW4gWzAsMV0pLgoKICAgIHF1aWNrX3JhdGlvKCkKICAgICAgICBSZXR1cm4gYW4gdXBwZXIgYm91bmQgb24gLnJhdGlvKCkgcmVsYXRpdmVseSBxdWlja2x5LgoKICAgIHJlYWxfcXVpY2tfcmF0aW8oKQogICAgICAgIFJldHVybiBhbiB1cHBlciBib3VuZCBvbiByYXRpbygpIHZlcnkgcXVpY2tseS4KICAgIHQAAAAAYwUAAAAFAAAAAwAAAEMAAABzNgAAAHwBAHwAAF8AAGQBAAR8AABfAgB8AABfAwB8BAB8AABfBAB8AABqBQB8AgB8AwCDAgABZAEAUygCAAAAcyEEAABDb25zdHJ1Y3QgYSBTZXF1ZW5jZU1hdGNoZXIuCgogICAgICAgIE9wdGlvbmFsIGFyZyBpc2p1bmsgaXMgTm9uZSAodGhlIGRlZmF1bHQpLCBvciBhIG9uZS1hcmd1bWVudAogICAgICAgIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBzZXF1ZW5jZSBlbGVtZW50IGFuZCByZXR1cm5zIHRydWUgaWZmIHRoZQogICAgICAgIGVsZW1lbnQgaXMganVuay4gIE5vbmUgaXMgZXF1aXZhbGVudCB0byBwYXNzaW5nICJsYW1iZGEgeDogMCIsIGkuZS4KICAgICAgICBubyBlbGVtZW50cyBhcmUgY29uc2lkZXJlZCB0byBiZSBqdW5rLiAgRm9yIGV4YW1wbGUsIHBhc3MKICAgICAgICAgICAgbGFtYmRhIHg6IHggaW4gIiBcdCIKICAgICAgICBpZiB5b3UncmUgY29tcGFyaW5nIGxpbmVzIGFzIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzLCBhbmQgZG9uJ3QKICAgICAgICB3YW50IHRvIHN5bmNoIHVwIG9uIGJsYW5rcyBvciBoYXJkIHRhYnMuCgogICAgICAgIE9wdGlvbmFsIGFyZyBhIGlzIHRoZSBmaXJzdCBvZiB0d28gc2VxdWVuY2VzIHRvIGJlIGNvbXBhcmVkLiAgQnkKICAgICAgICBkZWZhdWx0LCBhbiBlbXB0eSBzdHJpbmcuICBUaGUgZWxlbWVudHMgb2YgYSBtdXN0IGJlIGhhc2hhYmxlLiAgU2VlCiAgICAgICAgYWxzbyAuc2V0X3NlcXMoKSBhbmQgLnNldF9zZXExKCkuCgogICAgICAgIE9wdGlvbmFsIGFyZyBiIGlzIHRoZSBzZWNvbmQgb2YgdHdvIHNlcXVlbmNlcyB0byBiZSBjb21wYXJlZC4gIEJ5CiAgICAgICAgZGVmYXVsdCwgYW4gZW1wdHkgc3RyaW5nLiAgVGhlIGVsZW1lbnRzIG9mIGIgbXVzdCBiZSBoYXNoYWJsZS4gU2VlCiAgICAgICAgYWxzbyAuc2V0X3NlcXMoKSBhbmQgLnNldF9zZXEyKCkuCgogICAgICAgIE9wdGlvbmFsIGFyZyBhdXRvanVuayBzaG91bGQgYmUgc2V0IHRvIEZhbHNlIHRvIGRpc2FibGUgdGhlCiAgICAgICAgImF1dG9tYXRpYyBqdW5rIGhldXJpc3RpYyIgdGhhdCB0cmVhdHMgcG9wdWxhciBlbGVtZW50cyBhcyBqdW5rCiAgICAgICAgKHNlZSBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCiAgICAgICAgTigGAAAAdAYAAABpc2p1bmt0BAAAAE5vbmV0AQAAAGF0AQAAAGJ0CAAAAGF1dG9qdW5rdAgAAABzZXRfc2VxcygFAAAAdAQAAABzZWxmUhEAAABSEwAAAFIUAAAAUhUAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RpZmZsaWIucHl0CAAAAF9faW5pdF9fmgAAAHMIAAAAAEAJARABCQFjAwAAAAMAAAACAAAAQwAAAHMeAAAAfAAAagAAfAEAgwEAAXwAAGoBAHwCAIMBAAFkAQBTKAIAAABzmwAAAFNldCB0aGUgdHdvIHNlcXVlbmNlcyB0byBiZSBjb21wYXJlZC4KCiAgICAgICAgPj4+IHMgPSBTZXF1ZW5jZU1hdGNoZXIoKQogICAgICAgID4+PiBzLnNldF9zZXFzKCJhYmNkIiwgImJjZGUiKQogICAgICAgID4+PiBzLnJhdGlvKCkKICAgICAgICAwLjc1CiAgICAgICAgTigCAAAAdAgAAABzZXRfc2VxMXQIAAAAc2V0X3NlcTIoAwAAAFIXAAAAUhMAAABSFAAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZGlmZmxpYi5weVIWAAAA3wAAAHMEAAAAAAkNAWMCAAAAAgAAAAMAAABDAAAAczAAAAB8AQB8AABqAABrCABy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bGwgKGknLGonLGsnKSBtZWV0aW5nIHRob3NlIGNvbmRpdGlvbnMsCiAgICAgICAgICAgIGsgPj0gaycKICAgICAgICAgICAgaSA8PSBpJwogICAgICAgICAgICBhbmQgaWYgaSA9PSBpJywgaiA8PSBqJwoKICAgICAgICBJbiBvdGhlciB3b3Jkcywgb2YgYWxsIG1heGltYWwgbWF0Y2hpbmcgYmxvY2tzLCByZXR1cm4gb25lIHRoYXQKICAgICAgICBzdGFydHMgZWFybGllc3QgaW4gYSwgYW5kIG9mIGFsbCB0aG9zZSBtYXhpbWFsIG1hdGNoaW5nIGJsb2NrcyB0aGF0CiAgICAgICAgc3RhcnQgZWFybGllc3QgaW4gYSwgcmV0dXJuIHRoZSBvbmUgdGhhdCBzdGFydHMgZWFybGllc3QgaW4gYi4KCiAgICAgICAgPj4+IHMgPSBTZXF1ZW5jZU1hdGNoZXIoTm9uZSwgIiBhYmNkIiwgImFiY2QgYWJjZCIpCiAgICAgICAgPj4+IHMuZmluZF9sb25nZXN0X21hdGNoKDAsIDUsIDAsIDkpCiAgICAgICAgTWF0Y2goYT0wLCBiPTQsIHNpemU9NSkKCiAgICAgICAgSWYgaXNqdW5rIGlzIGRlZmluZWQsIGZpcnN0IHRoZSBsb25nZXN0IG1hdGNoaW5nIGJsb2NrIGlzCiAgICAgICAgZGV0ZXJtaW5lZCBhcyBhYm92ZSwgYnV0IHdpdGggdGhlIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24gdGhhdCBubwogICAgICAgIGp1bmsgZWxlbWVudCBhcHBlYXJzIGluIHRoZSBibG9jay4gIFRoZW4gdGhhdCBibG9jayBpcyBleHRlbmRlZCBhcwogICAgICAgIGZhciBhcyBwb3NzaWJsZSBieSBtYXRjaGluZyAob25seSkganVuayBlbGVtZW50cyBvbiBib3RoIHNpZGVzLiAgU28KICAgICAgICB0aGUgcmVzdWx0aW5nIGJsb2NrIG5ldmVyIG1hdGNoZXMgb24ganVuayBleGNlcHQgYXMgaWRlbnRpY2FsIGp1bmsKICAgICAgICBoYXBwZW5zIHRvIGJlIGFkamFjZW50IHRvIGFuICJpbnRlcmVzdGluZyIgbWF0Y2guCgog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IGFuZCB0byBjb21wYXJlCiAgICBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyB3aXRoaW4gc2ltaWxhciAobmVhci1tYXRjaGluZykgbGluZXMuCgogICAgRWFjaCBsaW5lIG9mIGEgRGlmZmVyIGRlbHRhIGJlZ2lucyB3aXRoIGEgdHdvLWxldHRlciBjb2RlOgoKICAgICAgICAnLSAnICAgIGxpbmUgdW5pcXVlIHRvIHNlcXVlbmNlIDEKICAgICAgICAnKyAnICAgIGxpbmUgdW5pcXVlIHRvIHNlcXVlbmNlIDIKICAgICAgICAnICAnICAgIGxpbmUgY29tbW9uIHRvIGJvdGggc2VxdWVuY2VzCiAgICAgICAgJz8gJyAgICBsaW5lIG5vdCBwcmVzZW50IGluIGVpdGhlciBpbnB1dCBzZXF1ZW5jZQoKICAgIExpbmVzIGJlZ2lubmluZyB3aXRoICc/ICcgYXR0ZW1wdCB0byBndWlkZSB0aGUgZXllIHRvIGludHJhbGluZQogICAgZGlmZmVyZW5jZXMsIGFuZCB3ZXJlIG5vdCBwcmVzZW50IGluIGVpdGhlciBpbnB1dCBzZXF1ZW5jZS4gIFRoZXNlIGxpbmVzCiAgICBjYW4gYmUgY29uZnVzaW5nIGlmIHRoZSBzZXF1ZW5jZXMgY29udGFpbiB0YWIgY2hhcmFjdGVycy4KCiAgICBOb3RlIHRoYXQgRGlmZmVyIG1ha2VzIG5vIGNsYWltIHRvIHByb2R1Y2UgYSAqbWluaW1hbCogZGlmZi4gIFRvIHRoZQogICAgY29udHJhcnksIG1pbmltYWwgZGlmZnMgYXJlIG9mdGVuIGNvdW50ZXItaW50dWl0aXZlLCBiZWNhdXNlIHRoZXkgc3luY2gKICAgIHVwIGFueXdoZXJlIHBvc3NpYmxlLCBzb21ldGltZXMgYWNjaWRlbnRhbCBtYXRjaGVzIDEwMCBwYWdlcyBhcGFydC4KICAgIFJlc3RyaWN0aW5nIHN5bmNoIHBvaW50cyB0byBjb250aWd1b3VzIG1hdGNoZXMgcHJlc2VydmVzIHNvbWUgbm90aW9uIG9mCiAgICBsb2NhbGl0eSwgYXQgdGhlIG9jY2FzaW9uYWwgY29zdCBvZiBwcm9kdWNpbmcgYSBsb25nZXIgZGlmZi4KCiAgICBFeGFtcGxlOiBDb21wYXJpbmcgdHdvIHRleHRzLgoKICAgIEZpcnN0IHdlIHNldCB1cCB0aGUgdGV4dHMsIHNlcXVlbmNlcyBvZiBpbmRpdmlkdWFsIHNpbmdsZS1saW5lIHN0cmluZ3MKICAgIGVuZGluZyB3aXRoIG5ld2xpbmVzIChzdWNoIHNlcXVlbmNlcyBjYW4gYWxzbyBiZSBvYnRhaW5lZCBmcm9tIHRoZQogICAgYHJlYWRsaW5lcygpYCBtZXRob2Qgb2YgZmlsZS1saWtlIG9iamVjdHMpOgoKICAgID4+PiB0ZXh0MSA9ICcnJyAgMS4gQmVhdXRpZnVsIGlzIGJldHRlciB0aGFuIHVnbHkuCiAgICAuLi4gICAyLiBFeHBsaWNpdCBpcyBiZXR0ZXIgdGhhbiBpbXBsaWNpdC4KICAgIC4uLiAgIDMuIFNpbXBsZSBpcyBiZXR0ZXIgdGhhbiBjb21wbGV4LgogICAgLi4uICAgNC4gQ29tcGxleCBpcyBiZXR0ZXIgdGhhbiBjb21wbGljYXRlZC4KICAgIC4uLiAnJycuc3BsaXRsaW5lcygxKQogICAgPj4+IGxlbih0ZXh0MSkKICAgIDQKICAgID4+PiB0ZXh0MVswXVstMV0KICAgICdcbicKICAgID4+PiB0ZXh0MiA9ICcnJyAgMS4gQmVhdXRpZnVsIGlzIGJldHRlciB0aGFuIHVnbHkuCiAgICAuLi4gICAzLiAgIFNpbXBsZSBpcyBiZXR0ZXIgdGhhbiBjb21wbGV4LgogICAgLi4uICAgNC4gQ29tcGxpY2F0ZWQgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgIC4uLiAgIDUuIEZsYXQgaXMgYmV0dGVyIHRoYW4gbmVzdGVkLgogICAgLi4uICcnJy5zcGxpdGxpbmVzKDEpCgogICAgTmV4dCB3ZSBpbnN0YW50aWF0ZSBhIERpZmZlciBvYmplY3Q6CgogICAgPj4+IGQgPSBEaWZmZXIoKQoKICAgIE5vdGUgdGhhdCB3aGVuIGluc3RhbnRpYXRpbmcgYSBEaWZmZXIgb2JqZWN0IHdlIG1heSBwYXNzIGZ1bmN0aW9ucyB0bwogICAgZmlsdGVyIG91dCBsaW5lIGFuZCBjaGFyYWN0ZXIgJ2p1bmsnLiAgU2VlIERpZmZlci5fX2luaXRfXyBmb3IgZGV0YWlscy4KCiAgICBGaW5hbGx5LCB3ZSBjb21wYXJlIHRoZSB0d286CgogICAgPj4+IHJlc3VsdCA9IGxpc3QoZC5jb21wYXJlKHRleHQxLCB0ZXh0MikpCgogICAgJ3Jlc3VsdCcgaXMgYSBsaXN0IG9mIHN0cmluZ3MsIHNvIGxldCdzIHByZXR0eS1wcmludCBpdDoKCiAgICA+Pj4gZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludCBhcyBfcHByaW50CiAgICA+Pj4gX3BwcmludChyZXN1bHQpCiAgICBbJyAgICAxLiBCZWF1dGlmdWwgaXMgYmV0dGVyIHRoYW4gdWdseS5cbicsCiAgICAgJy0gICAyLiBFeHBsaWNpdCBpcyBiZXR0ZXIgdGhhbiBpbXBsaWNpdC5cbicsCiAgICAgJy0gICAzLiBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC5cbicsCiAgICAgJysgICAzLiAgIFNpbXBsZSBpcyBiZXR0ZXIgdGhhbiBjb21wbGV4LlxuJywKICAgICAnPyAgICAgKytcbicsCiAgICAgJy0gICA0LiBDb21wbGV4IGlzIGJldHRlciB0aGFuIGNvbXBsaWNhdGVkLlxuJywKICAgICAnPyAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAtLS0tIF5cbicsCiAgICAgJysgICA0LiBDb21wbGljYXRlZCBpcyBiZXR0ZXIgdGhhbiBjb21wbGV4LlxuJywKICAgICAnPyAgICAgICAgICAgKysrKyBeICAgICAgICAgICAgICAgICAgICAgIF5cbicsCiAgICAgJysgICA1LiBGbGF0IGlzIGJldHRlciB0aGFuIG5lc3RlZC5cbiddCgogICAgQXMgYSBzaW5nbGUgbXVsdGktbGluZSBzdHJpbmcgaXQgbG9va3MgbGlrZSB0aGlzOgoKICAgID4+PiBwcmludCAnJy5qb2luKHJlc3VsdCksCiAgICAgICAgMS4gQmVhdXRpZnVsIGlzIGJldHRlciB0aGFuIHVnbHkuCiAgICAtICAgMi4gRXhwbGljaXQgaXMgYmV0dGVyIHRoYW4gaW1wbGljaXQuCiAgICAtICAgMy4gU2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCiAgICArICAgMy4gICBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgID8gICAgICsrCiAgICAtICAgNC4gQ29tcGxleCBpcyBiZXR0ZXIgdGhhbiBjb21wbGljYXRlZC4KICAgID8gICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgLS0tLSBeCiAgICArICAgNC4gQ29tcGxpY2F0ZWQgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgID8gICAgICAgICAgICsrKysgXiAgICAgICAgICAgICAgICAgICAgICBeCiAgICArICAgNS4gRmxhdCBpcyBiZXR0ZXIgdGhhbiBuZXN0ZWQuCgogICAgTWV0aG9kczoKCiAgICBfX2luaXRfXyhsaW5lanVuaz1Ob25lLCBjaGFyanVuaz1Ob25lKQogICAgICAgIENvbnN0cnVjdCBhIHRleHQgZGlmZmVyZW5jZXIsIHdpdGggb3B0aW9uYWwgZmlsdGVycy4KCiAgICBjb21wYXJlKGEsIGIpCiAgICAgICAgQ29tcGFyZSB0d28gc2VxdWVuY2VzIG9mIGxpbmVzOyBnZW5lcmF0ZSB0aGUgcmVzdWx0aW5nIGRlbHRhLgogICAgYwMAAAADAAAAAgAAAEMAAABzFgAAAHwBAHwAAF8AAHwCAHwAAF8BAGQBAFMoAgAAAHPnAwAACiAgICAgICAgQ29uc3RydWN0IGEgdGV4dCBkaWZmZXJlbmNlciwgd2l0aCBvcHRpb25hbCBmaWx0ZXJzLgoKICAgICAgICBUaGUgdHdvIG9wdGlvbmFsIGtleXdvcmQgcGFyYW1ldGVycyBhcmUgZm9yIGZpbHRlciBmdW5jdGlvbnM6CgogICAgICAgIC0gYGxpbmVqdW5rYDogQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBhY2NlcHQgYSBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50LAogICAgICAgICAgYW5kIHJldHVybiB0cnVlIGlmZiB0aGUgc3RyaW5nIGlzIGp1bmsuIFRoZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb24KICAgICAgICAgIGBJU19MSU5FX0pVTktgIG1heSBiZSB1c2VkIHRvIGZpbHRlciBvdXQgbGluZXMgd2l0aG91dCB2aXNpYmxlCiAgICAgICAgICBjaGFyYWN0ZXJzLCBleGNlcHQgZm9yIGF0IG1vc3Qgb25lIHNwbGF0ICgnIycpLiAgSXQgaXMgcmVjb21tZW5kZWQKICAgICAgICAgIHRvIGxlYXZlIGxpbmVqdW5rIE5vbmU7IGFzIG9mIFB5dGhvbiAyLjMsIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgICBTZXF1ZW5jZU1hdGNoZXIgY2xhc3MgaGFzIGdyb3duIGFuIGFkYXB0aXZlIG5vdGlvbiBvZiAibm9pc2UiIGxpbmVzCiAgICAgICAgICB0aGF0J3MgYmV0dGVyIHRoYW4gYW55IHN0YXRpYyBkZWZpbml0aW9uIHRoZSBhdXRob3IgaGFzIGV2ZXIgYmVlbgogICAgICAgICAgYWJsZSB0byBjcmFmdC4KCiAgICAgICAgLSBgY2hhcmp1bmtgOiBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGFjY2VwdCBhIHN0cmluZyBvZiBsZW5ndGggMS4gVGhlCiAgICAgICAgICBtb2R1bGUtbGV2ZWwgZnVuY3Rpb24gYElTX0NIQVJBQ1RFUl9KVU5LYCBtYXkgYmUgdXNlZCB0byBmaWx0ZXIgb3V0CiAgICAgICAgICB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKGEgYmxhbmsgb3IgdGFiOyAqKm5vdGUqKjogYmFkIGlkZWEgdG8gaW5jbHVkZQogICAgICAgICAgbmV3bGluZSBpbiB0aGlzISkuICBVc2Ugb2YgSVNfQ0hBUkFDVEVSX0pVTksgaXMgcmVjb21tZW5kZWQuCiAgICAgICAgTigCAAAAdAgAAABsaW5lanVua3QIAAAAY2hhcmp1bmsoAwAAAFIXAAAAUn4AAABSfwAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZGlmZmxpYi5weVIYAAAAXAMAAHMEAAAAABUJAWMDAAAACwAA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L3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZGlmZmxpYi5weVIGAAAAVAQAAHMCAAAAAA5zAgAAACAJYwIAAAACAAAAAgAAAEMAAABzCgAAAHwAAHwBAGsGAFMoAQAAAHP7AAAACiAgICBSZXR1cm4gMSBmb3IgaWdub3JhYmxlIGNoYXJhY3RlcjogaWZmIGBjaGAgaXMgYSBzcGFjZSBvciB0YWIuCgogICAgRXhhbXBsZXM6CgogICAgPj4+IElTX0NIQVJBQ1RFUl9KVU5LKCcgJykKICAgIFRydWUKICAgID4+PiBJU19DSEFSQUNURVJfSlVOSygnXHQnKQogICAgVHJ1ZQogICAgPj4+IElTX0NIQVJBQ1RFUl9KVU5LKCdcbicpCiAgICBGYWxzZQogICAgPj4+IElTX0NIQVJBQ1RFUl9KVU5LKCd4JykKICAgIEZhbHNlCiAgICAoAAAAACgCAAAAUnwAAAB0AgAAAHdzKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kaWZmbGliLnB5UgUAAABkBAAAcwIAAAAAEGMCAAAABAAAAAMAAABDAAAAc1AAAAB8AABkAQAXfQIAfAEAfAAAGH0DAHwDAGQBAGsCAHItAGQCAGoAAHwCAIMBAFN8AwBzQAB8AgBkAQA4fQIAbgAAZAMAagAAfAIAfAMAgwIAUygEAAAAcyAAAABDb252ZXJ0IHJhbmdlIHRvIHRoZSAiZWQiIGZvcm1hdGkBAAAAcwIAAAB7fXMFAAAAe30se30oAQAAAHQGAAAAZm9ybWF0KAQAAAB0BQAAAHN0YXJ0dAQAAABzdG9wdAkAAABiZWdpbm5pbmdSDgAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZGlmZmxpYi5weXQVAAAAX2Zvcm1hdF9yYW5nZV91bmlmaWVkewQAAHMOAAAAAAMKAQoBDAENAQYBDQFSEAAAAHMBAAAACmMIAAAAFgAAAAcAAABjAAAAc6cBAAB0AAB9CAB4mgF0AQBkEwB8AAB8AQCDAwBqAwB8BgCDAQBEXX0BfQkAfAgAc5UAdAQAfQgAfAQAckkAZAEAagUAfAQAgwEAbgMAZAIAfQoAfAUAcmQAZAEAagUAfAUAgwEAbgMAZAIAfQsAZAMAagUAfAIAfAoAfAcAgwMAVgFkBABqBQB8AwB8CwB8BwCDAwBWAW4AAHwJAGQFABl8CQBkBgAZAn0MAH0NAHQGAHwMAGQHABl8DQBkCAAZgwIAfQ4AdAYAfAwAZAkAGXwNAGQKABmDAgB9DwBkCwBqBQB8DgB8DwB8BwCDAwBWAXiwAHwJAERdqABcBQB9EAB9EQB9EgB9EwB9FAB8EABkDABrAgByOwF4HgB8AAB8EQB8EgAhRF0PAH0VAGQNAHwVABdWAXEiAVdx8wBuAAB8EABkFABrBgByawF4IQB8AAB8EQB8EgAhRF0PAH0VAGQQAHwVABdWAXFVAVduAAB8EABkFQBrBgBy8wB4IQB8AQB8EwB8FAAhRF0PAH0VAGQSAHwVABdWAXGFAVdx8wBx8wBXcSIAV2QTAFMoFgAAAHOqBQAACiAgICBDb21wYXJlIHR3byBzZXF1ZW5jZXMgb2YgbGluZXM7IGdlbmVyYXRlIHRoZSBkZWx0YSBhcyBhIHVuaWZpZWQgZGlmZi4KCiAgICBVbmlmaWVkIGRpZmZzIGFyZSBhIGNvbXBhY3Qgd2F5IG9mIHNob3dpbmcgbGluZSBjaGFuZ2VzIGFuZCBhIGZldwogICAgbGluZXMgb2YgY29udGV4dC4gIFRoZSBudW1iZXIgb2YgY29udGV4dCBsaW5lcyBpcyBzZXQgYnkgJ24nIHdoaWNoCiAgICBkZWZhdWx0cyB0byB0aHJlZS4KCiAgICBCeSBkZWZhdWx0LCB0aGUgZGlmZiBjb250cm9sIGxpbmVzICh0aG9zZSB3aXRoIC0tLSwgKysrLCBvciBAQCkgYXJlCiAgICBjcmVhdGVkIHdpdGggYSB0cmFpbGluZyBuZXdsaW5lLiAgVGhpcyBpcyBoZWxwZnVsIHNvIHRoYXQgaW5wdXRzCiAgICBjcmVhdGVkIGZyb20gZmlsZS5yZWFkbGluZXMoKSByZXN1bHQgaW4gZGlmZnMgdGhhdCBhcmUgc3VpdGFibGUgZm9yCiAgICBmaWxlLndyaXRlbGluZXMoKSBzaW5jZSBib3RoIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgaGF2ZSB0cmFpbGluZwogICAgbmV3bGluZXMuCgogICAgRm9yIGlucHV0cyB0aGF0IGRvIG5vdCBoYXZlIHRyYWlsaW5nIG5ld2xpbmVzLCBzZXQgdGhlIGxpbmV0ZXJtCiAgICBhcmd1bWVudCB0byAiIiBzbyB0aGF0IHRoZSBvdXRwdXQgd2lsbCBiZSB1bmlmb3JtbHkgbmV3bGluZSBmcmVlLgoKICAgIFRoZSB1bmlkaWZmIGZvcm1hdCBub3JtYWxseSBoYXMgYSBoZWFkZXIgZm9yIGZpbGVuYW1lcyBhbmQgbW9kaWZpY2F0aW9uCiAgICB0aW1lcy4gIEFueSBvciBhbGwgb2YgdGhlc2UgbWF5IGJlIHNwZWNpZmllZCB1c2luZyBzdHJpbmdzIGZvcgogICAgJ2Zyb21maWxlJywgJ3RvZmlsZScsICdmcm9tZmlsZWRhdGUnLCBhbmQgJ3RvZmlsZWRhdGUnLgogICAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkgZXhwcmVzc2VkIGluIHRoZSBJU08gODYwMSBmb3JtYXQuCgogICAgRXhhbXBsZToKCiAgICA+Pj4gZm9yIGxpbmUgaW4gdW5pZmllZF9kaWZmKCdvbmUgdHdvIHRocmVlIGZvdXInLnNwbGl0KCksCiAgICAuLi4gICAgICAgICAgICAgJ3plcm8gb25lIHRyZWUgZm91cicuc3BsaXQoKSwgJ09yaWdpbmFsJywgJ0N1cnJlbnQnLAogICAgLi4uICAgICAgICAgICAgICcyMDA1LTAxLTI2IDIzOjMwOjUwJywgJzIwMTAtMDQtMDIgMTA6MjA6NTInLAogICAgLi4uICAgICAgICAgICAgIGxpbmV0ZXJtPScnKToKICAgIC4uLiAgICAgcHJpbnQgbGluZSAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCiAgICAtLS0gT3JpZ2luYWwgICAgICAgIDIwMDUtMDEtMjYgMjM6MzA6NTAKICAgICsrKyBDdXJyZW50ICAgICAgICAgMjAxMC0wNC0wMiAxMDoyMDo1MgogICAgQEAgLTEsNCArMSw0IEBACiAgICAremVybwogICAgIG9uZQogICAgLXR3bwogICAgLXRocmVlCiAgICArdHJlZQogICAgIGZvdXIKICAgIHMDAAAACXt9UhAAAABzCgAAAC0tLSB7fXt9e31zCgAAACsrKyB7fXt9e31pAAAAAGn/////aQEAAABpAgAAAGkDAAAAaQQAAABzDwAAAEBAIC17fSAre30gQEB7fVJYAAAAUoIAAABSVQAAAFJWAAAAUoAAAABSVwAAAFKBAAAATigCAAAAcwcAAAByZXBsYWNlcwYAAABkZWxldGUoAgAAAHMHAAAAcmVwbGFjZXMGAAAAaW5zZXJ0KAcAAAB0BQAAAEZhbHNlUgMAAABSEgAAAFJkAAAAUnEAAABSpAAAAFKoAAAAKBYAAABSEwAAAFIUAAAAdAgAAABmcm9tZmlsZXQGAAAAdG9maWxldAwAAABmcm9tZmlsZWRhdGV0CgAAAHRvZmlsZWRhdGVSMQAAAHQIAAAAbGluZXRlcm10BwAAAHN0YXJ0ZWRSYwAAAHQIAAAAZnJvbWRhdGV0BgAAAHRvZGF0ZVKLAAAAdAQAAABsYXN0dAsAAABmaWxlMV9yYW5nZXQLAAAAZmlsZTJfcmFuZ2VSXQAAAFJNAAAAUlEAAABSTgAAAFJSAAAAUnsAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RpZmZsaWIucHlSCAAAAIYEAABzLgAAAAApBgEiAQYBBgEbARsBFAEXAhUBFwEXARQCHAEMARQBDQEGAQwBFAEQAQwBFAFjAgAAAAQAAAAEAAAAQwAAAHNYAAAAfAAAZAEAF30CAHwBAHwAABh9AwB8AwBzJwB8AgBkAQA4fQIAbgAAfAMAZAEAawEAckAAZAIAagAAfAIAgwEAU2QDAGoAAHwCAHwCAHwDABdkAQAYgwIAUygEAAAAcyAAAABDb252ZXJ0IHJhbmdlIHRvIHRoZSAiZWQiIGZvcm1hdGkBAAAAcwIAAAB7fXMFAAAAe30se30oAQAAAFKkAAAAKAQAAABSpQAAAFKmAAAAUqcAAABSDgAAACgAAAAAKAAAAABzcgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvZGlmZmxpYi5weXQVAAAAX2Zvcm1hdF9yYW5nZV9jb250ZXh0zgQAAHMOAAAAAAMKAQoBBgENAQwBDQFjCAAAABgAAAAJAAAAYwAAAHMGAgAAdAAAZAEAZAIAZAMAZAQAZAUAZAYAZAcAZAgAgwAEfQgAdAEAfQkAeNgBdAIAZBgAfAAAfAEAgwMAagQAfAYAgwEARF27AX0KAHwJAHO2AHQFAH0JAHwEAHJqAGQJAGoGAHwEAIMBAG4DAGQKAH0LAHwFAHKFAGQJAGoGAHwFAIMBAG4DAGQKAH0MAGQLAGoGAHwCAHwLAHwHAIMDAFYBZAwAagYAfAMAfAwAfAcAgwMAVgFuAAB8CgBkDQAZfAoAZA4AGQJ9DQB9DgBkDwB8BwAXVgF0BwB8DQBkEAAZfA4AZBEAGYMCAH0PAGQSAGoGAHwPAHwHAIMCAFYBdAgAZBMAhAAAfAoARIMBAIMBAHJpAXhUAHwKAERdSQBcBQB9EAB9EQB9EgB9EwB9EwB8EABkAQBrAwByGQF4JQB8AAB8EQB8EgAhRF0TAH0UAHwIAHwQABl8FAAXVgFxSAFXcRkBcRkBV24AAHQHAHwNAGQUABl8DgBkFQAZgwIAfRUAZBYAagYAfBUAfAcAgwIAVgF0CABkFwCEAAB8CgBEgwEAgwEAckMAeFQAfAoARF1JAFwFAH0QAH0TAH0TAH0WAH0XAHwQAGQDAGsDAHKuAXglAHwBAHwWAHwXACFEXRMAfRQAfAgAfBAAGXwUABdWAXHdAVdxrgFxrgFXcUMAcUMAV2QYAFMoGQAAAHNMBQAACiAgICBDb21wYXJlIHR3byBzZXF1ZW5jZXMgb2YgbGluZXM7IGdlbmVyYXRlIHRoZSBkZWx0YSBhcyBhIGNvbnRleHQgZGlmZi4KCiAgICBDb250ZXh0IGRpZmZzIGFyZSBhIGNvbXBhY3Qgd2F5IG9mIHNob3dpbmcgbGluZSBjaGFuZ2VzIGFuZCBhIGZldwogICAgbGluZXMgb2YgY29udGV4dC4gIFRoZSBudW1iZXIgb2YgY29udGV4dCBsaW5lcyBpcyBzZXQgYnkgJ24nIHdoaWNoCiAgICBkZWZhdWx0cyB0byB0aHJlZS4KCiAgICBCeSBkZWZhdWx0LCB0aGUgZGlmZiBjb250cm9sIGxpbmVzICh0aG9zZSB3aXRoICoqKiBvciAtLS0pIGFyZQogICAgY3JlYXRlZCB3aXRoIGEgdHJhaWxpbmcgbmV3bGluZS4gIFRoaXMgaXMgaGVscGZ1bCBzbyB0aGF0IGlucHV0cwogICAgY3JlYXRlZCBmcm9tIGZpbGUucmVhZGxpbmVzKCkgcmVzdWx0IGluIGRpZmZzIHRoYXQgYXJlIHN1aXRhYmxlIGZvcgogICAgZmlsZS53cml0ZWxpbmVzKCkgc2luY2UgYm90aCB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIGhhdmUgdHJhaWxpbmcKICAgIG5ld2xpbmVzLgoKICAgIEZvciBpbnB1dHMgdGhhdCBkbyBub3QgaGF2ZSB0cmFpbGluZyBuZXdsaW5lcywgc2V0IHRoZSBsaW5ldGVybQogICAgYXJndW1lbnQgdG8gIiIgc28gdGhhdCB0aGUgb3V0cHV0IHdpbGwgYmUgdW5pZm9ybWx5IG5ld2xpbmUgZnJlZS4KCiAgICBUaGUgY29udGV4dCBkaWZmIGZvcm1hdCBub3JtYWxseSBoYXMgYSBoZWFkZXIgZm9yIGZpbGVuYW1lcyBhbmQKICAgIG1vZGlmaWNhdGlvbiB0aW1lcy4gIEFueSBvciBhbGwgb2YgdGhlc2UgbWF5IGJlIHNwZWNpZmllZCB1c2luZwogICAgc3RyaW5ncyBmb3IgJ2Zyb21maWxlJywgJ3RvZmlsZScsICdmcm9tZmlsZWRhdGUnLCBhbmQgJ3RvZmlsZWRhdGUnLgogICAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkgZXhwcmVzc2VkIGluIHRoZSBJU08gODYwMSBmb3JtYXQuCiAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgc3RyaW5ncyBkZWZhdWx0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IGFuZAogICAgICByZXR1cm4gdHJ1ZSBpZmYgdGhlIHN0cmluZyBpcyBqdW5rLiAgVGhlIGRlZmF1bHQgaXMgTm9uZSwgYW5kIGlzCiAgICAgIHJlY29tbWVuZGVkOyBhcyBvZiBQeXRob24gMi4zLCBhbiBhZGFwdGl2ZSBub3Rpb24gb2YgIm5vaXNlIiBsaW5lcyBpcwogICAgICB1c2VkIHRoYXQgZG9lcyBhIGdvb2Qgam9iIG9uIGl0cyBvd24uCgogICAgLSBjaGFyanVuazogQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBhY2NlcHQgYSBzdHJpbmcgb2YgbGVuZ3RoIDEuIFRoZQogICAgICBkZWZhdWx0IGlzIG1vZHVsZS1sZXZlbCBmdW5jdGlvbiBJU19DSEFSQUNURVJfSlVOSywgd2hpY2ggZmlsdGVycyBvdXQKICAgICAgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIChhIGJsYW5rIG9yIHRhYjsgbm90ZTogYmFkIGlkZWEgdG8gaW5jbHVkZSBuZXdsaW5lCiAgICAgIGluIHRoaXMhKS4KCiAgICBUb29scy9zY3JpcHRzL25kaWZmLnB5IGlzIGEgY29tbWFuZC1saW5lIGZyb250LWVuZCB0byB0aGlzIGZ1bmN0aW9uLgoKICAgIEV4YW1wbGU6CgogICAgPj4+IGRpZmYgPSBuZGlmZignb25lXG50d29cbnRocmVlXG4nLnNwbGl0bGluZXMoMSksCiAgICAuLi4gICAgICAgICAgICAgICdvcmVcbnRyZWVcbmVtdVxuJy5zcGxpdGxpbmVzKDEpKQogICAgPj4+IHByaW50ICcnLmpvaW4oZGlmZiksCiAgICAtIG9uZQogICAgPyAgXgogICAgKyBvcmUKICAgID8gIF4KICAgIC0gdHdvCiAgICAtIHRocmVlCiAgICA/ICAtCiAgICArIHRyZWUKICAgICsgZW11CiAgICAoAgAAAFIEAAAAUocAAAAoBAAAAFITAAAAUhQAAABSfgAAAFJ/AAAAKAAAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kaWZmbGliLnB5UgEAAAAkBQAAcwIAAAAAImMFAAAADwAAAAUAAAAjAAAAc9QBAABkAQBkAgBsAAB9BQB8BQBqAQBkAwCDAQCJAgB0AgB8AAB8AQB8AwB8BACDBACJAwBkBABkBABnAgCHAgBmAQBkBQCGAQCJAQCHAQCHAwBmAgBkBgCGAACJAACHAABmAQBkBwCGAAB9BgB8BgCDAAB9BwB8AgBkAgBrCABymQB4TwF0BABylQB8BwBqBQCDAABWAXGBAFduNwF8AgBkCAA3fQIAZAQAfQgAeCQBdAQAcs8BZAQAZAIAZwEAfAIAFAJ9CQB9CgB0BgB9CwB4TAB8CwB0BgBrCAByGgF8BwBqBQCDAABcAwB9DAB9DQB9CwB8CQB8AgAWfQ4AfAwAfA0AfAsAZgMAfAoAfA4APHwJAGQIADd9CQBxzwBXfAkAfAIAawQAcjUBZAkAVgF8AgB9CABuDAB8CQB9CABkBAB9CQB4MQB8CABydAF8CQB8AgAWfQ4AfAkAZAgAN30JAHwKAHwOABlWAXwIAGQIADh9CABxRAFXfAIAZAgAGH0IAHhKAHwIAHLLAXwHAGoFAIMAAFwDAH0MAH0NAH0LAHwLAHKwAXwCAGQIABh9CABuCgB8CABkCAA4fQgAfAwAfA0AfAsAZgMAVgFxggFXcawAV2QCAFMoCgAAAHPfBQAAUmV0dXJucyBnZW5lcmF0b3IgeWllbGRpbmcgbWFya2VkIHVwIGZyb20vdG8gc2lkZSBieSBzaWRlIGRpZmZlcmVuY2VzLgoKICAgIEFyZ3VtZW50czoKICAgIGZyb21saW5lcyAtLSBsaXN0IG9mIHRleHQgbGluZXMgdG8gY29tcGFyZWQgdG8gdG9saW5lcwogICAgdG9saW5lcyAtLSBsaXN0IG9mIHRleHQgbGluZXMgdG8gYmUgY29tcGFyZWQgdG8gZnJvbWxpbmVzCiAgICBjb250ZXh0IC0tIG51bWJlciBvZiBjb250ZXh0IGxpbmVzIHRvIGRpc3BsYXkgb24gZWFjaCBzaWRlIG9mIGRpZmZlcmVuY2UsCiAgICAgICAgICAgICAgIGlmIE5vbmUsIGFsbCBmcm9tL3RvIHRleHQgbGluZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgICBsaW5lanVuayAtLSBwYXNzZWQgb24gdG8gbmRpZmYgKHNlZSBuZGlmZiBkb2N1bWVudGF0aW9uKQogICAgY2hhcmp1bmsgLS0gcGFzc2VkIG9uIHRvIG5kaWZmIChzZWUgbmRpZmYgZG9jdW1lbnRhdGlvbikKCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gaXRlcmF0b3Igd2hpY2ggcmV0dXJucyBhIHR1cGxlOgogICAgKGZyb20gbGluZSB0dXBsZSwgdG8gbGluZSB0dXBsZSwgYm9vbGVhbiBmbGFnKQoKICAgIGZyb20vdG8gbGluZSB0dXBsZSAtLSAobGluZSBudW0sIGxpbmUgdGV4dCkKICAgICAgICBsaW5lIG51bSAtLSBpbnRlZ2VyIG9yIE5vbmUgKHRvIGluZGljYXRlIGEgY29udGV4dCBzZXBhcmF0aW9uKQogICAgICAgIGxpbmUgdGV4dCAtLSBvcmlnaW5hbCBsaW5lIHRleHQgd2l0aCBmb2xsb3dpbmcgbWFya2VycyBpbnNlcnRlZDoKICAgICAgICAgICAgJ1wwKycgLS0gbWFya3Mgc3RhcnQgb2YgYWRkZWQgdGV4dAogICAgICAgICAgICAnXDAtJyAtLSBtYXJrcyBzdGFydCBvZiBkZWxldGVkIHRleHQKICAgICAgICAgICAgJ1wwXicgLS0gbWFya3Mgc3RhcnQgb2YgY2hhbmdlZCB0ZXh0CiAgICAgICAgICAgICdcMScgLS0gbWFya3MgZW5kIG9mIGFkZGVkL2RlbGV0ZWQvY2hhbmdlZCB0ZXh0CgogICAgYm9vbGVhbiBmbGFnIC0tIE5vbmUgaW5kaWNhdGVzIGNvbnRleHQgc2VwYXJhdGlvbiwgVHJ1ZSBpbmRpY2F0ZXMKICAgICAgICBlaXRoZXIgImZyb20iIG9yICJ0byIgbGluZSBjb250YWlucyBhIGNoYW5nZSwgb3RoZXJ3aXNlIEZhbHNlLgoKICAgIFRoaXMgZnVuY3Rpb24vaXRlcmF0b3Igd2FzIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIHRvIGdlbmVyYXRlIHNpZGUgYnkgc2lkZQogICAgZmlsZSBkaWZmZXJlbmNlIGZvciBtYWtpbmcgSFRNTCBwYWdlcyAoc2VlIEh0bWxEaWZmIGNsYXNzIGZvciBleGFtcGxlCiAgICB1c2FnZSkuCgogICAgTm90ZSwgdGhpcyBmdW5jdGlvbiB1dGlsaXplcyB0aGUgbmRpZmYgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHNpZGUgYnkKICAgIHNpZGUgZGlmZmVyZW5jZSBtYXJrdXAuICBPcHRpb25hbCBuZGlmZiBhcmd1bWVudHMgbWF5IGJlIHBhc3NlZCB0byB0aGlzCiAgICBmdW5jdGlvbiBhbmQgdGhleSBpbiB0dXJuIHdpbGwgYmUgcGFzc2VkIHRvIG5kaWZmLgogICAgaf////9Ocw0AAAAoXCsrfFwtK3xcXispaQAAAABjBAAAAAsAAAAFAAAAEwAAAHMpAQAAfAMAfAIAYwIAGWQBADcDPHwBAGQGAGsIAHI3AHwDAHwCABl8AABqAQBkAgCDAQBkAwAfZgIAU3wBAGQEAGsCAHLnAHwAAGoBAGQCAIMBAHwAAGoBAGQCAIMBAAJ9BAB9BQBnAAB9BgB8BgBkBQCEAQB9BwCIAABqAgB8BwB8BQCDAgABeFMAfAYAZAYAZAYAZAcAhQMAGURdPgBcAgB9CABcAgB9CQB9CgB8BABkAgB8CQAhZAgAF3wIABd8BAB8CQB8CgAhF2QJABd8BAB8CgAfF30EAHGYAFd8BABkAwAffQQAbjQAfAAAagEAZAIAgwEAZAMAH30EAHwEAHMJAWQKAH0EAG4AAGQIAHwBABd8BAAXZAkAF30EAHwDAHwCABl8BABmAgBTKAsAAABzFwUAAFJldHVybnMgbGluZSBvZiB0ZXh0IHdpdGggdXNlcidzIGNoYW5nZSBtYXJrdXAgYW5kIGxpbmUgZm9ybWF0dGluZy4KCiAgICAgICAgbGluZXMgLS0gbGlzdCBvZiBsaW5lcyBmcm9tIHRoZSBuZGlmZiBnZW5lcmF0b3IgdG8gcHJvZHVjZSBhIGxpbmUgb2YKICAgICAgICAgICAgICAgICB0ZXh0IGZyb20uICBXaGVuIHByb2R1Y2luZyB0aGUgbGluZSBvZiB0ZXh0IHRvIHJldHVybiwgdGhlCiAgICAgICAgICAgICAgICAgbGluZXMgdXNlZCBhcmUgcmVtb3ZlZCBmcm9tIHRoaXMgbGlzdC4KICAgICAgICBmb3JtYXRfa2V5IC0tICcrJyByZXR1cm4gZmlyc3QgbGluZSBpbiBsaXN0IHdpdGggImFkZCIgbWFya3VwIGFyb3VuZAogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbnRpcmUgbGluZS4KICAgICAgICAgICAgICAgICAgICAgICctJyByZXR1cm4gZmlyc3QgbGluZSBpbiBsaXN0IHdpdGggImRlbGV0ZSIgbWFya3VwIGFyb3VuZAogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbnRpcmUgbGluZS4KICAgICAgICAgICAgICAgICAgICAgICc/JyByZXR1cm4gZmlyc3QgbGluZSBpbiBsaXN0IHdpdGggYWRkL2RlbGV0ZS9jaGFuZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyYWxpbmUgbWFya3VwIChpbmRpY2VzIG9idGFpbmVkIGZyb20gc2Vjb25kIGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICBOb25lIHJldHVybiBmaXJzdCBsaW5lIGluIGxpc3Qgd2l0aCBubyBtYXJrdXAKICAgICAgICBzaWRlIC0tIGluZGljZSBpbnRvIHRoZSBudW1fbGluZXMgbGlzdCAoMD1mcm9tLDE9dG8pCiAgICAgICAgbnVtX2xpbmVzIC0tIGZyb20vdG8gY3VycmVudCBsaW5lIG51bWJlci4gIFRoaXMgaXMgTk9UIGludGVuZGVkIHRvIGJlIGEKICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHBhcmFtZXRlci4gIEl0IGlzIHByZXNlbnQgYXMgYSBrZXl3b3JkIGFyZ3VtZW50IHRvCiAgICAgICAgICAgICAgICAgICAgIG1haW50YWluIG1lbW9yeSBvZiB0aGUgY3VycmVudCBsaW5lIG51bWJlcnMgYmV0d2VlbiBjYWxscwogICAgICAgICAgICAgICAgICAgICBvZiB0aGlzIGZ1bmN0aW9uLgoKICAgICAgICBOb3RlLCB0aGlzIGZ1bmN0aW9uIGlzIHB1cnBvc2VmdWxseSBub3QgZGVmaW5lZCBhdCB0aGUgbW9kdWxlIHNjb3BlIHNvCiAgICAgICAgdGhhdCBkYXRhIGl0IG5lZWRzIGZy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eHQgbGluZXMgKHdpdGggdGhlIGNoYW5nZQogICAgICAgIGluZGljYXRpb24pLiAgSWYgbmVjZXNzYXJ5IGl0IHdpbGwgY29sbGVjdCBzaW5nbGUgZnJvbS90byBsaW5lcwogICAgICAgIHVudGlsIGl0IGhhcyBhIG1hdGNoaW5nIHBhaXIgZnJvbS90byBwYWlyIHRvIHlpZWxkLgoKICAgICAgICBOb3RlLCB0aGlzIGZ1bmN0aW9uIGlzIHB1cnBvc2VmdWxseSBub3QgZGVmaW5lZCBhdCB0aGUgbW9kdWxlIHNjb3BlIHNvCiAgICAgICAgdGhhdCBkYXRhIGl0IG5lZWRzIGZyb20gaXRzIHBhcmVudCBmdW5jdGlvbiAod2l0aGluIHdob3NlIGNvbnRleHQgaXQKICAgICAgICBpcyBkZWZpbmVkKSBkb2VzIG5vdCBuZWVkIHRvIGJlIG9mIG1vZHVsZSBzY29wZS4KICAgICAgICBpAAAAAE4oBgAAAFJxAAAAUicAAABSzgAAAFISAAAAUiIAAABSRQAAACgIAAAAdA0AAABsaW5lX2l0ZXJhdG9ydAkAAABmcm9tbGluZXN0BwAAAHRvbGluZXNS1AAAAFLVAAAAdAoAAABmb3VuZF9kaWZmdAgAAABmcm9tRGlmZnQHAAAAdG9fZGlmZigBAAAAUtcAAAAoAAAAAHNyAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9kaWZmbGliLnB5dBMAAABfbGluZV9wYWlyX2l0ZXJhdG9yBQYAAHMYAAAAAA0JAQ0BCQInARUBDAEWAQwBGgIVARUBaQEAAAAoAwAAAE5OTigHAAAAdAIAAAByZXQHAAAAY29tcGlsZVIBAAAAUhIAAABScQAAAFLOAAAAUqkAAAAoDwAAAFLZAAAAUtoAAAB0BwAAAGNvbnRleHRSfgAAAFJ/AAAAUt8AAABS3gAAAHQSAAAAbGluZV9wYWlyX2l0ZXJhdG9ydA4AAABsaW5lc190b193cml0ZXQFAAAAaW5kZXh0DAAAAGNvbnRleHRMaW5lc1LbAAAAUtQAAABS1QAAAFIsAAAAKAAAAAAoBAAAAFLXAAAAUswAAABSywAAAFLWAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RpZmZsaWIucHl0BgAAAF9tZGlmZkgFAABzSgAAAAAiDAMPAxUCGDgSWw8eCQEMAQkBEgQKAQYBCQQUAQYBDwEVAQoBEwEOAwwBBQEJAgYBBgEJAQoBCgEJAQ4CCgEJARUCBgENAgoBc20BAAAKPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KCjxodG1sPgoKPGhlYWQ+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiCiAgICAgICAgICBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KICAgIDx0aXRsZT48L3RpdGxlPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4lKHN0eWxlcylzCiAgICA8L3N0eWxlPgo8L2hlYWQ+Cgo8Ym9keT4KICAgICUodGFibGUpcyUobGVnZW5kKXMKPC9ib2R5PgoKPC9odG1sPnNIAQAACiAgICAgICAgdGFibGUuZGlmZiB7Zm9udC1mYW1pbHk6Q291cmllcjsgYm9yZGVyOm1lZGl1bTt9CiAgICAgICAgLmRpZmZfaGVhZGVyIHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9CiAgICAgICAgdGQuZGlmZl9oZWFkZXIge3RleHQtYWxpZ246cmlnaHR9CiAgICAgICAgLmRpZmZfbmV4dCB7YmFja2dyb3VuZC1jb2xvcjojYzBjMGMwfQogICAgICAgIC5kaWZmX2FkZCB7YmFja2dyb3VuZC1jb2xvcjojYWFmZmFhfQogICAgICAgIC5kaWZmX2NoZyB7YmFja2dyb3VuZC1jb2xvcjojZmZmZjc3fQogICAgICAgIC5kaWZmX3N1YiB7YmFja2dyb3VuZC1jb2xvcjojZmZhYWFhfXNaAQAACiAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ18lKHByZWZpeClzX3RvcCIKICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgogICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CiAgICAgICAgJShoZWFkZXJfcm93KXMKICAgICAgICA8dGJvZHk+CiUoZGF0YV9yb3dzKXMgICAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPnP1AgAACiAgICA8dGFibGUgY2xhc3M9ImRpZmYiIHN1bW1hcnk9IkxlZ2VuZHMiPgogICAgICAgIDx0cj4gPHRoIGNvbHNwYW49IjIiPiBMZWdlbmRzIDwvdGg+IDwvdHI+CiAgICAgICAgPHRyPiA8dGQ+IDx0YWJsZSBib3JkZXI9IiIgc3VtbWFyeT0iQ29sb3JzIj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGg+IENvbG9ycyA8L3RoPiA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwO0FkZGVkJm5ic3A7PC90ZD48L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9jaGciPkNoYW5nZWQ8L3RkPiA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9zdWIiPkRlbGV0ZWQ8L3RkPiA8L3RyPgogICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ+CiAgICAgICAgICAgICA8dGQ+IDx0YWJsZSBib3JkZXI9IiIgc3VtbWFyeT0iTGlua3MiPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj4gTGlua3MgPC90aD4gPC90cj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGQ+KGYpaXJzdCBjaGFuZ2U8L3RkPiA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD4obilleHQgY2hhbmdlPC90ZD4gPC90cj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGQ+KHQpb3A8L3RkPiA8L3RyPgogICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ+IDwvdHI+CiAgICA8L3RhYmxlPmMAAAAAAAAAAAUAAABCAAAAc6oAAABlAABaAQBkAABaAgBlAwBaAwBlBABaBABlBQBaBQBlBgBaBgBkAQBaBwBkAgBkDwBkDwBlCQBkAwCEBABaCgBkBABkBABlCwBkBQBkBgCEBABaDABkBwCEAABaDQBkCACEAABaDgBkCQCEAABaDwBkCgCEAABaEABkCwCEAABaEQBkDACEAABaEgBkDQCEAABaEwBkBABkBABlCwBkBQBkDgCEBABaFABSUygQAAAAc3sCAABGb3IgcHJvZHVjaW5nIEhUTUwgc2lkZSBieSBzaWRlIGNvbXBhcmlzb24gd2l0aCBjaGFuZ2UgaGlnaGxpZ2h0cy4KCiAgICBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBIVE1MIHRhYmxlIChvciBhIGNvbXBsZXRlIEhUTUwgZmlsZQogICAgY29udGFpbmluZyB0aGUgdGFibGUpIHNob3dpbmcgYSBzaWRlIGJ5IHNpZGUsIGxpbmUgYnkgbGluZSBjb21wYXJpc29uCiAgICBvZiB0ZXh0IHdpdGggaW50ZXItbGluZSBhbmQgaW50cmEtbGluZSBjaGFuZ2UgaGlnaGxpZ2h0cy4gIFRoZSB0YWJsZSBjYW4KICAgIGJlIGdlbmVyYXRlZCBpbiBlaXRoZXIgZnVsbCBvciBjb250ZXh0dWFsIGRpZmZlcmVuY2UgbW9kZS4KCiAgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHByb3ZpZGVkIGZvciBIVE1MIGdlbmVyYXRpb246CgogICAgbWFrZV90YWJsZSAtLSBnZW5lcmF0ZXMgSFRNTCBmb3IgYSBzaW5nbGUgc2lkZSBieSBzaWRlIHRhYmxlCiAgICBtYWtlX2ZpbGUgLS0gZ2VuZXJhdGVzIGNvbXBsZXRlIEhUTUwgZmlsZSB3aXRoIGEgc2luZ2xlIHNpZGUgYnkgc2lkZSB0YWJsZQoKICAgIFNlZSB0b29scy9zY3JpcHRzL2RpZmYucHkgZm9yIGFuIGV4YW1wbGUgdXNhZ2Ugb2YgdGhpcyBjbGFzcy4KICAgIGkAAAAAaQgAAABjBQAAAAUAAAACAAAAQwAAAHMoAAAAfAEAfAAAXwAAfAIAfAAAXwEAfAMAfAAAXwIAfAQAfAAAXwMAZAEAUygCAAAAc9sBAABIdG1sRGlmZiBpbnN0YW5jZSBpbml0aWFsaXplcgoKICAgICAgICBBcmd1bWVudHM6CiAgICAgICAgdGFic2l6ZSAtLSB0YWIgc3RvcCBzcGFjaW5nLCBkZWZhdWx0cyB0byA4LgogICAgICAgIHdyYXBjb2x1bW4gLS0gY29sdW1uIG51bWJlciB3aGVyZSBsaW5lcyBhcmUgYnJva2VuIGFuZCB3cmFwcGVkLAogICAgICAgICAgICBkZWZhdWx0cyB0byBOb25lIHdoZXJlIGxpbmVzIGFyZSBub3Qgd3JhcHBlZC4KICAgICAgICBsaW5lanVuayxjaGFyanVuayAtLSBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgaW50byBuZGlmZigpICh1c2VkIHRvIGJ5CiAgICAgICAgICAgIEh0bWxEaWZmKCkgdG8gZ2VuZXJhdGUgdGhlIHNpZGUgYnkgc2lkZSBIVE1MIGRpZmZlcmVuY2VzKS4gIFNlZQogICAgICAgICAgICBuZGlmZigpIGRvY3VtZW50YXRpb24gZm9yIGFyZ3VtZW50IGRlZmF1bHQgdmFsdWVzIGFuZCBkZXNjcmlwdGlvbnMuCiAgICAgICAgTigEAAAAdAgAAABfdGFic2l6ZXQLAAAAX3dyYXBjb2x1bW50CQAAAF9saW5lanVua3QJAAAAX2NoYXJqdW5rKAUAAABSFwAAAHQHAAAAdGFic2l6ZXQKAAAAd3JhcGNvbHVtblJ+AAAAUn8AAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RpZmZsaWIucHlSGAAAAJ4GAABzCAAAAAAMCQEJAQkBUhAAAABpBQAAAGMHAAAABwAAABAAAABDAAAAc0QAAAB8AABqAAB0AQBkAQB8AABqAgBkAgB8AABqAwBkAwB8AABqBAB8AQB8AgB8AwB8BABkBAB8BQBkBQB8BgCDBAKDAAMWUygGAAAAc+0CAABSZXR1cm5zIEhUTUwgZmlsZSBvZiBzaWRlIGJ5IHNpZGUgY29tcGFyaXNvbiB3aXRoIGNoYW5nZSBoaWdobGlnaHRzCgogICAgICAgIEFyZ3VtZW50czoKICAgICAgICBmcm9tbGluZXMgLS0gbGlzdCBvZiAiZnJvbSIgbGluZXMKICAgICAgICB0b2xpbmVzIC0tIGxpc3Qgb2YgInRvIiBsaW5lcwogICAgICAgIGZyb21kZXNjIC0tICJmcm9tIiBmaWxlIGNvbHVtbiBoZWFkZXIgc3RyaW5nCiAgICAgICAgdG9kZXNjIC0tICJ0byIgZmlsZSBjb2x1bW4gaGVhZGVyIHN0cmluZwogICAgICAgIGNvbnRleHQgLS0gc2V0IHRvIFRydWUgZm9yIGNvbnRleHR1YWwgZGlmZmVyZW5jZXMgKGRlZmF1bHRzIHRvIEZhbHNlCiAgICAgICAgICAgIHdoaWNoIHNob3dzIGZ1bGwgZGlmZmVyZW5jZXMpLgogICAgICAgIG51bWxpbmVzIC0tIG51bWJlciBvZiBjb250ZXh0IGxpbmVzLiAgV2hlbiBjb250ZXh0IGlzIHNldCBUcnVlLAogICAgICAgICAgICBjb250cm9scyBudW1iZXIgb2YgbGluZXMgZGlzcGxheWVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNoYW5nZS4KICAgICAgICAgICAgV2hlbiBjb250ZXh0IGlzIEZhbHNlLCBjb250cm9scyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHBsYWNlCiAgICAgICAgICAgIHRoZSAibmV4dCIgbGluayBhbmNob3JzIGJlZm9yZSB0aGUgbmV4dCBjaGFuZ2UgKHNvIGNsaWNrIG9mCiAgICAgICAgICAgICJuZXh0IiBsaW5rIGp1bXBzIHRvIGp1c3QgYmVmb3JlIHRoZSBjaGFuZ2UpLgogICAgICAgIHQGAAAAc3R5bGVzdAYAAABsZWdlbmR0BQAAAHRhYmxlUuEAAAB0CAAAAG51bWxpbmVzKAUAAAB0DgAAAF9maWxlX3RlbXBsYXRlUrgAAAB0BwAAAF9zdHlsZXN0BwAAAF9sZWdlbmR0CgAAAG1ha2VfdGFibGUoBwAAAFIXAAAAUtkAAABS2gAAAHQIAAAAZnJvbWRlc2N0BgAAAHRvZGVzY1LhAAAAUvAAAAAoAAAAACgAAAAAc3IAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2RpZmZsaWIucHl0CQAAAG1ha2VfZmlsZa8GAABzCgAAAAASDAEJAQkBFQFjAwAAAAUAAAAEAAAAAwAAAHNXAAAAhwAAZgEAZAEAhgAAfQMAZwAAfAEARF0SAH0EAHwDAHwEAIMBAF4CAHEWAH0BAGcAAHwCAERdEgB9BAB8AwB8BACDAQBeAgBxNQB9AgB8AQB8AgBmAgBTKAIAAABzAAIAAFJldHVybnMgZnJvbS90byBsaW5lIGxpc3RzIHdpdGggdGFicyBleHBhbmRlZCBhbmQgbmV3bGluZXMgcmVtb3ZlZC4KCiAgICAgICAgSW5zdGVhZCBvZiB0YWIgY2hhcmFjdGVycyBiZWluZyByZXBsYWNlZCBieSB0aGUgbnVtYmVyIG9mIHNwYWNlcwogICAgICAgIG5lZWRlZCB0byBmaWxsIGluIHRvIHRoZSBuZXh0IHRhYiBzdG9wLCB0aGlzIGZ1bmN0aW9uIHdpbGwgZmlsbAogICAgICAgIHRoZSBzcGFjZSB3aXRoIHRhYiBjaGFyYWN0ZXJzLiAgVGhpcyBpcyBkb25lIHNvIHRoYXQgdGhlIGRpZmZlcmVuY2UKICAgICAgICBhbGdvcml0aG1zIGNhbiBpZGVudGlmeSBjaGFuZ2VzIGluIGEgZmlsZSB3aGVuIHRhYnMgYXJlIHJlcGxhY2VkIGJ5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