VQ0NCgAAAADNuIxjjrgBAOMAAAAAAAAAAAAAAAAAAAAABwAAAEAAAABzSAMAAGQAZAFsAFoAZABkAWwBWgFkAGQBbAJaAmQAZAFsA1oDZABkAWwEWgRkAGQBbAVaBmQAZAJsB20IWggBAGQAZANsCW0KWgoBAGQAZARsCW0LWgsBAGQAZAVsDG0NWg0BAGQAZAZsDG0OWg4BAGQAZAdsD20PWhABAGQAZAhsD20RWhEBAGQAZAlsEm0TWhMBAGQKZAtsFG0VWhUBAGQKZAxsFm0XWhcBAGQKZA1sFm0YWhgBAGQKZA5sFm0ZWhkBAGQKZA9sFm0aWhoBAGQKZBBsFm0bWhsBAGQKZBFsFm0cWhwBAGQKZBJsHW0eWh4BAGQKZBNsHW0fWh8BAGQKZBRsIG0hWiEBAGQKZBVsIG0iWiIBAGQKZBZsI20kWiQBAGQKZBdsI20lWiUBAGQKZBhsI20mWiYBAGQKZBlsJ20oWigBAGQKZBpsJ20pWikBAGQKZBtsJ20qWioBAGQKZBxsK20sWiwBAGQKZB1sK20tWi0BAGQKZB5sK20uWi4BAGQKZB9sK20vWi8BAGQKZCBsK20wWjABAGQKZCFsK20xWjEBAGUGajKQAXLAZABkAWwzWjRkCmQibDVtNlo2AQBlBmo3ZCNlBmo4ZCRlBmo5ZgIZAGQljQJaOmUGoDdkJqEBWjtkJ2U8ZQZqPWUGaj5lPGQoZgIZABkAZCmcA2QqZCuEBFo/ZE5kLWU8ZChlQGQBZC6cBWQvZDCEBVpBZQZqQmU7GQBlQ2UGakRlBmo+ZTtkJGYCGQAZAGQxnANkMmQzhARaRWUKZE9kJ2UGakZkNBkAZQZqPWQBGQBkNZwDZDZkN4QFgwFaR2UGakhkNBkAZQZqSGQ0GQBlBmpEZDQZAGQ4nANkOWQ6hARaSUcAZDtkPIQAZDxlAGpKgwNaS0cAZD1kJ4QAZCeDAlpMRwBkPmQ/hABkP4MCWk1HAGRAZCiEAGQoZU2DA1pORwBkQWQthABkLWVOgwNaT0cAZEJkQ4QAZENlT4MDWlBHAGREZEWEAGRFZU+DA1pRZQZqOWUGaj1lBmo5GQBkRpwCZEdkSIQEWlJHAGRJZDSEAGQ0gwJaU0cAZEpkS4QAZEtlU4MDWlRHAGRMZE2EAGRNZVODA1pVZAFTAClQ6QAAAABOKQHaA2FiYykB2g5jb250ZXh0bWFuYWdlcikB2glFeGl0U3RhY2spAdoHcGFydGlhbCkB2g51cGRhdGVfd3JhcHBlcikB2gdnZXR0ZXh0KQHaCG5nZXR0ZXh0KQHaBnJlcGVhdOkBAAAAKQHaBXR5cGVzqQHaBUFib3J0KQHaDEJhZFBhcmFtZXRlcikB2g5DbGlja0V4Y2VwdGlvbqkB2gRFeGl0KQHaEE1pc3NpbmdQYXJhbWV0ZXKpAdoKVXNhZ2VFcnJvcikB2g1IZWxwRm9ybWF0dGVyKQHaDGpvaW5fb3B0aW9ucykB2gtwb3BfY29udGV4dCkB2gxwdXNoX2NvbnRleHSpAdoRX2ZsYWdfbmVlZHNfdmFsdWUpAdoMT3B0aW9uUGFyc2VyKQHaCXNwbGl0X29wdCkB2gdjb25maXJtKQHaBnByb21wdCkB2gVzdHlsZSkB2hRfZGV0ZWN0X3Byb2dyYW1fbmFtZSkB2gxfZXhwYW5kX2FyZ3MpAdoEZWNobykB2hdtYWtlX2RlZmF1bHRfc2hvcnRfaGVscCkB2ghtYWtlX3N0cikB2hJQYWNpZnlGbHVzaFdyYXBwZXKpAdoOQ29tcGxldGlvbkl0ZW3aAUYuKQHaBWJvdW5k2gFW2gdDb250ZXh02gdDb21tYW5kqQPaA2N0eNoKaW5jb21wbGV0ZdoGcmV0dXJuYwIAAAAAAAAAAAAAAAUAAAAFAAAAYwAAAHNQAAAAdACgAXQCfABqA6ECfQJ8AqAEfAChAUQAXTJ9A3wDoAV8AaEBchh8AqAGfAB8A6ECfQR8BGQBawlyGHwEagdzGHwDfARmAlYAAQBxGGQBUwApAnrTTGlzdCBhbGwgdGhlIHN1YmNvbW1hbmRzIG9mIGEgZ3JvdXAgdGhhdCBzdGFydCB3aXRoIHRoZQogICAgaW5jb21wbGV0ZSB2YWx1ZSBhbmQgYXJlbid0IGhpZGRlbi4KCiAgICA6cGFyYW0gY3R4OiBJbnZvY2F0aW9uIGNvbnRleHQgZm9yIHRoZSBncm91cC4KICAgIDpwYXJhbSBpbmNvbXBsZXRlOiBWYWx1ZSBiZWluZyBjb21wbGV0ZWQuIE1heSBiZSBlbXB0eS4KICAgIE4pCNoBdNoEY2FzdNoMTXVsdGlDb21tYW5k2gdjb21tYW5k2g1saXN0X2NvbW1hbmRz2gpzdGFydHN3aXRo2gtnZXRfY29tbWFuZNoGaGlkZGVuKQVyLgAAAHIvAAAA2gVtdWx0adoEbmFtZXI0AAAAqQByOwAAAPpeL2hvbWUvc2hhaGlkL0Rlc2t0b3AvdHVra2EvY2FyYXZlbF91c2VyX3Byb2plY3QvdmVudi9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvY2xpY2svY29yZS5wedoaX2NvbXBsZXRlX3Zpc2libGVfY29tbWFuZHMwAAAAcwwAAAAACQ4CDgEKAQwCDgFyPQAAAEZyMwAAACkF2gxiYXNlX2NvbW1hbmTaCGNtZF9uYW1l2gNjbWTaCHJlZ2lzdGVycjAAAABjBAAAAAAAAAAAAAAABQAAAA8AAABDAAAAc2gAAAB8AGoAchB0AXwCdAKDAnMUZABTAHwDch5kAX0EbgRkAn0EdAN8BJsAZAN8AGoEmwJkBHwBmwJkBXwBmwJkBnQFfAKDAWoGmwBkB3QFfACDAWoGmwBkCHwAagSbAmQJnQ6DAYIBZABTACkKTnpkSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFkZCBtdWx0aSBjb21tYW5kcyBhcyBjaGlsZHJlbiB0byBhbm90aGVyIG11bHRpIGNvbW1hbmQgdGhhdCBpcyBpbiBjaGFpbiBtb2RlLnpkRm91bmQgYSBtdWx0aSBjb21tYW5kIGFzIHN1YmNvbW1hbmQgdG8gYSBtdWx0aSBjb21tYW5kIHRoYXQgaXMgaW4gY2hhaW4gbW9kZS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLnoKLiBDb21tYW5kIHoVIGlzIHNldCB0byBjaGFpbiBhbmQgekEgd2FzIGFkZGVkIGFzIGEgc3ViY29tbWFuZCBidXQgaXQgaW4gaXRzZWxmIGlzIGEgbXVsdGkgY29tbWFuZC4gKHoGIGlzIGEgehIgd2l0aGluIGEgY2hhaW5lZCB6ByBuYW1lZCB6AikuKQfaBWNoYWlu2gppc2luc3RhbmNlcjMAAADaDFJ1bnRpbWVFcnJvcnI6AAAA2gR0eXBl2ghfX25hbWVfXykFcj4AAAByPwAAAHJAAAAAckEAAADaBGhpbnRyOwAAAHI7AAAAcjwAAADaE19jaGVja19tdWx0aWNvbW1hbmRDAAAAcxQAAAAAAxABBAEEAgL/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BFoxZARTAClVcisAAABh8BMAAFRoZSBjb250ZXh0IGlzIGEgc3BlY2lhbCBpbnRlcm5hbCBvYmplY3QgdGhhdCBob2xkcyBzdGF0ZSByZWxldmFudAogICAgZm9yIHRoZSBzY3JpcHQgZXhlY3V0aW9uIGF0IGV2ZXJ5IHNpbmdsZSBsZXZlbC4gIEl0J3Mgbm9ybWFsbHkgaW52aXNpYmxlCiAgICB0byBjb21tYW5kcyB1bmxlc3MgdGhleSBvcHQtaW4gdG8gZ2V0dGluZyBhY2Nlc3MgdG8gaXQuCgogICAgVGhlIGNvbnRleHQgaXMgdXNlZnVsIGFzIGl0IGNhbiBwYXNzIGludGVybmFsIG9iamVjdHMgYXJvdW5kIGFuZCBjYW4KICAgIGNvbnRyb2wgc3BlY2lhbCBleGVjdXRpb24gZmVhdHVyZXMgc3VjaCBhcyByZWFkaW5nIGRhdGEgZnJvbQogICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLgoKICAgIEEgY29udGV4dCBjYW4gYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGNhbGwKICAgIDptZXRoOmBjbG9zZWAgb24gdGVhcmRvd24uCgogICAgOnBhcmFtIGNvbW1hbmQ6IHRoZSBjb21tYW5kIGNsYXNzIGZvciB0aGlzIGNvbnRleHQuCiAgICA6cGFyYW0gcGFyZW50OiB0aGUgcGFyZW50IGNvbnRleHQuCiAgICA6cGFyYW0gaW5mb19uYW1lOiB0aGUgaW5mbyBuYW1lIGZvciB0aGlzIGludm9jYXRpb24uICBHZW5lcmFsbHkgdGhpcwogICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIG1vc3QgZGVzY3JpcHRpdmUgbmFtZSBmb3IgdGhlIHNjcmlwdCBvcgogICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC4gIEZvciB0aGUgdG9wbGV2ZWwgc2NyaXB0IGl0IGlzIHVzdWFsbHkKICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQsIGZvciBjb21tYW5kcyBiZWxvdyBpdCBpdCdzCiAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0LgogICAgOnBhcmFtIG9iajogYW4gYXJiaXRyYXJ5IG9iamVjdCBvZiB1c2VyIGRhdGEuCiAgICA6cGFyYW0gYXV0b19lbnZ2YXJfcHJlZml4OiB0aGUgcHJlZml4IHRvIHVzZSBmb3IgYXV0b21hdGljIGVudmlyb25tZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuICBJZiB0aGlzIGlzIGBOb25lYCB0aGVuIHJlYWRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGlzIGRpc2FibGVkLiAgVGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYWZmZWN0IG1hbnVhbGx5IHNldCBlbnZpcm9ubWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHdoaWNoIGFyZSBhbHdheXMgcmVhZC4KICAgIDpwYXJhbSBkZWZhdWx0X21hcDogYSBkaWN0aW9uYXJ5IChsaWtlIG9iamVjdCkgd2l0aCBkZWZhdWx0IHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFyYW1ldGVycy4KICAgIDpwYXJhbSB0ZXJtaW5hbF93aWR0aDogdGhlIHdpZHRoIG9mIHRoZSB0ZXJtaW5hbC4gIFRoZSBkZWZhdWx0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXQgZnJvbSBwYXJlbnQgY29udGV4dC4gIElmIG5vIGNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgdGVybWluYWwgd2lkdGggdGhlbiBhdXRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGlvbiB3aWxsIGJlIGFwcGxpZWQuCiAgICA6cGFyYW0gbWF4X2NvbnRlbnRfd2lkdGg6IHRoZSBtYXhpbXVtIHdpZHRoIGZvciBjb250ZW50IHJlbmRlcmVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICh0aGlzIGN1cnJlbnRseSBvbmx5IGFmZmVjdHMgaGVscAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlcykuICBUaGlzIGRlZmF1bHRzIHRvIDgwIGNoYXJhY3RlcnMgaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IG92ZXJyaWRkZW4uICBJbiBvdGhlciB3b3JkczogZXZlbiBpZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWwgaXMgbGFyZ2VyIHRoYW4gdGhhdCwgQ2xpY2sgd2lsbCBub3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IHRoaW5ncyB3aWRlciB0aGFuIDgwIGNoYXJhY3RlcnMgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC4gIEluIGFkZGl0aW9uIHRvIHRoYXQsIGZvcm1hdHRlcnMgbWlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIHNvbWUgc2FmZXR5IG1hcHBpbmcgb24gdGhlIHJpZ2h0LgogICAgOnBhcmFtIHJlc2lsaWVudF9wYXJzaW5nOiBpZiB0aGlzIGZsYWcgaXMgZW5hYmxlZCB0aGVuIENsaWNrIHdpbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Ugd2l0aG91dCBhbnkgaW50ZXJhY3Rpdml0eSBvciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLiAgRGVmYXVsdCB2YWx1ZXMgd2lsbCBhbHNvIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaW5ncyBzdWNoIGFzIGNvbXBsZXRpb24gc3VwcG9ydC4KICAgIDpwYXJhbSBhbGxvd19leHRyYV9hcmdzOiBpZiB0aGlzIGlzIHNldCB0byBgVHJ1ZWAgdGhlbiBleHRyYSBhcmd1bWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgZW5kIHdpbGwgbm90IHJhaXNlIGFuIGVycm9yIGFuZCB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VwdCBvbiB0aGUgY29udGV4dC4gIFRoZSBkZWZhdWx0IGlzIHRvIGluaGVyaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBjb21tYW5kLgogICAgOnBhcmFtIGFsbG93X2ludGVyc3BlcnNlZF9hcmdzOiBpZiB0aGlzIGlzIHNldCB0byBgRmFsc2VgIHRoZW4gb3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXJndW1lbnRzIGNhbm5vdCBiZSBtaXhlZC4gIFRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzIHRvIGluaGVyaXQgZnJvbSB0aGUgY29tbWFuZC4KICAgIDpwYXJhbSBpZ25vcmVfdW5rbm93bl9vcHRpb25zOiBpbnN0cnVjdHMgY2xpY2sgdG8gaWdub3JlIG9wdGlvbnMgaXQgZG9lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBrbm93IGFuZCBrZWVwcyB0aGVtIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcuCiAgICA6cGFyYW0gaGVscF9vcHRpb25fbmFtZXM6IG9wdGlvbmFsbHkgYSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBkZWZpbmUgaG93CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGhlbHAgcGFyYW1ldGVyIGlzIG5hbWVkLiAgVGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgYGBbJy0taGVscCddYGAuCiAgICA6cGFyYW0gdG9rZW5fbm9ybWFsaXplX2Z1bmM6IGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemUgdG9rZW5zIChvcHRpb25zLCBjaG9pY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGMuKS4gIFRoaXMgZm9yIGluc3RhbmNlIGNhbiBiZSB1c2VkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudCBjYXNlIGluc2Vuc2l0aXZlIGJlaGF2aW9yLgogICAgOnBhcmFtIGNvbG9yOiBjb250cm9scyBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgQU5TSSBjb2xvcnMgb3Igbm90LiAgVGhlCiAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgYXV0b2RldGVjdGlvbi4gIFRoaXMgaXMgb25seSBuZWVkZWQgaWYgQU5TSQogICAgICAgICAgICAgICAgICBjb2RlcyBhcmUgdXNlZCBpbiB0ZXh0cyB0aGF0IENsaWNrIHByaW50cyB3aGljaCBpcyBieQogICAgICAgICAgICAgICAgICBkZWZhdWx0IG5vdCB0aGUgY2FzZS4gIFRoaXMgZm9yIGluc3RhbmNlIHdvdWxkIGFmZmVjdAogICAgICAgICAgICAgICAgICBoZWxwIG91dHB1dC4KICAgIDpwYXJhbSBzaG93X2RlZmF1bHQ6IFNob3cgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGNvbW1hbmRzLiBJZiB0aGlzCiAgICAgICAgdmFsdWUgaXMgbm90IHNldCwgaXQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGZyb20gdGhlIHBhcmVudAogICAgICAgIGNvbnRleHQuIGBgQ29tbWFuZC5zaG93X2RlZmF1bHRgYCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGZvciB0aGUKICAgICAgICBzcGVjaWZpYyBjb21tYW5kLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4xCiAgICAgICAgVGhlIGBgc2hvd19kZWZhdWx0YGAgcGFyYW1ldGVyIGlzIG92ZXJyaWRkZW4gYnkKICAgICAgICBgYENvbW1hbmQuc2hvd19kZWZhdWx0YGAsIGluc3RlYWQgb2YgdGhlIG90aGVyIHdheSBhcm91bmQuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgICBUaGUgYGBzaG93X2RlZmF1bHRgYCBwYXJhbWV0ZXIgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGZyb20gdGhlCiAgICAgICAgcGFyZW50IGNvbnRleHQuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA3LjEKICAgICAgIEFkZGVkIHRoZSBgYHNob3dfZGVmYXVsdGBgIHBhcmFtZXRlci4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDQuMAogICAgICAgIEFkZGVkIHRoZSBgYGNvbG9yYGAsIGBgaWdub3JlX3Vua25vd25fb3B0aW9uc2BgLCBhbmQKICAgICAgICBgYG1heF9jb250ZW50X3dpZHRoYGAgcGFyYW1ldGVycy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMAogICAgICAgIEFkZGVkIHRoZSBgYGFsbG93X2V4dHJhX2FyZ3NgYCBhbmQgYGBhbGxvd19pbnRlcnNwZXJzZWRfYXJnc2BgCiAgICAgICAgcGFyYW1ldGVycy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMAogICAgICAgIEFkZGVkIHRoZSBgYHJlc2lsaWVudF9wYXJzaW5nYGAsIGBgaGVscF9vcHRpb25fbmFtZXNgYCwgYW5kCiAgICAgICAgYGB0b2tlbl9ub3JtYWxpemVfZnVuY2BgIHBhcmFtZXRlcnMuCiAgICByFQAAANoPZm9ybWF0dGVyX2NsYXNzTkZyLAAAACkRcjQAAADaBnBhcmVudNoJaW5mb19uYW1l2gNvYmraEmF1dG9fZW52dmFyX3ByZWZpeNoLZGVmYXVsdF9tYXDaDnRlcm1pbmFsX3dpZHRo2hFtYXhfY29udGVudF93aWR0aNoRcmVzaWxpZW50X3BhcnNpbmfaEGFsbG93X2V4dHJhX2FyZ3PaF2FsbG93X2ludGVyc3BlcnNlZF9hcmdz2hZpZ25vcmVfdW5rbm93bl9vcHRpb25z2hFoZWxwX29wdGlvbl9uYW1lc9oUdG9rZW5fbm9ybWFsaXplX2Z1bmPaBWNvbG9y2gxzaG93X2RlZmF1bHRy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aXplIHRoZSBmb3JtYXR0ZXIgY2xhc3MgdXNlZCB3aXRob3V0IG92ZXJyaWRpbmcKICAgICAgICB0aGlzIG1ldGhvZCwgc2V0IHRoZSA6YXR0cjpgZm9ybWF0dGVyX2NsYXNzYCBhdHRyaWJ1dGUuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgICAgIEFkZGVkIHRoZSA6YXR0cjpgZm9ybWF0dGVyX2NsYXNzYCBhdHRyaWJ1dGUuCiAgICAgICAgKQLaBXdpZHRo2gltYXhfd2lkdGgpA3JwAAAAcnYAAABydwAAAHKVAAAAcjsAAAByOwAAAHI8AAAA2g5tYWtlX2Zvcm1hdHRlchICAABzCAAAAAAKBAEEAAT/ehZDb250ZXh0Lm1ha2VfZm9ybWF0dGVyKQLaD2NvbnRleHRfbWFuYWdlcnIwAAAAYwIAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHMMAAAAfABqAKABfAGhAVMAKQFh2QMAAFJlZ2lzdGVyIGEgcmVzb3VyY2UgYXMgaWYgaXQgd2VyZSB1c2VkIGluIGEgYGB3aXRoYGAKICAgICAgICBzdGF0ZW1lbnQuIFRoZSByZXNvdXJjZSB3aWxsIGJlIGNsZWFuZWQgdXAgd2hlbiB0aGUgY29udGV4dCBpcwogICAgICAgIHBvcHBlZC4KCiAgICAgICAgVXNlcyA6bWV0aDpgY29udGV4dGxpYi5FeGl0U3RhY2suZW50ZXJfY29udGV4dGAuIEl0IGNhbGxzIHRoZQogICAgICAgIHJlc291cmNlJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiBXaGVuCiAgICAgICAgdGhlIGNvbnRleHQgaXMgcG9wcGVkLCBpdCBjbG9zZXMgdGhlIHN0YWNrLCB3aGljaCBjYWxscyB0aGUKICAgICAgICByZXNvdXJjZSdzIGBgX19leGl0X18oKWBgIG1ldGhvZC4KCiAgICAgICAgVG8gcmVnaXN0ZXIgYSBjbGVhbnVwIGZ1bmN0aW9uIGZvciBzb21ldGhpbmcgdGhhdCBpc24ndCBhCiAgICAgICAgY29udGV4dCBtYW5hZ2VyLCB1c2UgOm1ldGg6YGNhbGxfb25fY2xvc2VgLiBPciB1c2Ugc29tZXRoaW5nCiAgICAgICAgZnJvbSA6bW9kOmBjb250ZXh0bGliYCB0byB0dXJuIGl0IGludG8gYSBjb250ZXh0IG1hbmFnZXIgZmlyc3QuCgogICAgICAgIC4uIGNvZGUtYmxvY2s6OiBweXRob24KCiAgICAgICAgICAgIEBjbGljay5ncm91cCgpCiAgICAgICAgICAgIEBjbGljay5vcHRpb24oIi0tbmFtZSIpCiAgICAgICAgICAgIEBjbGljay5wYXNzX2NvbnRleHQKICAgICAgICAgICAgZGVmIGNsaShjdHgpOgogICAgICAgICAgICAgICAgY3R4Lm9iaiA9IGN0eC53aXRoX3Jlc291cmNlKGNvbm5lY3RfZGIobmFtZSkpCgogICAgICAgIDpwYXJhbSBjb250ZXh0X21hbmFnZXI6IFRoZSBjb250ZXh0IG1hbmFnZXIgdG8gZW50ZXIuCiAgICAgICAgOnJldHVybjogV2hhdGV2ZXIgYGBjb250ZXh0X21hbmFnZXIuX19lbnRlcl9fKClgYCByZXR1cm5zLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiA4LjAKICAgICAgICApAnKQAAAA2g1lbnRlcl9jb250ZXh0KQJykQAAAHKkAAAAcjsAAAByOwAAAHI8AAAA2g13aXRoX3Jlc291cmNlIAIAAHMCAAAAABt6FUNvbnRleHQud2l0aF9yZXNvdXJjZS6pAtoBZnIwAAAAYwIAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHMMAAAAfABqAKABfAGhAVMAKQFhhQEAAFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbnRleHQgdGVhcnMgZG93bi4KCiAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBjbG9zZSByZXNvdXJjZXMgb3BlbmVkIGR1cmluZyB0aGUgc2NyaXB0CiAgICAgICAgZXhlY3V0aW9uLiBSZXNvdXJjZXMgdGhhdCBzdXBwb3J0IFB5dGhvbidzIGNvbnRleHQgbWFuYWdlcgogICAgICAgIHByb3RvY29sIHdoaWNoIHdvdWxkIGJlIHVzZWQgaW4gYSBgYHdpdGhgYCBzdGF0ZW1lbnQg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ZCBsaW5lIGFwcGxpY2F0aW9uLiAgVGhpcyB3aWxsIGFsd2F5cyB0ZXJtaW5hdGUKICAgICAgICB0aGUgYXBwbGljYXRpb24gYWZ0ZXIgYSBjYWxsLiAgSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBgYFN5c3RlbUV4aXRgYAogICAgICAgIG5lZWRzIHRvIGJlIGNhdWdodC4KCiAgICAgICAgVGhpcyBtZXRob2QgaXMgYWxzbyBhdmFpbGFibGUgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgaW5zdGFuY2Ugb2YKICAgICAgICBhIDpjbGFzczpgQ29tbWFuZGAuCgogICAgICAgIDpwYXJhbSBhcmdzOiB0aGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHBhcnNpbmcuICBJZiBub3QKICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQsIGBgc3lzLmFyZ3ZbMTpdYGAgaXMgdXNlZC4KICAgICAgICA6cGFyYW0gcHJvZ19uYW1lOiB0aGUgcHJvZ3JhbSBuYW1lIHRoYXQgc2hvdWxkIGJlIHVzZWQuICBCeSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByb2dyYW0gbmFtZSBpcyBjb25zdHJ1Y3RlZCBieSB0YWtpbmcgdGhlIGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIGZyb20gYGBzeXMuYXJndlswXWBgLgogICAgICAgIDpwYXJhbSBjb21wbGV0ZV92YXI6IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IGNvbnRyb2xzIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ggY29tcGxldGlvbiBzdXBwb3J0LiAgVGhlIGRlZmF1bHQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYCJfPHByb2dfbmFtZT5fQ09NUExFVEUiYGAgd2l0aCBwcm9nX25hbWUgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcmNhc2UuCiAgICAgICAgOnBhcmFtIHN0YW5kYWxvbmVfbW9kZTogdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gaW52b2tlIHRoZSBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzdGFuZGFsb25lIG1vZGUuICBDbGljayB3aWxsIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgZXhjZXB0aW9ucyBhbmQgY29udmVydCB0aGVtIGludG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciBtZXNzYWdlcyBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0IHNodXQgZG93biB0aGUgaW50ZXJwcmV0ZXIuICBJZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgc2V0IHRvIGBGYWxzZWAgdGhleSB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyIGFuZCB0aGUgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGUgcmV0dXJuIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgOm1ldGg6YGludm9rZWAuCiAgICAgICAgOnBhcmFtIHdpbmRvd3NfZXhwYW5kX2FyZ3M6IEV4cGFuZCBnbG9iIHBhdHRlcm5zLCB1c2VyIGRpciwgYW5kCiAgICAgICAgICAgIGVudiB2YXJzIGluIGNvbW1hbmQgbGluZSBhcmdzIG9uIFdpbmRvd3MuCiAgICAgICAgOnBhcmFtIGV4dHJhOiBleHRyYSBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBjb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci4gIFNlZSA6Y2xhc3M6YENvbnRleHRgIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMC4x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ICAgQ2xpY2suICBBIGJhc2ljIGNvbW1hbmQgaGFuZGxlcyBjb21tYW5kIGxpbmUgcGFyc2luZyBhbmQgbWlnaHQgZGlzcGF0Y2gKICAgIG1vcmUgcGFyc2luZyB0byBjb21tYW5kcyBuZXN0ZWQgYmVsb3cgaXQuCgogICAgOnBhcmFtIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRvIHVzZSB1bmxlc3MgYSBncm91cCBvdmVycmlkZXMgaXQuCiAgICA6cGFyYW0gY29udGV4dF9zZXR0aW5nczogYW4gb3B0aW9uYWwgZGljdGlvbmFyeSB3aXRoIGRlZmF1bHRzIHRoYXQgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBjb250ZXh0IG9iamVjdC4KICAgIDpwYXJhbSBjYWxsYmFjazogdGhlIGNhbGxiYWNrIHRvIGludm9rZS4gIFRoaXMgaXMgb3B0aW9uYWwuCiAgICA6cGFyYW0gcGFyYW1zOiB0aGUgcGFyYW1ldGVycyB0byByZWdpc3RlciB3aXRoIHRoaXMgY29tbWFuZC4gIFRoaXMgY2FuCiAgICAgICAgICAgICAgICAgICBiZSBlaXRoZXIgOmNsYXNzOmBPcHRpb25gIG9yIDpjbGFzczpgQXJndW1lbnRgIG9iamVjdHMuCiAgICA6cGFyYW0gaGVscDogdGhlIGhlbHAgc3RyaW5nIHRvIHVzZSBmb3IgdGhpcyBjb21tYW5kLgogICAgOnBhcmFtIGVwaWxvZzogbGlrZSB0aGUgaGVscCBzdHJpbmcgYnV0IGl0J3MgcHJpbnRlZCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICAgICAgICAgICAgICAgaGVscCBwYWdlIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4KICAgIDpwYXJhbSBzaG9ydF9oZWxwOiB0aGUgc2hvcnQgaGVscCB0byB1c2UgZm9yIHRoaXMgY29tbWFuZC4gIFRoaXMgaXMKICAgICAgICAgICAgICAgICAgICAgICBzaG93biBvbiB0aGUgY29tbWFuZCBsaXN0aW5nIG9mIHRoZSBwYXJlbnQgY29tbWFuZC4KICAgIDpwYXJhbSBhZGRfaGVscF9vcHRpb246IGJ5IGRlZmF1bHQgZWFjaCBjb21tYW5kIHJlZ2lzdGVycyBhIGBgLS1oZWxwYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4gIFRoaXMgY2FuIGJlIGRpc2FibGVkIGJ5IHRoaXMgcGFyYW1ldGVyLgogICAgOnBhcmFtIG5vX2FyZ3NfaXNfaGVscDogdGhpcyBjb250cm9scyB3aGF0IGhhcHBlbnMgaWYgbm8gYXJndW1lbnRzIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQuICBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZW5hYmxlZCB0aGlzIHdpbGwgYWRkIGBgLS1oZWxwYGAgYXMgYXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkCiAgICA6cGFyYW0gaGlkZGVuOiBoaWRlIHRoaXMgY29tbWFuZCBmcm9tIGhlbHAgb3V0cHV0cy4KCiAgICA6cGFyYW0gZGVwcmVjYXRlZDogaXNzdWVzIGEgbWVzc2FnZSBpbmRpY2F0aW5nIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCBpcyBkZXByZWNhdGVkLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4xCiAgICAgICAgYGBoZWxwYGAsIGBgZXBpbG9nYGAsIGFuZCBgYHNob3J0X2hlbHBgYCBhcmUgc3RvcmVkIHVucHJvY2Vzc2VkLAogICAgICAgIGFsbCBmb3JtYXR0aW5nIGlzIGRvbmUgd2hlbiBvdXRwdXR0aW5nIGhlbHAgdGV4dCwgbm90IGF0IGluaXQsCiAgICAgICAgYW5kIGlzIGRvbmUgZXZlbiBpZiBub3QgdXNpbmcgdGhlIGBgQGNvbW1hbmRgYCBkZWNvcmF0b3IuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgICBBZGRlZCBhIGBgcmVwcmBgIHNob3dpbmcgdGhlIGNvbW1hbmQgbmFtZS4K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GQBkCZwCZCBkIYQEWh1lDWUIZQZqEGQiGQBkI5wDhwBmAWQkZCWEDFoehwAEAFofUwApKHIzAAAAYVkFAABBIG11bHRpIGNvbW1hbmQgaXMgdGhlIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGEgY29tbWFuZCB0aGF0CiAgICBkaXNwYXRjaGVzIHRvIHN1YmNvbW1hbmRzLiAgVGhlIG1vc3QgY29tbW9uIHZlcnNpb24gaXMgdGhlCiAgICA6Y2xhc3M6YEdyb3VwYC4KCiAgICA6cGFyYW0gaW52b2tlX3dpdGhvdXRfY29tbWFuZDogdGhpcyBjb250cm9scyBob3cgdGhlIG11bHRpIGNvbW1hbmQgaXRzZWxmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgaW52b2tlZC4gIEJ5IGRlZmF1bHQgaXQncyBvbmx5IGludm9rZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhIHN1YmNvbW1hbmQgaXMgcHJvdmlkZWQuCiAgICA6cGFyYW0gbm9fYXJnc19pc19oZWxwOiB0aGlzIGNvbnRyb2xzIHdoYXQgaGFwcGVucyBpZiBubyBhcmd1bWVudHMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZC4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYGludm9rZV93aXRob3V0X2NvbW1hbmRgIGlzIGRpc2FibGVkIG9yIGRpc2FibGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCdzIGVuYWJsZWQuICBJZiBlbmFibGVkIHRoaXMgd2lsbCBhZGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgLS1oZWxwYGAgYXMgYXJndW1lbnQgaWYgbm8gYXJndW1lbnRzIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkLgogICAgOnBhcmFtIHN1YmNvbW1hbmRfbWV0YXZhcjogdGhlIHN0cmluZyB0aGF0IGlzIHVzZWQgaW4gdGhlIGRvY3Vt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F2UYZQhkCpwBZBJkE4QEgwFaGWUIZAqcAWQUZBWEBFoaZQVqG2Q9ZQ9kFmUFagZlBWoMGQBkF5wDZBhkGYQFgwFaHGUFahtkPmUPZQ1lBWoGZQVqCWUFagxlBWoOZwBlBWoMZgIZAGYCGQAZAGQXnANkG2QZhAWDAVocZD9lD2UNZQVqBmUFagllBWoMZQVqDmcAZQVqDGYCGQBmAhkAGQBkF5wDZBxkGYQFWhxlHWUPZANkHZwDZB5kH4QEWh5lD2UFah9lCGUFagxmAhkAZQVqFmUFagxlIGYCGQBkIJwDZCFkIoQEWiFlD2UFagxlBWoMZCOcA2QkZCWEBFoiZQVqDGUNZCacAmQnZCiEBFojZQ9lBWoMZQVqDGQjnANkKWQqhARaJGUPZQVqBmUIGQBkK5wCZCxkLYQEWiVlD2UFagZlBWoMGQBkK5wCZC5kL4QEWiZlD2UFah9lCGUFagxmAhkAZQVqEWUIGQBlBWoWZQVqDGUFahFlCBkAZgIZAGQwnARkMWQyhARaJ2UPZQVqBmUFahZlCGUIZgIZABkAZCucAmQzZDSEBFooZQ9lBWoRZQgZAGQrnAJkNWQ2hARaKWUPZQhkK5wCZDdkOIQEWiplD2UIZQVqEWQGGQBkOZwDZDpkO4QEWitkA1MAKUByUAAAAGGBDgAAQSBwYXJhbWV0ZXIgdG8gYSBjb21tYW5kIGNvbWVzIGluIHR3byB2ZXJzaW9uczogdGhleSBhcmUgZWl0aGVyCiAgICA6Y2xhc3M6YE9wdGlvbmBccyBvciA6Y2xhc3M6YEFyZ3VtZW50YFxzLiAgT3RoZXIgc3ViY2xhc3NlcyBhcmUgY3VycmVudGx5CiAgICBub3Qgc3VwcG9ydGVkIGJ5IGRlc2lnbiBhcyBzb21lIG9mIHRoZSBpbnRlcm5hbHMgZm9yIHBhcnNpbmcgYXJlCiAgICBpbnRlbnRpb25hbGx5IG5vdCBmaW5hbGl6ZWQuCgogICAgU29tZSBzZXR0aW5ncyBhcmUgc3VwcG9ydGVkIGJ5IGJvdGggb3B0aW9ucyBhbmQgYXJndW1lbnRzLgoKICAgIDpwYXJhbSBwYXJhbV9kZWNsczogdGhlIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgZm9yIHRoaXMgb3B0aW9uIG9yCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LiAgVGhpcyBpcyBhIGxpc3Qgb2YgZmxhZ3Mgb3IgYXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMuCiAgICA6cGFyYW0gdHlwZTogdGhlIHR5cGUgdGhhdCBzaG91bGQgYmUgdXNlZC4gIEVpdGhlciBhIDpjbGFzczpgUGFyYW1UeXBlYAogICAgICAgICAgICAgICAgIG9yIGEgUHl0aG9uIHR5cGUuICBUaGUgbGF0ZXIgaXMgY29udmVydGVkIGludG8gdGhlIGZvcm1lcgogICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgaWYgc3VwcG9ydGVkLgogICAgOnBhcmFtIHJlcXVpcmVkOiBjb250cm9scyBpZiB0aGlzIGlzIG9wdGlvbmFsIG9yIG5vdC4KICAgIDpwYXJhbSBkZWZhdWx0OiB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBvbWl0dGVkLiAgVGhpcyBjYW4gYWxzbyBiZSBhIGNhbGxhYmxlLAogICAgICAgICAgICAgICAgICAgIGluIHdoaWNoIGNhc2UgaXQncyBpbnZva2VkIHdoZW4gdGhlIGRlZmF1bHQgaXMgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBhbnkgYXJndW1lbnRzLgogICAgOnBhcmFtIGNhbGxiYWNrOiBBIGZ1bmN0aW9uIHRvIGZ1cnRoZXIgcHJvY2VzcyBvciB2YWxpZGF0ZSB0aGUgdmFsdWUKICAgICAgICBhZnRlciB0eXBlIGNvbnZlcnNpb24uIEl0IGlzIGNhbGxlZCBhcyBgYGYoY3R4LCBwYXJhbSwgdmFsdWUpYGAKICAgICAgICBhbmQgbXVzdCByZXR1cm4gdGhlIHZhbHVlLiBJdCBpcyBjYWxsZWQgZm9yIGFsbCBzb3VyY2VzLAogICAgICAgIGluY2x1ZGluZyBwcm9tcHRzLgogICAgOnBhcmFtIG5hcmdzOiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtYXRjaC4gIElmIG5vdCBgYDFgYCB0aGUgcmV0dXJuCiAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIGEgdHVwbGUgaW5zdGVhZCBvZiBzaW5nbGUgdmFsdWUuICBUaGUgZGVmYXVsdCBmb3IKICAgICAgICAgICAgICAgICAgbmFyZ3MgaXMgYGAxYGAgKGV4Y2VwdCBpZiB0aGUgdHlwZSBpcyBhIHR1cGxlLCB0aGVuIGl0J3MKICAgICAgICAgICAgICAgICAgdGhlIGFyaXR5IG9mIHRoZSB0dXBsZSkuIElmIGBgbmFyZ3M9LTFgYCwgYWxsIHJlbWFpbmluZwogICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGFyZSBjb2xsZWN0ZWQuCiAgICA6cGFyYW0gbWV0YXZhcjogaG93IHRoZSB2YWx1ZSBpcyByZXByZXNlbnRlZCBpbiB0aGUgaGVscCBwYWdlLgogICAgOnBhcmFtIGV4cG9zZV92YWx1ZTogaWYgdGhpcyBpcyBgVHJ1ZWAgdGhlbiB0aGUgdmFsdWUgaXMgcGFzc2VkIG9ud2FyZHMKICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjb21tYW5kIGNhbGxiYWNrIGFuZCBzdG9yZWQgb24gdGhlIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgaXQncyBza2lwcGVkLgogICAgOnBhcmFtIGlzX2VhZ2VyOiBlYWdlciB2YWx1ZXMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgbm9uIGVhZ2VyIG9uZXMuICBUaGlzCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgc2V0IGZvciBhcmd1bWVudHMgb3IgaXQgd2lsbCBpbnZlcnNlIHRoZQogICAgICAgICAgICAgICAgICAgICBvcmRlciBvZiBwcm9jZXNzaW5nLgogICAgOnBhcmFtIGVudnZhcjogYSBzdHJpbmcgb3IgbGlzdCBvZiBzdHJpbmdzIHRoYXQgYXJlIGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgY2hlY2tlZC4KICAgIDpwYXJhbSBzaGVsbF9jb21wbGV0ZTogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgY3VzdG9tIHNoZWxsCiAgICAgICAgY29tcGxldGlvbnMuIFVzZWQgaW5zdGVhZCBvZiB0aGUgcGFyYW0ncyB0eXBlIGNvbXBsZXRpb24gaWYKICAgICAgICBnaXZlbi4gVGFrZXMgYGBjdHgsIHBhcmFtLCBpbmNvbXBsZXRlYGAgYW5kIG11c3QgcmV0dXJuIGEgbGlzdAogICAgICAgIG9mIDpjbGFzczpgfmNsaWNrLnNoZWxsX2NvbXBsZXRpb24uQ29tcGxldGlvbkl0ZW1gIG9yIGEgbGlzdCBvZgogICAgICAgIHN0cmluZ3MuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgICBgYHByb2Nlc3NfdmFsdWVgYCB2YWxpZGF0ZXMgcmVxdWlyZWQgcGFyYW1ldGVycyBhbmQgYm91bmRlZAogICAgICAgIGBgbmFyZ3NgYCwgYW5kIGludm9rZXMgdGhlIHBhcmFtZXRlciBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nCiAgICAgICAgdGhlIHZhbHVlLiBUaGlzIGFsbG93cyB0aGUgY2FsbGJhY2sgdG8gdmFsaWRhdGUgcHJvbXB0cy4KICAgICAgICBgYGZ1bGxfcHJvY2Vzc192YWx1ZWBgIGlzIHJlbW92ZWQuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgICBgYGF1dG9jb21wbGV0aW9uYGAgaXMgcmVuYW1lZCB0byBgYHNoZWxsX2NvbXBsZXRlYGAgYW5kIGhhcyBuZXcKICAgICAgICBzZW1hbnRpY3MgZGVzY3JpYmVkIGFib3ZlLiBUaGUgb2xkIG5hbWUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbAogICAgICAgIGJlIHJlbW92ZWQgaW4gOC4xLCB1bnRpbCB0aGVuIGl0IHdpbGwgYmUgd3JhcHBlZCB0byBtYXRjaCB0aGUKICAgICAgICBuZXcgcmVxdWlyZW1lbnRzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgRm9yIGBgbXVsdGlwbGU9VHJ1ZSwgbmFyZ3M+MWBgLCB0aGUgZGVmYXVsdCBtdXN0IGJlIGEgbGlzdCBvZgogICAgICAgIHR1cGxlcy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIFNldHRpbmcgYSBkZWZhdWx0IGlzIG5vIGxvbmdlciByZXF1aXJlZCBmb3IgYGBuYXJncz4xYGAsIGl0IHdpbGwKICAgICAgICBkZWZhdWx0IHRvIGBgTm9uZWBgLiBgYG11bHRpcGxlPVRydWVgYCBvciBgYG5hcmdzPS0xYGAgd2lsbAogICAgICAgIGRlZmF1bHQgdG8gYGAoKWBgLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogNy4xCiAgICAgICAgRW1wdHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRha2luZyB0aGUKICAgICAgICBlbXB0eSBzdHJpbmcgdmFsdWUuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIHNjcmlwdHMgdG8gY2xlYXIKICAgICAgICB2YXJpYWJsZXMgaWYgdGhleSBjYW4ndCB1bnNldCB0aGVtLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4wCiAgICAgICAgQ2hhbmdlZCBzaWduYXR1cmUgZm9yIHBhcmFtZXRlciBjYWxsYmFjayB0byBhbHNvIGJlIHBhc3NlZCB0aGUKICAgICAgICBwYXJhbWV0ZXIuIFRoZSBvbGQgY2FsbGJhY2sgZm9ybWF0IHdpbGwgc3RpbGwgd29yaywgYnV0IGl0IHdpbGwKICAgICAgICByYWlzZSBhIHdhcm5pbmcgdG8gZ2l2ZSB5b3UgYSBjaGFuY2UgdG8gbWlncmF0ZSB0aGUgY29kZSBlYXNpZXIuCiAgICBaCXBhcmFtZXRlck5GVHInAAAAKQ3aC3BhcmFtX2RlY2xzckUAAAByagEAANoHZGVmYXVsdHKpAAAA2gVuYXJnc3JiAQAA2gdtZXRhdmFycswAAAByWwAAANoGZW52dmFycgQBAAByMAAAAGMNAAAAAAAAAAAAAAAQAAAACAAAAEMAAABzoAEAAHwAoAB8AXAKZAF8CaECXAN8AF8BfABfAnwAXwN0BKAFfAJ8BKECfABfBnwGZABrCHJIfABqBmoHckR8AGoGagh9Bm4EZAJ9BnwDfABfCXwFfABfCnwGfABfC3wHfABfDHwJfABfDXwEfABfDnwKfABfD3wIfABfEHwLfABfEXwMfABfEnwAagZqB3K6fAZ8AGoGaghrA3K6dBNkA3wAagZqCJsAZAR8AGoGmwJkBXwGmwBkBp0HgwGCAXQUfASDAXPGfARuAmQAfQ18DWQAawmQAXKcfAeQAXIOehJ0FXQWfA2DAWQAgwJ9DVcAbiAEAHQXawqQAXIMAQABAAEAdBNkB4MBZACCAlkAbgJYAHwGZAJrA5ABcpx8DWQAawmQAXKcegx0FnwNgwEBAFcAbjAEAHQXawqQAXJeAQABAAEAfAeQAXJMZAh9Dm4EZAl9DnQTfA6DAWQAggJZAG4CWAB8BmQCawSQAXKcdBh8DYMBfAZrA5ABcpx8B5ABcoJkCm4CZAt9D3QTZAx8D5sAZA18BpsAZAadBYMBggFkAFMAKQ5OcjsAAAByCgAAAHoQJ25hcmdzJyBtdXN0IGJlIHoUIChvciBOb25lKSBmb3IgdHlwZSB6DSwgYnV0IGl0IHdhcyDaAS56MSdkZWZhdWx0JyBtdXN0IGJlIGEgbGlzdCB3aGVuICdtdWx0aXBsZScgaXMgdHJ1ZS56SydkZWZhdWx0JyBtdXN0IGJlIGEgbGlzdCBvZiBsaXN0cyB3aGVuICdtdWx0aXBsZScgaXMgdHJ1ZSBhbmQgJ25hcmdzJyAhPSAxLnorJ2RlZmF1bHQnIG11c3QgYmUgYSBsaXN0IHdoZW4gJ25hcmdzJyAhPSAxLnoLaXRlbSBsZW5ndGjaBmxlbmd0aHoKJ2RlZmF1bHQnIHoSIG11c3QgbWF0Y2ggbmFyZ3M9KRnaDF9wYXJzZV9kZWNsc3I6AAAAcjkBAAByOgEAAHILAAAA2gxjb252ZXJ0X3R5cGVyRQAAANoMaXNfY29tcG9zaXRl2gVhcml0eXJqAQAAcqkAAABynQEAAHJiAQAAcswAAABynAEAAHJbAAAAcp4BAABynwEAANoWX2N1c3RvbV9zaGVsbF9jb21wbGV0ZXJZAAAAcr0AAADaBG5leHRymgEAAHLLAAAAclwBAAApEHKRAAAAcpsBAAByRQAAAHJqAQAAcpwBAAByqQAAAHKdAQAAcmIBAAByngEAAHLMAAAAclsAAABynwEAAHIEAQAA2g1jaGVja19kZWZhdWx0csAAAADaB3N1YmplY3RyOwAAAHI7AAAAcjwAAABykgAAAAQIAABzYAAAAAAUBAEGAAL/EAMOBAgBCAEKAgQCBgEGAQYBBgEGAQYBBgEGAQYBBgMUAQIBHP8EBhACCgEGAQICEgEQAQIBAv8CAgL+CAUUAQIBDAEQAQYCAv8EBQQCEAIYAQ4BAgEQ/3oSUGFyYW1ldGVyLl9faW5pdF9fcpMAAABjAQAAAAAAAAAAAAAAAQAAAAsAAABDAAAAczIAAAB8AGoAfABqAXwAagJ8AGoDfABqBKAFoQB8AGoGfABqB3wAagh8AGoJfABqCmQBnApTACkCeuZHYXRoZXIgaW5mb3JtYXRpb24gdGhhdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGEgdG9vbCBnZW5lcmF0aW5nCiAgICAgICAgdXNlci1mYWNpbmcgZG9jdW1lbnRhdGlvbi4KCiAgICAgICAgVXNlIDptZXRoOmBjbGljay5Db250ZXh0LnRvX2luZm9fZGljdGAgdG8gdHJhdmVyc2UgdGhlIGVudGlyZQogICAgICAgIENMSSBzdHJ1Y3R1cmUuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDguMAogICAgICAgICkKcjoAAADaD3BhcmFtX3R5cGVfbmFtZXI5AQAAcjoBAAByRQAAAHJqAQAAcp0BAAByYgEAAHKcAQAAcp8BAAApC3I6AAAAcqoBAAByOQEAAHI6AQAAckUAAABylAAAAHJqAQAAcp0BAAByYgEAAHKcAQAAcp8BAABylQAAAHI7AAAAcjsAAAByPAAAAHKUAAAAWQgAAHMWAAAAAAoEAQQBBAEEAQgBBAEEAQQBBAEE9noWUGFyYW1ldGVyLnRvX2luZm9fZGljdGMBAAAAAAAAAAAAAAABAAAABQAAAEMAAABzGAAAAGQBfABqAGoBmwBkAnwAagKbAGQDnQVTAHLrAAAAcu4AAABylQAAAHI7AAAAcjsAAAByPAAAAHLwAAAAbwgAAHMCAAAAAAF6ElBhcmFtZXRlci5fX3JlcHJfX6kD2gVkZWNsc3LMAAAAcjAAAABjAwAAAAAAAAAAAAAAAwAAAAEAAABDAAAAcwoAAAB0AIMAggFkAFMAcksAAABy8QAAACkDcpEAAAByrAEAAHLMAAAAcjsAAAByOwAAAHI8AAAAcqIBAAByCAAAcwIAAAAAA3oWUGFyYW1ldGVyLl9wYXJzZV9kZWNsc2MBAAAAAAAAAAAAAAABAAAAAQAAAEMAAABzBgAAAHwAagBTACkBeo1SZXR1cm5zIHRoZSBodW1hbiByZWFkYWJsZSBuYW1lIG9mIHRoaXMgcGFyYW1ldGVyLiAgVGhpcyBpcyB0aGUKICAgICAgICBzYW1lIGFzIHRoZSBuYW1lIGZvciBvcHRpb25zLCBidXQgdGhlIG1ldGF2YXIgZm9yIGFyZ3VtZW50cy4KICAgICAgICBy6QAAAHKVAAAAcjsAAAByOwAAAHI8AAAA2hNodW1hbl9yZWFkYWJsZV9uYW1ldwgAAHMCAAAAAAV6HVBhcmFtZXRlci5odW1hbl9yZWFkYWJsZV9uYW1lYwEAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHNGAAAAfABqAGQAawlyEHwAagBTAHwAagGgAnwAoQF9AXwBZABrCHIwfABqAWoDoAShAH0BfABqBWQBawNyQnwBZAI3AH0BfAFTACkDTnIKAAAA+gMuLi4pBnKeAQAAckUAAADaC2dldF9tZXRhdmFycjoAAAByjAAAAHKdAQAAKQJykQAAAHKeAQAAcjsAAAByOwAAAHI8AAAA2gxtYWtlX21ldGF2YXJ+CAAAcxAAAAAAAQoBBgIMAggBDAIKAQgCehZQYXJhbWV0ZXIubWFrZV9tZXRhdmFycrkAAACpA3IuAAAAcroAAAByMAAAAGMDAAAAAAAAAAAAAAADAAAAAQAAAEMAAABzBAAAAGQAUwBySwAAAHI7AAAAqQNykQAAAHIuAAAAcroAAAByOwAAAHI7AAAAcjwAAAByzgAAAIwIAABzAgAAAAAEehVQYXJhbWV0ZXIuZ2V0X2RlZmF1bHQuYwMAAAAAAAAAAAAAAAMAAAABAAAAQwAAAHMEAAAAZABTAHJLAAAAcjsAAABysgEAAHI7AAAAcjsAAAByPAAAAHLOAAAAkggAAHMCAAAAAARjAwAAAAAAAAAAAAAABAAAAAQAAABDAAAAczQAAAB8AWoAfABqAWQBZAKNAn0DfANkA2sIch58AGoCfQN8AnIwdAN8A4MBcjB8A4MAfQN8A1MAKQRhtQIAAEdldCB0aGUgZGVmYXVsdCBmb3IgdGhlIHBhcmFtZXRlci4gVHJpZXMKICAgICAgICA6bWV0aDpgQ29udGV4dC5sb29rdXBfZGVmYXVsdGAgZmlyc3QsIHRoZW4gdGhlIGxvY2FsIGRlZmF1bHQuCgogICAgICAgIDpwYXJhbSBjdHg6IEN1cnJlbnQgY29udGV4dC4KICAgICAgICA6cGFyYW0gY2FsbDogSWYgdGhlIGRlZmF1bHQgaXMgYSBjYWxsYWJsZSwgY2FsbCBpdC4gRGlzYWJsZSB0bwogICAgICAgICAgICByZXR1cm4gdGhlIGNhbGxhYmxlIGluc3RlYWQuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wLjIKICAgICAgICAgICAgVHlwZSBjYXN0aW5nIGlzIG5vIGxvbmdlciBwZXJmb3JtZWQgd2hlbiBnZXR0aW5nIGEgZGVmYXVsdC4KCiAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAuMQogICAgICAgICAgICBUeXBlIGNhc3RpbmcgY2FuIGZhaWwgaW4gcmVzaWxpZW50IHBhcnNpbmcgbW9kZS4gSW52YWxpZAogICAgICAgICAgICBkZWZhdWx0cyB3aWxsIG5vdCBwcmV2ZW50IHNob3dpbmcgaGVscCB0ZXh0LgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgICAgICBMb29rcyBhdCBgYGN0eC5kZWZhdWx0X21hcGBgIGZpcnN0LgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgICAgICBBZGRlZCB0aGUgYGBjYWxsYGAgcGFyYW1ldGVyLgogICAgICAgIEapAXK6AAAATikEcrwAAAByOgAAAHKcAQAAcr0AAAApBHKRAAAAci4AAAByugAAAHK+AAAAcjsAAAByOwAAAHI8AAAAcs4AAACYCAAAcwwAAAAAFxACCAEGAgwBBgKpA3JCAQAAci4AAAByMAAAAGMDAAAAAAAAAAAAAAADAAAAAQAAAEMAAABzCgAAAHQAgwCCAWQAUwBySwAAAHLxAAAAqQNykQAAAHJCAQAAci4AAAByOwAAAHI7AAAAcjwAAAByQQEAALkIAABzAgAAAAABehdQYXJhbWV0ZXIuYWRkX3RvX3BhcnNlcqkDci4AAAByOQEAAHIwAAAAYwMAAAAAAAAAAAAAAAUAAAADAAAAQwAAAHNkAAAAfAKgAHwAagGhAX0DdAJqA30EfANkAGsIcip8AKAEfAGhAX0DdAJqBX0EfANkAGsIckR8AaAGfABqAaEBfQN0AmoHfQR8A2QAawhyXHwAoAh8AaEBfQN0AmoJfQR8A3wEZgJTAHJLAAAAKQpyigAAAHI6AAAAcmUAAAByawAAANoRdmFsdWVfZnJvbV9lbnZ2YXJybAAAAHK8AAAAcm4AAAByzgAAAHJtAAAAqQVykQAAAHIuAAAAcjkBAAByvgAAAHLUAAAAcjsAAAByOwAAAHI8AAAA2g1jb25zdW1lX3ZhbHVlvAgAAHMYAAAAAAMMAQYCCAEKAQYCCAEMAQYCCAEKAQYCehdQYXJhbWV0ZXIuY29uc3VtZV92YWx1ZSkDci4AAAByvgAAAHIwAAAAYwMAAAAAAAAAAAAAAAMAAAAFAAAAAwAAAHPKAAAAfAJkAWsIciCIA2oAcxiIA2oBZAJrAnIcZANTAGQBUwB0AmoDdAJqBGQEnAKHAocDZgJkBWQGhAyJAIgDagFkB2sCc0yIA2oFagZyXnQHiANqBYgDiAJkCI0DiQFuRIgDagFkAmsCcoZ0AmoDdAJqCGQEnAKHAIcChwNmA2QJZAqEDIkBbhx0AmoDdAJqCGQEnAKHAIcChwNmA2QLZAqEDIkBiANqAHLCdAmHAWYBZAxkDYQIiAB8AoMBRACDAYMBUwCIAXwCgwFTACkOenVDb252ZXJ0IGFuZCB2YWxpZGF0ZSBhIHZhbHVlIGFnYWluc3QgdGhlIG9wdGlvbidzCiAgICAgICAgOmF0dHI6YHR5cGVgLCA6YXR0cjpgbXVsdGlwbGVgLCBhbmQgOmF0dHI6YG5hcmdzYC4KICAgICAgICBO6f////9yOwAAAHJ7AQAAYwEAAAAAAAAAAAAAAAEAAAAIAAAAEwAAAHM4AAAAegp0AHwAgwFXAFMABAB0AWsKcjIBAAEAAQB0AnQDZAGDAYgAiAFkAo0DZACCAlkAbgJYAGQAUwApA056GlZhbHVlIG11c3QgYmUgYW4gaXRlcmFibGUuqQJyLgAAAHJRAAAAKQRymgEAAHLLAAAAcg4AAABygQAAAHJ8AQAAcn0BAAByOwAAAHI8AAAA2gpjaGVja19pdGVy1wgAAHMUAAAAAAECAQoBDgQCAQYAAgAC/wQCAv56LVBhcmFtZXRlci50eXBlX2Nhc3RfdmFsdWUuPGxvY2Fscz4uY2hlY2tfaXRlcnIKAAAAKQJyUQAAAHIuAAAAYwEAAAAAAAAAAAAAAAEAAAAEAAAAEwAAAHMcAAAAdACHAYcCZgJkAWQChAiIAHwAgwFEAIMBgwFTACkDTmMBAAAAAAAAAAAAAAACAAAABgAAADMAAABzHAAAAHwAXRR9AYgBoAB8AYgBiAChA1YAAQBxAmQAUwBySwAAAKkBckUAAACpAnL+AAAA2gF4cn0BAAByOwAAAHI8AAAAcgABAADpCAAAcwQAAAAEAAIA+j1QYXJhbWV0ZXIudHlwZV9jYXN0X3ZhbHVlLjxsb2NhbHM+LmNvbnZlcnQuPGxvY2Fscz4uPGdlbmV4cHI+KQHaBXR1cGxlcnwBAACpA3K8AQAAci4AAABykQAAAHI7AAAAcjwAAADaB2NvbnZlcnToCAAAcwIAAAAAAXoqUGFyYW1ldGVyLnR5cGVfY2FzdF92YWx1ZS48bG9jYWxzPi5jb252ZXJ0YwEAAAAAAAAAAAAAAAEAAAAGAAAAEwAAAHNcAAAAdACIAHwAgwGDAX0AdAF8AIMBiAJqAmsDckR0A3QEZAFkAnQBfACDAYMDagWIAmoCdAF8AIMBZAONAogBiAJkBI0DggF0AIcBhwJmAmQFZAaECHwARACDAYMBUwApB056JVRha2VzIHtuYXJnc30gdmFsdWVzIGJ1dCAxIHdhcyBnaXZlbi56KlRha2VzIHtuYXJnc30gdmFsdWVzIGJ1dCB7bGVufSB3ZXJlIGdpdmVuLikCcp0BAAByXAEAAHK7AQAAYwEAAAAAAAAAAAAAAAIAAAAGAAAAMwAAAHMcAAAAfABdFH0BiAGgAHwBiAGIAKEDVgABAHECZABTAHJLAAAAcr0BAAByvgEAAHJ9AQAAcjsAAAByPAAAAHIAAQAA+wgAAHMEAAAABAACAHLAAQAAKQZywQEAAHJcAQAAcp0BAAByDgAAAHIIAAAAckwBAAByfAEAAHLCAQAAcjsAAAByPAAAAHLDAQAA7QgAAHMeAAAAAAEMAg4BAgECAQIBAgEG/QQEBAAG/AQFAgEC+QYKYwEAAAAAAAAAAAAAAAIAAAADAAAAMwAAAHMWAAAAfABdDn0BiAB8AYMBVgABAHECZABTAHJLAAAAcjsAAAByvgEAACkBcsMBAAByOwAAAHI8AAAAcgABAAD+CAAAcwQAAAAEAAIAeixQYXJhbWV0ZXIudHlwZV9jYXN0X3ZhbHVlLjxsb2NhbHM+LjxnZW5leHByPikKcmIBAABynQEAAHIxAAAActsAAABy4AAAAHJFAAAAcqQBAAByBQAAAHJhAAAAcsEBAACpA3KRAAAAci4AAAByvgAAAHI7AAAAKQRyvAEAAHLDAQAAci4AAABykQAAAHI8AAAAcs0AAADQCAAAcx4AAAAABAgBGAIaCxIBAgEEAAIAAv8IAwoCHgUcEAYBGgJ6GVBhcmFtZXRlci50eXBlX2Nhc3RfdmFsdWVyewEAAGMCAAAAAAAAAAAAAAACAAAAAgAAAEMAAABzLAAAAHwBZABrCHIMZAFTAHwAagBkAmsDcxx8AGoBcih8AWQDawJyKGQBUwBkBFMAKQVOVHIKAAAAcjsAAABGKQJynQEAAHJiAQAAKQJykQAAAHK+AAAAcjsAAAByOwAAAHI8AAAA2hB2YWx1ZV9pc19taXNzaW5nAgkAAHMKAAAAAAEIAQQCGAEEAnoaUGFyYW1ldGVyLnZhbHVlX2lzX21pc3NpbmdjAwAAAAAAAAAAAAAAAwAAAAUAAABDAAAAc0QAAAB8AKAAfAF8AqECfQJ8AGoBcih8AKACfAKhAXIodAN8AXwAZAGNAoIBfABqBGQAawlyQHwAoAR8AXwAfAKhA30CfAJTACkCTnK7AQAAKQVyzQAAAHJqAQAAcsUBAAByEgAAAHKpAAAAcsQBAAByOwAAAHI7AAAAcjwAAADaDXByb2Nlc3NfdmFsdWULCQAAcwwAAAAAAQwCEAEMAgoBDgJ6F1BhcmFtZXRlci5wcm9jZXNzX3ZhbHVlcugAAABjAgAAAAAAAAAAAAAABAAAAAQAAABDAAAAc1oAAAB8AGoAZABrCHIOZABTAHQBfABqAHQCgwJyMnQDagSgBXwAagChAX0CfAJyVnwCUwBuJHwAagBEAF0cfQN0A2oEoAV8A6EBfQJ8AnI4fAICAAEAUwBxOGQAUwBySwAAACkGcp8BAAByQwAAAHLaAAAAcg8BAAByHAEAAHKKAAAAqQRykQAAAHIuAAAAcp8AAABynwEAAHI7AAAAcjsAAAByPAAAANoUcmVzb2x2ZV9lbnZ2YXJfdmFsdWUWCQAAcxYAAAAAAQoBBAIMAQ4CBAEGAgoBDAIEAQoCeh5QYXJhbWV0ZXIucmVzb2x2ZV9lbnZ2YXJfdmFsdWVjAgAAAAAAAAAAAAAAAwAAAAMAAABDAAAAcywAAAB8AKAAfAGhAX0CfAJkAGsJcih8AGoBZAFrA3IofABqAqADfAKhAX0CfAJTAHKWAAAAKQRyyAEAAHKdAQAAckUAAADaEnNwbGl0X2VudnZhcl92YWx1ZXJtAQAAcjsAAAByOwAAAHI8AAAAcrcBAAAoCQAAcwgAAAAAAQoCEgEMAnobUGFyYW1ldGVyLnZhbHVlX2Zyb21fZW52dmFyKQRyLgAAAHI5AQAAcoQAAAByMAAAAGMEAAAAAAAAAAAAAAAGAAAACQAAAEMAAABzggAAAHQAfAF8AGQBjQKPVgEAfACgAXwBfAKhAlwCfQR9BXwBoAJ8AGoDfAWhAgEAehB8AKAEfAF8BKECfQRXAG4gBAB0BWsKclwBAAEAAQB8AWoGc1SCAGQAfQRZAG4CWABXADUAUQBSAFgAfABqB3J6fAR8AWoIfABqAzwAfAR8A2YCUwApAk4pAXJRAAAAKQlyUwAAAHK5AQAActUAAAByOgAAAHLGAQAA2glFeGNlcHRpb25yeAAAAHLMAAAAcoMAAAApBnKRAAAAci4AAAByOQEAAHKEAAAAcr4AAABy1AAAAHI7AAAAcjsAAAByPAAAAHJbAQAAMAkAAHMYAAAAAAMOARABDgICARABDgEGAQICFAIGAQwCeh1QYXJhbWV0ZXIuaGFuZGxlX3BhcnNlX3Jlc3VsdGMCAAAAAAAAAAAAAAACAAAAAQAAAEMAAABzBAAAAGQAUwBySwAAAHI7AAAAcuoAAAByOwAAAHI7AAAAcjwAAAByVwEAAEQJAABzAgAAAAABehlQYXJhbWV0ZXIuZ2V0X2hlbHBfcmVjb3JkYwIAAAAAAAAAAAAAAAIAAAABAAAAQwAAAHMEAAAAZwBTAHJLAAAAcjsAAABy6gAAAHI7AAAAcjsAAAByPAAAAHKwAAAARwkAAHMCAAAAAAF6GlBhcmFtZXRlci5nZXRfdXNhZ2VfcGllY2VzYwIAAAAAAAAAAAAAAAMAAAAEAAAAQwAAAHMiAAAAfABqAHAMfABqAWcBfQJkAaACZAJkA4QAfAJEAIMBoQFTACkEentHZXQgYSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSBwYXJhbSBmb3IgdXNlIGluIGVycm9yIG1lc3NhZ2VzIHRvCiAgICAgICAgaW5kaWNhdGUgd2hpY2ggcGFyYW0gY2F1c2VkIHRoZSBlcnJvci4KICAgICAgICD6AyAvIGMBAAAAAAAAAAAAAAACAAAABAAAAHMAAABzGgAAAHwAXRJ9AWQAfAGbAGQAnQNWAAEAcQJkAVMAKQL6ASdOcjsAAAByvgEAAHI7AAAAcjsAAAByPAAAAHIAAQAATwkAAHMEAAAABAACAHorUGFyYW1ldGVyLmdldF9lcnJvcl9oaW50Ljxsb2NhbHM+LjxnZW5leHByPikDcjkBAAByrQEAAHKxAAAAKQNykQAAAHIuAAAAWgloaW50X2xpc3RyOwAAAHI7AAAAcjwAAADaDmdldF9lcnJvcl9oaW50SgkAAHMEAAAAAAQOAXoYUGFyYW1ldGVyLmdldF9lcnJvcl9oaW50ci0AAABjAwAAAAAAAAAAAAAABAAAAAUAAAADAAAAc2oAAAB8AGoAZAFrCXJafACgAHwBfAB8AqEDfQN8A3JIdAF8A2QCGQB0AoMCckhkAmQDbANtBIkAAQCHAGYBZARkBYQIfANEAIMBfQN0BaAGdAVqB2QGGQB8A6ECUwB8AGoIoAl8AXwAfAKhA1MAKQdhkAEAAFJldHVybiBhIGxpc3Qgb2YgY29tcGxldGlvbnMgZm9yIHRoZSBpbmNvbXBsZXRlIHZhbHVlLiBJZiBhCiAgICAgICAgYGBzaGVsbF9jb21wbGV0ZWBgIGZ1bmN0aW9uIHdhcyBnaXZlbiBkdXJpbmcgaW5pdCwgaXQgaXMgdXNlZC4KICAgICAgICBPdGhlcndpc2UsIHRoZSA6YXR0cjpgdHlwZWAKICAgICAgICA6bWV0aDpgfmNsaWNrLnR5cGVzLlBhcmFtVHlwZS5zaGVsbF9jb21wbGV0ZWAgZnVuY3Rpb24gaXMgdXNlZC4KCiAgICAgICAgOnBhcmFtIGN0eDogSW52b2NhdGlvbiBjb250ZXh0IGZvciB0aGlzIGNvbW1hbmQuCiAgICAgICAgOnBhcmFtIGluY29tcGxldGU6IFZhbHVlIGJlaW5nIGNvbXBsZXRlZC4gTWF5IGJlIGVtcHR5LgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiA4LjAKICAgICAgICBOcgEAAAByJgAAAGMBAAAAAAAAAAAAAAACAAAABAAAABMAAABzFAAAAGcAfABdDH0BiAB8AYMBkQJxBFMAcjsAAAByOwAAAHKHAQAAciYAAAByOwAAAHI8AAAAcisBAABiCQAAcwQAAAAGAAIAeixQYXJhbWV0ZXIuc2hlbGxfY29tcGxldGUuPGxvY2Fscz4uPGxpc3Rjb21wPnInAAAAKQpypgEAAHJDAAAActoAAAByAQEAAHInAAAAcjEAAAByMgAAAHLeAAAAckUAAAByBAEAAHICAQAAcjsAAAByJgAAAHI8AAAAcgQBAABRCQAAcw4AAAAACwoBDgISAQwCEgISAnoYUGFyYW1ldGVyLnNoZWxsX2NvbXBsZXRlKQxOTkZOTk5GTlRGTk4pAVQpAS4pAVQpLHJGAAAAcmYAAAByZwAAAHJoAAAAcqoBAAByMQAAAHLZAAAAciEBAABy2gAAAHLkAAAAcgsAAADaCVBhcmFtVHlwZXLbAAAAcmIAAABy3wAAAHIrAAAAct0AAABy3gAAAHKSAAAActwAAABylAAAAHLwAAAAcmEAAAByogEAAHLhAAAAcq0BAABysAEAAHLjAAAAcs4AAAByGwAAAHJBAQAA2gdNYXBwaW5ncmUAAAByuQEAAHLNAAAAcsUBAAByxgEAAHLIAQAAcrcBAAByWwEAAHJXAQAAcrAAAAByzQEAAHIEAQAAcjsAAAByOwAAAHI7AAAAcjwAAAByUAAAALgHAABzpgAAAAgBBEkEBAABAAEAAQABAAEAAQABAAEAAQABAAYA7gICDgEWAQIBIAEcAQgBAgEIAQIBAgEYAQQBBAEIARj/Av8C/wIGAu0MVRoWDgQIAAIBIP4MBQIBEAYODgQCAP8CAQIAAgEK/g4FBAIA/wIBAgACASD+DgYA/wIBAgACASD+DCESBAIADgEO/gwUFjISCRYLFhIYCQIADgAIART+DBQgAxYDEAdjAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcyoCAABlAFoBZABaAmQBWgNkAloEZCZlBWoGZQVqB2UIGQAZAGUFagllCmUIZANmAxkAZQVqCWUKZQhmAhkAZQVqCWUKZQhmAhkAZQplCmUFagZlChkAZQVqBmUFagsZAGUKZQplCmUFagZlBWoJZQxqDWUFagtmAhkAGQBlBWoGZQgZAGUKZQplCmUFagtkA2QGnBKHAGYBZAdkCIQNWg5lBWoPZQhlBWoLZgIZAGQJnAGHAGYBZApkC4QMWhBlBWoHZQgZAGUKZQVqEWUFagZlCBkAZQVqEmUIGQBlBWoSZQgZAGYDGQBkDJwDZA1kDoQEWhNlFGUVZANkD5wDZBBkEYQEWhZlFWUFagZlBWoRZQhlCGYCGQAZAGQSnAJkE2QUhARaF2UFahhkJ2UVZBVlBWoGZQVqCxkAZBacA2QXZBiEBYMBWhllBWoYZChlFWUKZQVqBmUFagllBWoLZQVqGmcAZQVqC2YCGQBmAhkAGQBkFpwDZBpkGIQFgwFaGWQpZRVlCmUFagZlBWoJZQVqC2UFahpnAGUFagtmAhkAZgIZABkAZBacA4cAZgFkG2QYhA1aGWUVZQVqC2QSnAJkHGQdhARaG2UVZQVqBmUIGQBkEpwChwBmAWQeZB+EDFocZRVlBWoGZQVqCxkAZBKcAmQgZCGEBFodZRVlBWoeZQhkImYCGQBlBWoRZQVqC2UfZgIZAGQjnAOHAGYBZCRkJYQMWiCHAAQAWiFTACkqcjwBAABhiwsAAE9wdGlvbnMgYXJlIHVzdWFsbHkgb3B0aW9uYWwgdmFsdWVzIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kCiAgICBoYXZlIHNvbWUgZXh0cmEgZmVhdHVyZXMgdGhhdCBhcmd1bWVudHMgZG9uJ3QgaGF2ZS4KCiAgICBBbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgcGFzc2VkIG9ud2FyZHMgdG8gdGhlIHBhcmFtZXRlciBjb25zdHJ1Y3Rvci4KCiAgICA6cGFyYW0gc2hvd19kZWZhdWx0OiBTaG93IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIG9wdGlvbiBpbiBpdHMKICAgICAgICBoZWxwIHRleHQuIFZhbHVlcyBhcmUgbm90IHNob3duIGJ5IGRlZmF1bHQsIHVubGVzcwogICAgICAgIDphdHRyOmBDb250ZXh0LnNob3dfZGVmYXVsdGAgaXMgYGBUcnVlYGAuIElmIHRoaXMgdmFsdWUgaXMgYQogICAgICAgIHN0cmluZywgaXQgc2hvd3MgdGhhdCBzdHJpbmcgaW4gcGFyZW50aGVzZXMgaW5zdGVhZCBvZiB0aGUKICAgICAgICBhY3R1YWwgdmFsdWUuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgZHluYW1pYyBvcHRpb25zLgogICAgICAgIEZvciBzaW5nbGUgb3B0aW9uIGJvb2xlYW4gZmxhZ3MsIHRoZSBkZWZhdWx0IHJlbWFpbnMgaGlkZGVuIGlmCiAgICAgICAgaXRzIHZhbHVlIGlzIGBgRmFsc2VgYC4KICAgIDpwYXJhbSBzaG93X2VudnZhcjogQ29udHJvbHMgaWYgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgc2hvdWxkIGJlCiAgICAgICAgc2hvd24gb24gdGhlIGhlbHAgcGFnZS4gTm9ybWFsbHksIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90CiAgICAgICAgc2hvd24uCiAgICA6cGFyYW0gcHJvbXB0OiBJZiBzZXQgdG8gYGBUcnVlYGAgb3IgYSBub24gZW1wdHkgc3RyaW5nIHRoZW4gdGhlCiAgICAgICAgdXNlciB3aWxsIGJlIHByb21wdGVkIGZvciBpbnB1dC4gSWYgc2V0IHRvIGBgVHJ1ZWBgIHRoZSBwcm9tcHQKICAgICAgICB3aWxsIGJlIHRoZSBvcHRpb24gbmFtZSBjYXBpdGFsaXplZC4KICAgIDpwYXJhbSBjb25maXJtYXRpb25fcHJvbXB0OiBQcm9tcHQgYSBzZWNvbmQgdGltZSB0byBjb25maXJtIHRoZQogICAgICAgIHZhbHVlIGlmIGl0IHdhcyBwcm9tcHRlZCBmb3IuIENhbiBiZSBzZXQgdG8gYSBzdHJpbmcgaW5zdGVhZCBvZgogICAgICAgIGBgVHJ1ZWBgIHRvIGN1c3RvbWl6ZSB0aGUgbWVzc2FnZS4KICAgIDpwYXJhbSBwcm9tcHRfcmVxdWlyZWQ6IElmIHNldCB0byBgYEZhbHNlYGAsIHRoZSB1c2VyIHdpbGwgYmUKICAgICAgICBwcm9tcHRlZCBmb3IgaW5wdXQgb25seSB3aGVuIHRoZSBvcHRpb24gd2FzIHNwZWNpZmllZCBhcyBhIGZsYWcKICAgICAgICB3aXRob3V0IGEgdmFsdWUuCiAgICA6cGFyYW0gaGlkZV9pbnB1dDogSWYgdGhpcyBpcyBgYFRydWVgYCB0aGVuIHRoZSBpbnB1dCBvbiB0aGUgcHJvbXB0CiAgICAgICAgd2lsbCBiZSBoaWRkZW4gZnJvbSB0aGUgdXNlci4gVGhpcyBpcyB1c2VmdWwgZm9yIHBhc3N3b3JkIGlucHV0LgogICAgOnBhcmFtIGlzX2ZsYWc6IGZvcmNlcyB0aGlzIG9wdGlvbiB0byBhY3QgYXMgYSBmbGFnLiAgVGhlIGRlZmF1bHQgaXMKICAgICAgICAgICAgICAgICAgICBhdXRvIGRldGVjdGlvbi4KICAgIDpwYXJhbSBmbGFnX3ZhbHVlOiB3aGljaCB2YWx1ZSBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyBmbGFnIGlmIGl0J3MKICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkLiAgVGhpcyBpcyBzZXQgdG8gYSBib29sZWFuIGF1dG9tYXRpY2FsbHkgaWYKICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3B0aW9uIHN0cmluZyBjb250YWlucyBhIHNsYXNoIHRvIG1hcmsgdHdvIG9wdGlvbnMuCiAgICA6cGFyYW0gbXVsdGlwbGU6IGlmIHRoaXMgaXMgc2V0IHRvIGBUcnVlYCB0aGVuIHRoZSBhcmd1bWVudCBpcyBhY2NlcHRlZAogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSB0aW1lcyBhbmQgcmVjb3JkZWQuICBUaGlzIGlzIHNpbWlsYXIgdG8gYGBuYXJnc2BgCiAgICAgICAgICAgICAgICAgICAgIGluIGhvdyBpdCB3b3JrcyBidXQgc3VwcG9ydHMgYXJiaXRyYXJ5IG51bWJlciBvZgogICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuCiAgICA6cGFyYW0gY291bnQ6IHRoaXMgZmxhZyBtYWtlcyBhbiBvcHRpb24gaW5jcmVtZW50IGFuIGludGVnZXIuCiAgICA6cGFyYW0gYWxsb3dfZnJvbV9hdXRvZW52OiBpZiB0aGlzIGlzIGVuYWJsZWQgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIHdpbGwgYmUgcHVsbGVkIGZyb20gYW4gZW52aXJvbm1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIGNhc2UgYSBwcmVmaXggaXMgZGVmaW5lZCBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuCiAgICA6cGFyYW0gaGVscDogdGhlIGhlbHAgc3RyaW5nLgogICAgOnBhcmFtIGhpZGRlbjogaGlkZSB0aGlzIG9wdGlvbiBmcm9tIGhlbHAgb3V0cHV0cy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMS4wCiAgICAgICAgSGVscCB0ZXh0IGluZGVudGF0aW9uIGlzIGNsZWFuZWQgaGVyZSBpbnN0ZWFkIG9mIG9ubHkgaW4gdGhlCiAgICAgICAgYGBAb3B0aW9uYGAgZGVjb3JhdG9yLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4xLjAKICAgICAgICBUaGUgYGBzaG93X2RlZmF1bHRgYCBwYXJhbWV0ZXIgb3ZlcnJpZGVzCiAgICAgICAgYGBDb250ZXh0LnNob3dfZGVmYXVsdGBgLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4xLjAKICAgICAgICBUaGUgZGVmYXVsdCBvZiBhIHNpbmdsZSBvcHRpb24gYm9vbGVhbiBmbGFnIGlzIG5vdCBzaG93biBpZiB0aGUKICAgICAgICBkZWZhdWx0IHZhbHVlIGlzIGBgRmFsc2VgYC4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMC4xCiAgICAgICAgYGB0eXBlYGAgaXMgZGV0ZWN0ZWQgZnJvbSBgYGZsYWdfdmFsdWVgYCBpZiBnaXZlbi4KICAgINoGb3B0aW9uTkZUKRJymwEAAHJ/AAAAch4AAADaE2NvbmZpcm1hdGlvbl9wcm9tcHTaD3Byb21wdF9yZXF1aXJlZNoKaGlkZV9pbnB1dHI/AQAA2gpmbGFnX3ZhbHVlcmIBAADaBWNvdW502hJhbGxvd19mcm9tX2F1dG9lbnZyRQAAAHL7AAAAcjgAAADaDHNob3dfY2hvaWNlc9oLc2hvd19lbnZ2YXJyZwEAAHIwAAAAYxEAAAAAAAAAAAAAABQAAAAFAAAACwAAAHNQAgAAfA1yDnQAoAF8DaEBfQ1kAXwRawd9EnQCgwBqA3wBZgF8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