YQ0NCgAAAABGGnxjcVQAAOMAAAAAAAAAAAAAAAAAAAAABwAAAEAAAABzrAUAAGQAZAFsAFoAZABkAWwBWgFkAGQBbAJaAmQAZAFsA1oDZABkAWwEWgRkAGQBbAVaBWQAZAFsBloGZABkAWwHWgdkAGQBbAhaCGQAZAFsCVoJZABkAWwKWgpkAGQBbAtaDGQAZAJsBG0NWg0BAGQAZANsDm0PWg9tEFoQbRFaEQEAZABkBGwSbRNaEwEAZABkBWwUbRVaFW0WWhZtF1oXbRhaGG0ZWhltGloabRtaG20cWhxtHVodbR5aHm0fWh9tIFogbSFaIW0iWiJtI1ojAQBkAGQGbCRtJVolAQBkAGQHbCZtJ1onbShaKG0pWikBAGQAZAhsKm0rWisBAGQAZAlsLG0tWi0BAGQAZApsLm0vWi8BAGQAZAtsMG0xWjEBAGQAZAxsMm0zWjMBAGcAZA2iAVo0ZQWgNWU2oQFaN2UiZA6DAVo4ZSBlIWU5GQBlOWUTZgMZAFo6ZSBlO2U7ZTtmAxkAWjxlIGU9ZSBlHmU9GQBlHmU9GQBmAhkAZgIZAFo+ZT1kD5wBZBBkEYQEWj9lIGU7ZBJmAhkAZSBlO2U7ZTtmAxkAZBOcAmQUZBWEBFpAZT1kAWQWnAJkF2QYhARaQWU9ZA+cAWQZZBqEBFpCZSdkG2UoZByDAWUpZB2DAWQejQNklWU9ZUNkAWQgnANkIWQihAWDAVpEZRdkEmUVZgIZAGU9ZTpkAWQjnARkJGQlhARaRWU9ZT1kFpwCZCZkJ4QEWkZklmU9ZT1lPWQpnANkKmQrhAVaR2U9ZRtlPRkAZT1kLJwDZC1kLoQEWkhlPWQBZC+cAmQwZDGEBFpJZT1lG2U9GQBlPWQsnANkMmQzhARaSmU9ZT1kL5wCZDRkNYQEWktlPWU9ZC+cAmQ2ZDeEBFpMZT1lO2Q4nAJkOWQ6hARaTWVOZT1kO5wCZDxkPYQEWk9lG2UbZRUZABkAZSBlHWU9GQBlHWU7GQBmAhkAZD6cAmQ/ZECEBFpQZT1lQ2QWnAJkQWRChARaUWUEalJmAWUWZTtlGmVTZAFkAWYDGQBkQ5wDZERkRYQFWlRkl2U9ZUNlPWRGnANkR2RIhAVaVWU9ZSBlPWU9ZgIZAGQWnAJkSWRKhARaVmU9ZT1kAWRLnANkTGRNhARaV2U9ZUNkFpwCZE5kT4QEWlhlFWUVZAFkUJwDZFFkUoQEWllHAGRTZFSEAGRUZQ2DA1paZQBqW2U9ZRplWmQBZAFmAxkAZFWcAmRWZFeEBIMBWlxlGGVaGQBkD5wBZFhkWYQEWl1lGGVaGQBkD5wBZFpkW4QEWl5lFWUVZSFlFRkAZFycA2RdZF6EBFpfZT1lHmU7GQBlPWRfnANkYGRhhARaYGSYZT1lPWU9ZGOcA2RkZGWEBVphZT1lIGU9ZR5lOxkAZgIZAGRmnAJkZ2RohARaYmU9ZT5kZpwCZGlkaoQEWmNlPWU9ZGacAmRrZGyEBFpkZT1lF2U9ZwFlIGUVZBJmAhkAZgIZAGUgZT1lPmYCGQBkbZwDZG5kb4QEWmVlPWU+ZGacAmRwZHGEBFpmZT1lIGU9GQBkZpwCZHJkc4QEWmdlPWUgZT1lPWUgZT1lPWYCGQBmAxkAZHScAmR1ZHaEBFpoZT1lPWR0nAJkd2R4hARaaWU9ZT1kdJwCZHlkeoQEWmpHAGR7ZHyEAGR8gwJaa2U9ZWtkfZwCZH5kf4QEWmxlPWVrZHScAmSAZIGEBFptZUNkAWSCnAJkg2SEhARabmVDZA+cAWSFZIaEBFpvZJllPWU7ZSBlFWU7ZgIZAGSInANkiWSKhAVacGVDZA+cAWSLZIyEBFpxZRtlFRkAZRxlIGUVZRVmAhkAGQBkjZwCZI5kj4QEWnJlF2U4ZwFlQ2YCGQBlG2U4GQBlIGUbZTgZAGUbZTgZAGYCGQBkkJwDZJFkkoQEWnNHAGSTZJSEAGSUZSWDA1p0ZAFTACma6QAAAABOKQHaCFN0cmluZ0lPKQPaC2ZpbHRlcmZhbHNl2gN0ZWXaC3ppcF9sb25nZXN0KQHaDVRyYWNlYmFja1R5cGUpD9oDQW552ghCaW5hcnlJT9oIQ2FsbGFibGXaDkNvbnRleHRNYW5hZ2Vy2gREaWN02glHZW5lcmF0b3LaCEl0ZXJhYmxl2ghJdGVyYXRvctoETGlzdNoIT3B0aW9uYWzaBlRleHRJT9oFVHVwbGXaBFR5cGXaB1R5cGVWYXLaBGNhc3QpAdoQUGVwNTE3SG9va0NhbGxlcikD2gVyZXRyedoQc3RvcF9hZnRlcl9kZWxhedoKd2FpdF9maXhlZCkB2gtfX3ZlcnNpb25fXykB2gxDb21tYW5kRXJyb3IpAdoXZ2V0X21ham9yX21pbm9yX3ZlcnNpb24pAdoHV0lORE9XUykB2hhydW5uaW5nX3VuZGVyX3ZpcnR1YWxlbnYpDtoGcm10cmVl2gxkaXNwbGF5X3BhdGjaCmJhY2t1cF9kaXLaA2Fza9oIc3BsaXRleHTaC2Zvcm1hdF9zaXpl2hJpc19pbnN0YWxsYWJsZV9kaXLaDm5vcm1hbGl6ZV9wYXRo2gdyZW5hbWVz2ghnZXRfcHJvZ9oPY2FwdHVyZWRfc3Rkb3V02gplbnN1cmVfZGly2hRyZW1vdmVfYXV0aF9mcm9tX3VybNoaQ29uZmlndXJlZFBlcDUxN0hvb2tDYWxsZXLaAVSpAdoGcmV0dXJuYwAAAAAAAAAAAAAAAAEAAAAFAAAAQwAAAHM0AAAAdABqAaACdABqAaADdAShAWQBZAGhA30AdABqAaAFfAChAX0AZAKgBnQHfAB0CIMAoQNTACkDTnoCLi56GnBpcCB7fSBmcm9tIHt9IChweXRob24ge30pKQnaAm9z2gRwYXRo2gRqb2lu2gdkaXJuYW1l2ghfX2ZpbGVfX9oHYWJzcGF0aNoGZm9ybWF0choAAAByHAAAACkB2gtwaXBfcGtnX2RpcqkAcjgAAAD6VS9ob21lL2huaS9Ub3BtZXRhbFNlLURQUy92ZW52L2xpYi9weXRob24zLjkvc2l0ZS1wYWNrYWdlcy9waXAvX2ludGVybmFsL3V0aWxzL21pc2MucHnaD2dldF9waXBfdmVyc2lvbkgAAABzDgAAAAABGAEMAgQBAgECAQT9cjoAAAAuKQLaD3B5X3ZlcnNpb25faW5mb3IvAAAAYwEAAAAAAAAAAAAAAAEAAAAEAAAAQwAAAHNEAAAAdAB8AIMBZAFrAHIifABkAXQAfACDARgAZAIUADcAfQBuGHQAfACDAWQBawRyOnwAZANkAYUCGQB9AHQBZAR8AIMCUwApBWF4AQAACiAgICBDb252ZXJ0IGEgdHVwbGUgb2YgaW50cyByZXByZXNlbnRpbmcgYSBQeXRob24gdmVyc2lvbiB0byBvbmUgb2YgbGVuZ3RoCiAgICB0aHJlZS4KCiAgICA6cGFyYW0gcHlfdmVyc2lvbl9pbmZvOiBhIHR1cGxlIG9mIGludHMgcmVwcmVzZW50aW5nIGEgUHl0aG9uIHZlcnNpb24sCiAgICAg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