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XwMAZAAAfAAAXwQAZAAABHwAAF8FAHwAAF8GAGcAAHwAAF8HAGQBAHwAAF8IAGQAAFMoAgAAAE5zCgAAAHRleHQvcGxhaW4oCQAAAHQIAAAAX2hlYWRlcnNSBwAAAHQJAAAAX3VuaXhmcm9tdAgAAABfcGF5bG9hZHQIAAAAX2NoYXJzZXR0CAAAAHByZWFtYmxldAgAAABlcGlsb2d1ZXQHAAAAZGVmZWN0c3QNAAAAX2RlZmF1bHRfdHlwZSgBAAAAdAQAAABzZWxmKAAAAAAoAAAAAHNUAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9lbWFpbC9tZXNzYWdlLnB5dAgAAABfX2luaXRfX2sAAABzDgAAAAABCQEJAQkBCQIQAQkCYwEAAAABAAAAAwAAAEMAAABzEAAAAHwAAGoAAGQBAHQBAIMAAVMoAgAAAHN3AAAAUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCiAgICAgICAgVGhpcyBpbmNsdWRlcyB0aGUgaGVhZGVycywgYm9keSwgYW5kIGVudmVsb3BlIGhlYWRlci4KICAgICAgICB0CAAAAHVuaXhmcm9tKAIAAAB0CQAAAGFzX3N0cmluZ3QEAAAAVHJ1ZSgBAAAAUi4AAAAoAAAAACgAAAAAc1QAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0BwAAAF9fc3RyX192AAAAcwIAAAAABGMCAAAABQAAAAQAAABDAAAAc0IAAABkAQBkAgBsAABtAQB9AgABdAIAgwAAfQMAfAIAfAMAgwEAfQQAfAQAagMAfAAAZAMAfAEAgwEBAXwDAGoEAIMAAFMoBAAAAHORAQAAUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCiAgICAgICAgT3B0aW9uYWwgYHVuaXhmcm9tJyB3aGVuIFRydWUsIG1lYW5zIGluY2x1ZGUgdGhlIFVuaXggRnJvbV8gZW52ZWxv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BAB8BABkBABrAgBymgB0CQBqCgB8AwCDAQBTfAQAZAUAawIActIAeREAdAkAagsAfAMAgwEAU1dxMgEEdAwAag0AawoAcs4AAQEBfAMAU1hxNQF8BABkDQBrBgByNQF0DgCDAAB9BQB5MAB0DwBqEAB0DgB8AwBkCgAXgwEAfAUAZAsAdBEAgwIBAXwFAGoSAIMAAH0DAFdxMgEEdA8Aag0AawoAci4BAQEBfAMAU1hxNQFuAAB8AwBTKA4AAABzWgMAAFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcGF5bG9hZC4KCiAgICAgICAgVGhlIHBheWxvYWQgd2lsbCBlaXRoZXIgYmUgYSBsaXN0IG9iamVjdCBvciBhIHN0cmluZy4gIElmIHlvdSBtdXRhdGUKICAgICAgICB0aGUgbGlzdCBvYmplY3QsIHlvdSBtb2RpZnkgdGhlIG1lc3NhZ2UncyBwYXlsb2FkIGluIHBsYWNlLiAgT3B0aW9uYWwKICAgICAgICBpIHJldHVybnMgdGhhdCBpbmRleCBpbnRvIHRoZSBwYXlsb2FkLgoKICAgICAgICBPcHRpb25hbCBkZWNvZGUgaXMgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgcGF5bG9hZCBzaG91bGQgYmUKICAgICAgICBkZWNvZGVkIG9yIG5vdCwgYWNjb3JkaW5nIHRvIHRoZSBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGhlYWRlcgogICAgICAgIChkZWZhdWx0IGlzIEZhbHNlKS4KCiAgICAgICAgV2hlbiBUcnVlIGFuZCB0aGUgbWVzc2FnZSBpcyBub3QgYSBtdWx0aXBhcnQsIHRoZSBwYXlsb2FkIHdpbGwgYmUKICAgICAgICBkZWNvZGVkIGlmIHRoaXMgaGVhZGVyJ3MgdmFsdWUgaXMgYHF1b3RlZC1wcmludGFibGUnIG9yIGBiYXNlNjQnLiAgSWYKICAgICAgICBzb21lIG90aGVyIGVuY29kaW5nIGlzIHVzZWQsIG9yIHRoZSBoZWFkZXIgaXMgbWlzc2luZywgb3IgaWYgdGhlCiAgICAgICAgcGF5bG9hZCBoYXMgYm9ndXMgZGF0YSAoaS5lLiBib2d1cyBiYXNlNjQgb3IgdXVlbmNvZGVk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cnNldCBpcyBOb25lLCB0aGUgY2hhcnNldCBwYXJhbWV0ZXIgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlCiAgICAgICAgQ29udGVudC1UeXBlIGZpZWxkLiAgQW55dGhpbmcgZWxzZSB3aWxsIGdlbmVyYXRlIGEgVHlwZUVycm9yLgoKICAgICAgICBUaGUgbWVzc2FnZSB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgb2YgdHlwZSB0ZXh0LyogZW5jb2RlZCB3aXRoCiAgICAgICAgY2hhcnNldC5pbnB1dF9jaGFyc2V0LiAgSXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gY2hhcnNldC5vdXRwdXRfY2hhcnNldAogICAgICAgIGFuZCBlbmNvZGVkIHByb3Blcmx5LCBpZiBuZWVkZWQsIHdoZW4gZ2VuZXJhdGluZyB0aGUgcGxhaW4gdGV4dAogICAgICAgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlLiAgTUlNRSBoZWFkZXJzIChNSU1FLVZlcnNpb24sCiAgICAgICAgQ29udGVudC1UeXBlLCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nKSB3aWxsIGJlIGFkZGVkIGFzIG5lZWRlZC4KCiAgICAgICAgUlIAAABOcwwAAABNSU1FLVZlcnNpb25zAwAAADEuMHMMAAAAQ29udGVudC1UeXBlcwoAAAB0ZXh0L3BsYWlucxkAAABDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nKBMAAABSBwAAAHQJAAAAZGVsX3BhcmFtUikAAABSDwAAAHQKAAAAYmFzZXN0cmluZ3QFAAAAZW1haWxSUgAAAHQHAAAAQ2hhcnNldFJFAAAAdAoAAABhZGRfaGVhZGVydBIAAABnZXRfb3V0cHV0X2NoYXJzZXR0CQAAAHNldF9wYXJhbVIoAAAAdAcAAAB1bmljb2RldAYAAABlbmNvZGV0DgAAAG91dHB1dF9jaGFyc2V0dAMAAABzdHJ0CwAAAGJvZHlfZW5jb2RldBEAAABnZXRfYm9keV9lbmNvZGluZygDAAAAUi4AAABSUgAAAFJOAAAAKAAAAAAoAAAAAHNUAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9lbWFpbC9tZXNzYWdlLnB5UlEAAADkAAAAczQAAAAADwwBDQEJAQQBDwEVARUBDwMJAQwBEwEMAQ8BEAIWARIBGwEYARgBDAEMAQMBDgENARUBYwEAAAABAAAAAQAAAEMAAABzBwAAAHwAAGoAAFMoAQAAAHNLAAAAUmV0dXJuIHRoZSBDaGFyc2V0IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZSdzIHBheWxvYWQuCiAgICAgICAgKAEAAABSKQAAACgBAAAAUi4AAAAoAAAAACgAAAAAc1QAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0CwAAAGdldF9jaGFyc2V0EQEAAHMCAAAAAANjAQAAAAEAAAACAAAAQwAAAHMNAAAAdAAAfAAAagEAgwEAUygBAAAAczkAAABSZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBoZWFkZXJzLCBpbmNsdWRpbmcgZHVwbGljYXRlcy4oAgAAAFIOAAAAUiYAAAAoAQAAAFIuAAAAKAAAAAAoAAAAAHNUAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9lbWFpbC9tZXNzYWdlLnB5dAcAAABfX2xlbl9fGQEAAHMCAAAAAAJjAgAAAAIAAAACAAAAQwAAAHMNAAAAfAAAagAAfAEAgwEAUygBAAAAcy0BAABHZXQgYSBoZWFkZXIgdmFsdWUuCgogICAgICAgIFJldHVybiBOb25lIGlmIHRoZSBoZWFkZXIgaXMgbWlzc2luZyBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXhjZXB0aW9uLgoKICAgICAgICBOb3RlIHRoYXQgaWYgdGhlIGhlYWRlciBhcHBlYXJlZCBtdWx0aXBsZSB0aW1lcywgZXhhY3RseSB3aGljaAogICAgICAgIG9jY3VycmVuY2UgZ2V0cyByZXR1cm5lZCBpcyB1bmRlZmluZWQuICBVc2UgZ2V0X2FsbCgpIHRvIGdl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d2F5cyBoYXZlIGEgZGVmYXVsdAogICAgICAgIHR5cGUgdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gYSB2YWx1ZS4KCiAgICAgICAgUkZDIDIwNDUgZGVmaW5lcyBhIG1lc3NhZ2UncyBkZWZhdWx0IHR5cGUgdG8gYmUgdGV4dC9wbGFpbiB1bmxlc3MgaXQKICAgICAgICBhcHBlYXJzIGluc2lkZSBhIG11bHRpcGFydC9kaWdlc3QgY29udGFpbmVyLCBpbiB3aGljaCBjYXNlIGl0IHdvdWxkIGJlCiAgICAgICAgbWVzc2FnZS9yZmM4MjIuCiAgICAgICAgcwwAAABjb250ZW50LXR5cGVpAAAAAHQBAAAAL2kBAAAAcwoAAAB0ZXh0L3BsYWluKAYAAABSbAAAAFJHAAAAdBAAAABnZXRfZGVmYXVsdF90eXBlUgwAAABSHAAAAFIaAAAAKAQAAABSLgAAAFJtAAAAUhUAAAB0BQAAAGN0eXBlKAAAAAAoAAAAAHNUAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9lbWFpbC9tZXNzYWdlLnB5dBAAAABnZXRfY29udGVudF90eXBlsAEAAHMQAAAAAA0JARIBDAIKARYCFQEEAWMBAAAAAgAAAAIAAABDAAAAcx0AAAB8AABqAACDAAB9AQB8AQBqAQBkAQCDAQBkAgAZUygDAAAAc4sAAABSZXR1cm4gdGhlIG1lc3NhZ2UncyBtYWluIGNvbnRlbnQgdHlwZS4KCiAgICAgICAgVGhpcyBpcyB0aGUgYG1haW50eXBlJyBwYXJ0IG9mIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkKICAgICAgICBnZXRfY29udGVudF90eXBlKCkuCiAgICAgICAgUoIAAABpAAAAACgCAAAAUoUAAAB0BQAAAHNwbGl0KAIAAABSLgAAAFKEAAAAKAAAAAAoAAAAAHNUAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9lbWFpbC9tZXNzYWdlLnB5dBQAAABnZXRfY29udGVudF9tYWludHlwZcgBAABzBAAAAAAGDAFjAQAAAAIAAAACAAAAQwAAAHMdAAAAfAAAagAAgwAAfQEAfAEAagEAZAEAgwEAZAIAGVMoAwAAAHOKAAAAUmV0dXJucyB0aGUgbWVzc2FnZSdzIHN1Yi1jb250ZW50IHR5cGUuCgogICAgICAgIFRoaXMgaXMgdGhlIGBzdWJ0eXBlJyBwYXJ0IG9mIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkKICAgICAgICBnZXRfY29udGVudF90eXBlKCkuCiAgICAgICAgUoIAAABpAQAAACgCAAAAUoUAAABShgAAACgCAAAAUi4AAABShAAAACgAAAAAKAAAAABzVAAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weXQTAAAAZ2V0X2NvbnRlbnRfc3VidHlwZdEBAABzBAAAAAAGDAFjAQAAAAEAAAABAAAAQwAAAHMHAAAAfAAAagAAUygBAAAAcwEBAABSZXR1cm4gdGhlIGBkZWZhdWx0JyBjb250ZW50IHR5cGUuCgogICAgICAgIE1vc3QgbWVzc2FnZXMgaGF2ZSBhIGRlZmF1bHQgY29udGVudCB0eXBlIG9mIHRleHQvcGxhaW4sIGV4Y2VwdCBmb3IKICAgICAgICBtZXNzYWdlcyB0aGF0IGFyZSBzdWJwYXJ0cyBvZiBtdWx0aXBhcnQvZGlnZXN0IGNvbnRhaW5lcnMuICBTdWNoCiAgICAgICAgc3VicGFydHMgaGF2ZSBhIGRlZmF1bHQgY29udGVudCB0eXBlIG9mIG1lc3NhZ2UvcmZjODIyLgogICAgICAgICgBAAAAUi0AAAAoAQAAAFIuAAAAKAAAAAAoAAAAAHNUAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9lbWFpbC9tZXNzYWdlLnB5UoMAAADaAQAAcwIAAAAAB2MCAAAAAgAAAAIAAABDAAAAcw0AAAB8AQB8AABfAABkAQBTKAIAAABz3QAAAFNldCB0aGUgYGRlZmF1bHQnIGNvbnRlbnQgdHlwZS4KCiAgICAg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AHwHAHQFAHwBAHwCAHwEAIMDAGcCAIMBAH0HAG6YAGQEAH0HAHiPAHwAAGoIAGQDAHwDAGQFAHwEAIMAAkRddQBcAgB9CAB9CQBkBAB9CgB8CABqAgCDAAB8AQBqAgCDAABrAgByEAF0BQB8AQB8AgB8BACDAwB9CgBuEgB0BQB8CAB8CQB8BACDAwB9CgB8BwBzMQF8CgB9BwBx0QB0BgBqBwB8BwB8CgBnAgCDAQB9BwBx0QBXfAcAfAAAagMAfAMAgwEAawMAcnMBfAAAfAMAPXwHAHwAAHwDADxuAABkBgBTKAcAAABz4gIAAFNldCBhIHBhcmFtZXRlciBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KCiAgICAgICAgSWYgdGhlIHBhcmFtZXRlciBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaGVhZGVyLCBpdHMgdmFsdWUgd2lsbCBiZQogICAgICAgIHJlcGxhY2VkIHdpdGggdGhlIG5ldyB2YWx1ZS4KCiAgICAgICAgSWYgaGVhZGVyIGlzIENvbnRlbnQtVHlwZSBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBkZWZpbmVkIGZvciB0aGlzCiAgICAgICAgbWVzc2FnZSwgaXQgd2lsbCBiZSBzZXQgdG8gInRleHQvcGxhaW4iIGFuZCB0aGUgbmV3IHBhcmFtZXRlciBhbmQKICAgICAgICB2YWx1ZSB3aWxsIGJlIGFwcGVuZGVkIGFzIHBlciBSRkMgMjA0NS4KCiAgICAgICAgQW4gYWx0ZXJuYXRlIGhlYWRlciBjYW4gc3BlY2lmaWVkIGluIHRoZSBoZWFkZXIgYXJndW1lbnQsIGFuZCBhbGwKICAgICAgICBwYXJhbWV0ZXJzIHdpbGwgYmUgcXVvdGVkIGFzIG5lY2Vzc2FyeSB1bmxlc3MgcmVxdW90ZSBpcyBGYWxzZS4KCiAgICAgICAgSWYgY2hhcnNldCBpcyBzcGVjaWZpZWQsIHRoZSBwYXJhbWV0ZXIgd2lsbCBiZSBlbmNvZGVkIGFjY29yZGluZyB0byBSRkMKICAgICAgICAyMjMxLiAgT3B0aW9uYWwgbGFuZ3VhZ2Ugc3BlY2lmaWVzIHRoZSBSRkMgMjIzMSBsYW5ndWFnZSwgZGVmYXVsdGluZwogICAgICAg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a3VwRXJyb3J0DAAAAFVuaWNvZGVFcnJvclJeAAAAUhwAAAAoBQAAAFIuAAAAUnIAAABSbQAAAFJSAAAAdAgAAABwY2hhcnNldCgAAAAAKAAAAABzVAAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weXQTAAAAZ2V0X2NvbnRlbnRfY2hhcnNldOsCAABzIgAAAAAHCQESAQwBBAEPAhABAwQgARMBEQIDAQ8BEgETAQ0BBQJjAgAAAAMAAAAEAAAAQwAAAHMmAAAAZwAAfAAAagAAgwAARF0VAH0CAHwCAGoBAHwBAIMBAF4CAHENAFMoAQAAAHPVAgAAUmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHRoZSBjaGFyc2V0KHMpIHVzZWQgaW4gdGhpcyBtZXNzYWdlLgoKICAgICAgICBUaGUgcmV0dXJuZWQgbGlzdCBvZiBpdGVtcyBkZXNjcmliZXMgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJzJwogICAgICAgIGNoYXJzZXQgcGFyYW1ldGVyIGZvciB0aGlzIG1lc3NhZ2UgYW5kIGFsbCB0aGUgc3VicGFydHMgaW4gaXRzCiAgICAgICAgcGF5bG9hZC4KCiAgICAgICAgRWFjaCBpdGVtIHdpbGwgZWl0aGVyIGJlIGEgc3RyaW5nICh0aGUgdmFsdWUgb2YgdGhlIGNoYXJzZXQgcGFyYW1ldGVyCiAgICAgICAgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgb2YgdGhhdCBwYXJ0KSBvciB0aGUgdmFsdWUgb2YgdGhlCiAgICAgICAgJ2ZhaWxvYmonIHBhcmFtZXRlciAoZGVmYXVsdHMgdG8gTm9uZSksIGlmIHRoZSBwYXJ0IGRvZXMgbm90IGhhdmUgYQogICAgICAgIG1haW4gTUlNRSB0eXBlIG9mICJ0ZXh0Iiwgb3IgdGhlIGNoYXJzZXQgaXMgbm90IGRlZmluZWQuCgogICAgICAgIFRoZSBsaXN0IHdpbGwgY29udGFpbiBvbmUgc3RyaW5nIGZvciBlYWNoIHBhcnQgb2YgdGhlIG1lc3NhZ2UsIHBsdXMKICAgICAgICBvbmUgZm9yIHRoZSBjb250YWluZXIgbWVzc2FnZSAoaS5lLiBzZWxmKSwgc28gdGhhdCBhIG5vbi1tdWx0aXBhcnQKICAgICAgICBtZXNzYWdlIHdpbGwgc3RpbGwgcmV0dXJuIGEgbGlzdCBvZiBsZW5ndGggMS4KICAgICAgICAoAgAAAHQEAAAAd2Fsa1KqAAAAKAMAAABSLgAAAFJyAAAAdAQAAABwYXJ0KAAAAAAoAAAAAHNUAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy9lbWFpbC9tZXNzYWdlLnB5dAwAAABnZXRfY2hhcnNldHMKAwAAcwIAAAAAEGn/////KAEAAABSqwAAAE4oMAAAAHQIAAAAX19uYW1lX190CgAAAF9fbW9kdWxlX190BwAAAF9fZG9jX19SLwAAAFIzAAAAUqAAAABSMQAAAFI7AAAAUjwAAABSPQAAAFI/AAAAUgcAAABSUAAAAFJTAAAAUlEAAABSYQAAAFJiAAAAUmQAAABSZgAAAFJqAAAAUmsAAABSbgAAAFJvAAAAUnAAAABScQAAAFJHAAAAUnMAAABSWAAAAFKBAAAAUoUAAABShwAAAFKIAAAAUoMAAABSiQAAAFKPAAAAUjIAAABSkAAAAFKRAAAAUloAAABSVAAAAFKYAAAAUpsAAABSngAAAFKmAAAAUqoAAABSrQAAAHQPAAAAZW1haWwuaXRlcmF0b3JzUqsAAAAoAAAAACgAAAAAKAAAAABzVAAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weVIAAAAAXAAAAHNYAAAABg4GAQkLCQYMEAkHCQMJBgkMDzIMCgktCQgJBAkLCQgJDAkDCQUJCgkKCQoMEAwSCRkJEwkYCQkJCQkJCQkJFRIWBgEMIwYBDy8PFg8gDBAMDQktDB8MEygAAAAAKBYAAABSsAAAAHQHAAAAX19hbGxfX3QCAAAAcmVSTAAAAFJKAAAAdAgAAAB3YXJuaW5nc3QJAAAAY1N0cmluZ0lPUgEAAAB0DQAAAGVtYWlsLmNoYXJzZXRSVgAAAFICAAAAUgMAAABSeAAAAHQHAAAAY29tcGlsZVISAAAAUgwAAABSBwAAAFIyAAAAUhYAAABSIwAAAFIlAAAAUgAAAAAoAAAAACgAAAAAKAAAAABzVAAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weXQIAAAAPG1vZHVsZT4FAAAAcyAAAAAGAgkCDAEMAQwBDAEQAwwBEAEQAgYEDwQJCg8YCRIJDA==