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BXwMgwF9DVcAblgEAHQEawpy3AEAfQ4BAHo6iAFyrHQFdANkB4MBiABkCI0CAQBuGHQFdANkCYMBagZ8DmQKjQGIAGQIjQIBAFcAWQCiBnFYVwA1AGQEfQ5+DlgAWQBuAlgAfANz5nwNUwB8CnwDgwF9D3wMDABv+HwPDAB9EHwPkAFzCnwQcuaQAXEKceZ8DHwPawKQAXIYfA1TAHQFdANkC4MBiABkCI0CAQBxWGQEUwApDGEhBwAAUHJvbXB0cyBhIHVzZXIgZm9yIGlucHV0LiAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgY2FuCiAgICBiZSB1c2VkIHRvIHByb21wdCBhIHVzZXIgZm9yIGlucHV0IGxhdGVyLgoKICAgIElmIHRoZSB1c2VyIGFib3J0cyB0aGUgaW5wdXQgYnkgc2VuZGluZyBhbiBpbnRlcnJ1cHQgc2lnbmFsLCB0aGlzCiAgICBmdW5jdGlvbiB3aWxsIGNhdGNoIGl0IGFuZCByYWlzZSBhIDpleGM6YEFib3J0YCBleGNlcHRpb24uCgogICAgOnBhcmFtIHRleHQ6IHRoZSB0ZXh0IHRvIHNob3cgZm9yIHRoZSBwcm9tcHQuCiAgICA6cGFyYW0gZGVmYXVsdDogdGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGlmIG5vIGlucHV0IGhhcHBlbnMuICBJZiB0aGlzCiAgICAgICAgICAgICAgICAgICAgaXMgbm90IGdpdmVuIGl0IHdpbGwgcHJvbXB0IHVudGlsIGl0J3MgYWJvcnRlZC4KICAgIDpwYXJhbSBoaWRlX2lucHV0OiBpZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGlucHV0IHZhbHVlIHdpbGwKICAgICAgICAgICAgICAgICAgICAgICBiZSBoaWRkZW4uCiAgICA6cGFyYW0gY29uZmlybWF0aW9uX3Byb21wdDogUHJvbXB0IGEgc2Vjb25kIHRpbWUgdG8gY29uZmlybSB0aGUKICAgICAgICB2YWx1ZS4gQ2FuIGJlIHNldCB0byBhIHN0cmluZyBpbnN0ZWFkIG9mIGBgVHJ1ZWBgIHRvIGN1c3RvbWl6ZQogICAgICAgIHRoZSBtZXNzYWdlLgogICAgOnBhcmFtIHR5cGU6IHRoZSB0eXBlIHRvIHVzZSB0byBjaGVjayB0aGUgdmFsdWUgYWdhaW5zdC4KICAgIDpwYXJhbSB2YWx1ZV9wcm9jOiBpZiB0aGlzIHBhcmFtZXRlciBpcyBwcm92aWRlZCBpdCdzIGEgZnVuY3Rpb24gdGhhdAogICAgICAgICAgICAgICAgICAgICAgIGlzIGludm9rZWQgaW5zdGVhZCBvZiB0aGUgdHlwZSBjb252ZXJzaW9uIHRvCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydCBhIHZhbHVlLgogICAgOnBhcmFtIHByb21wdF9zdWZmaXg6IGEgc3VmZml4IHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBwcm9tcHQuCiAgICA6cGFyYW0gc2hvd19kZWZhdWx0OiBzaG93cyBvciBoaWRlcyB0aGUgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgcHJvbXB0LgogICAgOnBhcmFtIGVycjogaWYgc2V0IHRvIHRydWUgdGhlIGZpbGUgZGVmYXVsdHMgdG8gYGBzdGRlcnJgYCBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAgICBgYHN0ZG91dGBgLCB0aGUgc2FtZSBhcyB3aXRoIGVjaG8uCiAgICA6cGFyYW0gc2hvd19jaG9pY2VzOiBTaG93IG9yIGhpZGUgY2hvaWNlcyBpZiB0aGUgcGFzc2VkIHR5cGUgaXMgYSBDaG9pY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSBpZiB0eXBlIGlzIGEgQ2hvaWNlIG9mIGVpdGhlciBkYXkgb3Igd2VlaywKICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfY2hvaWNlcyBpcyB0cnVlIGFuZCB0ZXh0IGlzICJHcm91cCBieSIgdGhlbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdCB3aWxsIGJlICJHcm91cCBieSAoZGF5LCB3ZWVrKTogIi4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiA4LjAKICAgICAgICBgYGNvbmZpcm1hdGlvbl9wcm9tcHRgYCBjYW4gYmUgYSBjdXN0b20gc3RyaW5nLgoKICAgIC4uIHZl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AAAAQwAAAHM6AAAAZAFkAmwAbQF9DwEAdAJ8DYMBfQ18D3wAfAF8A3wEfAV8BnwHfAh8CXwKfAx8AnwLfA18DmQDjQ9TACkEYVEVAABUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gaXRlcmFibGUgY29udGV4dCBtYW5hZ2VyIHRoYXQgY2FuIGJlIHVzZWQKICAgIHRvIGl0ZXJhdGUgb3ZlciBzb21ldGhpbmcgd2hpbGUgc2hvd2luZyBhIHByb2dyZXNzIGJhci4gIEl0IHdpbGwKICAgIGVpdGhlciBpdGVyYXRlIG92ZXIgdGhlIGBpdGVyYWJsZWAgb3IgYGxlbmd0aGAgaXRlbXMgKHRoYXQgYXJlIGNvdW50ZWQKICAgIHVwKS4gIFdoaWxlIGl0ZXJhdGlvbiBoYXBwZW5zLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJpbnQgYSByZW5kZXJlZAogICAgcHJvZ3Jlc3MgYmFyIHRvIHRoZSBnaXZlbiBgZmlsZWAgKGRlZmF1bHRzIHRvIHN0ZG91dCkgYW5kIHdpbGwgYXR0ZW1wdAogICAgdG8gY2FsY3VsYXRlIHJlbWFpbmluZyB0aW1lIGFuZCBtb3JlLiAgQnkgZGVmYXVsdCwgdGhpcyBwcm9ncmVzcyBiYXIKICAgIHdpbGwgbm90IGJlIHJlbmRlcmVkIGlmIHRoZSBmaWxlIGlzIG5vdCBhIHRlcm1pbmFsLgoKICAgIFRoZSBjb250ZXh0IG1hbmFnZXIgY3JlYXRlcyB0aGUgcHJvZ3Jlc3MgYmFyLiAgV2hlbiB0aGUgY29udGV4dAogICAgbWFuYWdlciBpcyBlbnRlcmVkIHRoZSBwcm9ncmVzcyBiYXIgaXMgYWxyZWFkeSBjcmVhdGVkLiAgV2l0aCBldmVyeQogICAgaXRlcmF0aW9uIG92ZXIgdGhlIHByb2dyZXNzIGJhciwgdGhlIGl0ZXJhYmxlIHBhc3NlZCB0byB0aGUgYmFyIGlzCiAgICBhZHZhbmNlZCBhbmQgdGhlIGJhciBpcyB1cGRhdGVkLiAgV2hlbiB0aGUgY29udGV4dCBtYW5hZ2VyIGV4aXRzLAogICAgYSBuZXdsaW5lIGlzIHByaW50ZWQgYW5kIHRoZSBwcm9ncmVzcyBiYXIgaXMgZmluYWxpemVkIG9uIHNjcmVlbi4KCiAgICBOb3RlOiBUaGUgcHJvZ3Jlc3MgYmFyIGlzIGN1cnJlbnRseSBkZXNpZ25lZCBmb3IgdXNlIGNhc2VzIHdoZXJlIHRoZQogICAgdG90YWwgcHJvZ3Jlc3MgY2FuIGJlIGV4cGVjdGVkIHRvIHRha2UgYXQgbGVhc3Qgc2V2ZXJhbCBzZWNvbmRzLgogICAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgUHJvZ3Jlc3NCYXIgY2xhc3Mgb2JqZWN0IHdvbid0IGRpc3BsYXkKICAgIHByb2dyZXNzIHRoYXQgaXMgY29uc2lkZXJlZCB0b28gZmFzdCwgYW5kIHByb2dyZXNzIHdoZXJlIHRoZSB0aW1lCiAgICBiZXR3ZWVuIHN0ZXBzIGlzIGxlc3MgdGhhbiBhIHNlY29uZC4KCiAgICBObyBwcmludGluZyBtdXN0IGhhcHBlbiBvciB0aGUgcHJvZ3Jlc3MgYmFyIHdpbGwgYmUgdW5pbnRlbnRpb25hbGx5CiAgICBkZXN0cm95ZWQuCgogICAgRXhhbXBsZSB1c2FnZTo6CgogICAgICAgIHdpdGggcHJvZ3Jlc3NiYXIoaXRlbXMpIGFzIGJhcjoKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gYmFyOgogICAgICAgICAgICAgICAgZG9fc29tZXRoaW5nX3dpdGgoaXRlbSkKCiAgICBBbHRlcm5hdGl2ZWx5LCBpZiBubyBpdGVyYWJsZSBpcyBzcGVjaWZpZWQsIG9uZSBjYW4gbWFudWFsbHkgdXBkYXRlIHRoZQogICAgcHJvZ3Jlc3MgYmFyIHRocm91Z2ggdGhlIGB1cGRhdGUoKWAgbWV0aG9kIGluc3RlYWQgb2YgZGlyZWN0bHkKICAgIGl0ZXJhdGluZyBvdmVyIHRoZSBwcm9ncmVzcyBiYXIuICBUaGUgdXBkYXRlIG1ldGhvZCBhY2NlcHRzIHRoZSBudW1iZXIKICAgIG9mIHN0ZXBzIHRvIGluY3JlbWVudCB0aGUgYmFyIHdpdGg6OgoKICAgICAgICB3aXRoIHByb2dyZXNzYmFyKGxlbmd0aD1jaHVua3MudG90YWxfYnl0ZXMpIGFzIGJhcjoKICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKICAgICAgICAgICAgICAgIHByb2Nlc3NfY2h1bmsoY2h1bmspCiAgICAgICAgICAgICAgICBiYXIudXBkYXRlKGNodW5rcy5ieXRlcykKCiAgICBUaGUgYGB1cGRhdGUoKWBgIG1ldGhvZCBhbHNvIHRha2VzIGFuIG9wdGlvbmFsIHZhbHVlIHNwZWNpZnlpbmcgdGhlCiAgICBgYGN1cnJlbnRfaXRlbWBgIGF0IHRoZSBuZXcgcG9zaXRpb24uIFRoaXMgaXMgdXNlZnVsIHdoZW4gdXNlZAogICAgdG9nZXRoZXIgd2l0aCBgYGl0ZW1fc2hvd19mdW5jYGAgdG8gY3VzdG9taXplIHRoZSBvdXRwdXQgZm9yIGVhY2gKICAgIG1hbnVhbCBzdGVwOjoKCiAgICAgICAgd2l0aCBjbGljay5wcm9ncmVzc2JhcigKICAgICAgICAgICAgbGVuZ3RoPXRvdGFsX3NpemUsCiAgICAgICAgICAgIGxhYmVsPSdVbnppcHBpbmcgYXJjaGl2ZScsCiAgICAgICAgICAgIGl0ZW1fc2hvd19mdW5jPWxhbWJkYSBhOiBhLmZpbGVuYW1lCiAgICAgICAgKSBhcyBiYXI6CiAgICAgICAgICAgIGZvciBhcmNoaXZlIGluIHppcF9maWxlOgogICAgICAgICAgICAgICAgYXJjaGl2ZS5leHRyYWN0KCkKICAgICAgICAgICAgICAgIGJhci51cGRhdGUoYXJjaGl2ZS5zaXplLCBhcmNoaXZlKQoKICAgIDpwYXJhbSBpdGVyYWJsZTogYW4gaXRlcmFibGUgdG8gaXRlcmF0ZSBvdmVyLiAgSWYgbm90IHByb3ZpZGVkIHRoZSBsZW5ndGgKICAgICAgICAgICAgICAgICAgICAgaXMgcmVxdWlyZWQuCiAgICA6cGFyYW0gbGVuZ3RoOiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGl0ZXJhdGUgb3Zlci4gIEJ5IGRlZmF1bHQgdGhlCiAgICAgICAgICAgICAgICAgICBwcm9ncmVzc2JhciB3aWxsIGF0dGVtcHQgdG8gYXNrIHRoZSBpdGVyYXRvciBhYm91dCBpdHMKICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgd2hpY2ggbWlnaHQgb3IgbWlnaHQgbm90IHdvcmsuICBJZiBhbiBpdGVyYWJsZSBpcwogICAgICAgICAgICAgICAgICAgYWxzbyBwcm92aWRlZCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUKICAgICAgICAgICAgICAgICAgIGxlbmd0aC4gIElmIGFuIGl0ZXJhYmxlIGlzIG5vdCBwcm92aWRlZCB0aGUgcHJvZ3Jlc3MgYmFyCiAgICAgICAgICAgICAgICAgICB3aWxsIGl0ZXJhdGUgb3ZlciBhIHJhbmdlIG9mIHRoYXQgbGVuZ3RoLgogICAgOnBhcmFtIGxhYmVsOiB0aGUgbGFiZWwgdG8gc2hvdyBuZXh0IHRvIHRoZSBwcm9ncmVzcyBiYXIuCiAgICA6cGFyYW0gc2hvd19ldGE6IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGVzdGltYXRlZCB0aW1lIGRpc3BsYXkuICBUaGlzIGlzCiAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYgdGhlIGxlbmd0aCBjYW5ub3QgYmUKICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lZC4KICAgIDpwYXJhbSBzaG93X3BlcmNlbnQ6IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHBlcmNlbnRhZ2UgZGlzcGxheS4gIFRoZQogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBgVHJ1ZWAgaWYgdGhlIGl0ZXJhYmxlIGhhcyBhIGxlbmd0aCBvcgogICAgICAgICAgICAgICAgICAgICAgICAgYEZhbHNlYCBpZiBub3QuCiAgICA6cGFyYW0gc2hvd19wb3M6IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGFic29sdXRlIHBvc2l0aW9uIGRpc3BsYXkuICBUaGUKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBgRmFsc2VgLgogICAgOnBhcmFtIGl0ZW1fc2hvd19mdW5jOiBBIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2gKICAgICAgICBjYW4gcmV0dXJuIGEgc3RyaW5nIHRvIHNob3cgbmV4dCB0byB0aGUgcHJvZ3Jlc3MgYmFyLiBJZiB0aGUKICAgICAgICBmdW5jdGlvbiByZXR1cm5zIGBgTm9uZWBgIG5vdGhpbmcgaXMgc2hvd24uIFRoZSBjdXJyZW50IGl0ZW0gY2FuCiAgICAgICAgYmUgYGBOb25lYGAsIHN1Y2ggYXMgd2hlbiBlbnRlcmluZyBhbmQgZXhpdGluZyB0aGUgYmFyLgogICAgOnBhcmFtIGZpbGxfY2hhcjogdGhlIGNoYXJhY3RlciB0byB1c2UgdG8gc2hvdyB0aGUgZmlsbGVkIHBhcnQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyBiYXIuCiAgICA6cGFyYW0gZW1wdHlfY2hhcjogdGhlIGNoYXJhY3RlciB0byB1c2UgdG8gc2hvdyB0aGUgbm9uLWZpbGxlZCBwYXJ0IG9mCiAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByb2dyZXNzIGJhci4KICAgIDpwYXJhbSBiYXJfdGVtcGxhdGU6IHRoZSBmb3JtYXQgc3RyaW5nIHRvIHVzZSBhcyB0ZW1wbGF0ZSBmb3IgdGhlIGJhci4KICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXJhbWV0ZXJzIGluIGl0IGFyZSBgYGxhYmVsYGAgZm9yIHRoZSBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGBgYmFyYGAgZm9yIHRoZSBwcm9ncmVzcyBiYXIgYW5kIGBgaW5mb2BgIGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gc2VjdGlvbi4KICAgIDpwYXJhbSBpbmZvX3NlcDogdGhlIHNlcGFyYXRvciBiZXR3ZWVuIG11bHRpcGxlIGluZm8gaXRlbXMgKGV0YSBldGMuKQogICAgOnBhcmFtIHdpZHRoOiB0aGUgd2lkdGggb2YgdGhlIHByb2dyZXNzIGJhciBpbiBjaGFyYWN0ZXJzLCAwIG1lYW5zIGZ1bGwKICAgICAgICAgICAgICAgICAgdGVybWluYWwgd2lkdGgKICAgIDpwYXJhbSBmaWxlOiBUaGUgZmlsZSB0byB3cml0ZSB0by4gSWYgdGhpcyBpcyBub3QgYSB0ZXJtaW5hbCB0aGVuCiAgICAgICAgb25seSB0aGUgbGFiZWwgaXMgcHJpbnRlZC4KICAgIDpwYXJhbSBjb2xvcjogY29udHJvbHMgaWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIEFOU0kgY29sb3JzIG9yIG5vdC4gIFRoZQogICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzIGF1dG9kZXRlY3Rpb24uICBUaGlzIGlzIG9ubHkgbmVlZGVkIGlmIEFOU0kKICAgICAgICAgICAgICAgICAgY29kZXMgYXJlIGluY2x1ZGVkIGFueXdoZXJlIGluIHRoZSBwcm9ncmVzcyBiYXIgb3V0cHV0CiAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBieSBkZWZhdWx0LgogICAgOnBhcmFtIHVwZGF0ZV9taW5fc3RlcHM6IFJlbmRlciBvbmx5IHdoZW4gdGhpcyBtYW55IHVwZGF0ZXMgaGF2ZQogICAgICAgIGNvbXBsZXRlZC4gVGhpcyBhbGxvd3MgdHVuaW5nIGZvciB2ZXJ5IGZhc3QgaXRlcmF0b3JzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgT3V0cHV0IGlzIHNob3duIGV2ZW4gaWYgZXhlY3V0aW9uIHRpbWUgaXMgbGVzcyB0aGFuIDAuNSBzZWNvbmRzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgYGBpdGVtX3Nob3dfZnVuY2BgIHNob3dzIHRoZSBjdXJyZW50IGl0ZW0sIG5vdCB0aGUgcHJldmlvdXMgb25lLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgTGFiZWxzIGFyZSBlY2hvZWQgaWYgdGhlIG91dHB1dCBpcyBub3QgYSBUVFkuIFJldmVydHMgYSBjaGFuZ2UKICAgICAgICBpbiA3LjAgdGhhdCByZW1vdmVkIGFsbCBvdXRwdXQuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogOC4wCiAgICAgICBBZGRlZCB0aGUgYGB1cGRhdGVfbWluX3N0ZXBzYGAgcGFyYW1ldGVyLgoKICAgIC4uIHZlcnNpb25j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bGVzIGFuZCByZXR1cm5zIHRoZSBuZXcgc3RyaW5nLiAgQnkKICAgIGRlZmF1bHQgdGhlIHN0eWxpbmcgaXMgc2VsZiBjb250YWluZWQgd2hpY2ggbWVhbnMgdGhhdCBhdCB0aGUgZW5kCiAgICBvZiB0aGUgc3RyaW5nIGEgcmVzZXQgY29kZSBpcyBpc3N1ZWQuICBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkKICAgIHBhc3NpbmcgYGByZXNldD1GYWxzZWBgLgoKICAgIEV4YW1wbGVzOjoKCiAgICAgICAgY2xpY2suZWNobyhjbGljay5zdHlsZSgnSGVsbG8gV29ybGQhJywgZmc9J2dyZWVuJykpCiAgICAgICAgY2xpY2suZWNobyhjbGljay5zdHlsZSgnQVRURU5USU9OIScsIGJsaW5rPVRydWUpKQogICAgICAgIGNsaWNrLmVjaG8oY2xpY2suc3R5bGUoJ1NvbWUgdGhpbmdzJywgcmV2ZXJzZT1UcnVlLCBmZz0nY3lhbicpKQogICAgICAgIGNsaWNrLmVjaG8oY2xpY2suc3R5bGUoJ01vcmUgY29sb3JzJywgZmc9KDI1NSwgMTIsIDEyOCksIGJnPTExNykpCgogICAgU3VwcG9ydGVkIGNvbG9yIG5hbWVzOgoKICAgICogYGBibGFja2BgIChtaWdodCBiZSBhIGdyYXkpCiAgICAqIGBgcmVkYGAKICAgICogYGBncmVlbmBgCiAgICAqIGBgeWVsbG93YGAgKG1pZ2h0IGJlIGFuIG9yYW5nZSkKICAgICogYGBibHVlYGAKICAgICogYGBtYWdlbnRhYGAKICAgICogYGBjeWFuYGAKICAgICogYGB3aGl0ZWBgIChtaWdodCBiZSBsaWdodCBncmF5KQogICAgKiBgYGJyaWdodF9ibGFja2BgCiAgICAqIGBgYnJpZ2h0X3JlZGBgCiAgICAqIGBgYnJpZ2h0X2dyZWVuYGAKICAgICogYGBicmlnaHRfeWVsbG93YGAKICAgICogYGBicmlnaHRfYmx1ZWBgCiAgICAqIGBgYnJpZ2h0X21hZ2VudGFgYAogICAgKiBgYGJyaWdodF9jeWFuYGAKICAgICogYGBicmlnaHRfd2hpdGVgYAogICAgKiBgYHJlc2V0YGAgKHJlc2V0IHRoZSBjb2xvciBjb2RlIG9ubHkpCgogICAgSWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIGl0LCBjb2xvciBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXM6CgogICAgLSAgIEFuIGludGVnZXIgaW4gdGhlIGludGVydmFsIFswLCAyNTVdLiBUaGUgdGVybWluYWwgbXVzdCBzdXBwb3J0CiAgICAgICAgOC1iaXQvMjU2LWNvbG9yIG1vZGUuCiAgICAtICAgQW4gUkdCIHR1cGxlIG9mIHRocmVlIGludGVnZXJzIGluIFswLCAyNTVdLiBUaGUgdGVybWluYWwgbXVzdAogICAgICAgIHN1cHBvcnQgMjQtYml0L3RydWUtY29sb3IgbW9kZS4KCiAgICBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9jb2xvciBhbmQKICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL1hWaWxrYS84MzQ2NzI4IGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgIDpwYXJhbSB0ZXh0OiB0aGUgc3RyaW5nIHRvIHN0eWxlIHdpdGggYW5zaSBjb2Rlcy4KICAgIDpwYXJhbSBmZzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGJlY29tZSB0aGUgZm9yZWdyb3VuZCBjb2xvci4KICAgIDpwYXJhbSBiZzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGJlY29tZSB0aGUgYmFja2dyb3VuZCBjb2xvci4KICAgIDpwYXJhbSBib2xkOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgYm9sZCBtb2RlLgogICAgOnBhcmFtIGRpbTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGRpbSBtb2RlLiAgVGhpcyBpcwogICAgICAgICAgICAgICAgYmFkbHkgc3VwcG9ydGVkLgogICAgOnBhcmFtIHVuZGVybGluZTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIHVuZGVybGluZS4KICAgIDpwYXJhbSBvdmVybGluZTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIG92ZXJsaW5lLgogICAgOnBhcmFtIGl0YWxpYzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGl0YWxpYy4KICAgIDpwYXJhbSBibGluazogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGJsaW5raW5nLgogICAgOnBhcmFtIHJldmVyc2U6IGlmIHByb3ZpZGVkIHRoaXMgd2lsbCBlbmFibGUgb3IgZGlzYWJsZSBpbnZlcnNlCiAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nIChmb3JlZ3JvdW5kIGJlY29tZXMgYmFja2dyb3VuZCBhbmQgdGhlCiAgICAgICAgICAgICAgICAgICAgb3RoZXIgd2F5IHJvdW5kKS4KICAgIDpwYXJhbSBzdHJpa2V0aHJvdWdoOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUKICAgICAgICBzdHJpa2luZyB0aHJvdWdoIHRleHQuCiAgICA6cGFyYW0gcmVzZXQ6IGJ5IGRlZmF1bHQgYSByZXNldC1hbGwgY29kZSBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICAgICAgICAgICAgICBzdHJpbmcgd2hpY2ggbWVhbnMgdGhhdCBzdHlsZXMgZG8gbm90IGNhcnJ5IG92ZXIuICBUaGlzCiAgICAgICAgICAgICAgICAgIGNhbiBiZSBkaXNhYmxlZCB0byBjb21wb3NlIHN0eWxlcy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIEEgbm9uLXN0cmluZyBgYG1lc3NhZ2VgYCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIDI1NiBhbmQgUkdCIGNvbG9yIGNvZGVzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgQWRkZWQgdGhlIGBgc3RyaWtldGhyb3VnaGBgLCBgYGl0YWxpY2BgLCBhbmQgYGBvdmVybGluZWBgCiAgICAgICAgcGFyYW1ldGVycy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDcuMAogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGJyaWdodCBjb2xvcnMuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCiAgICB6Ahtb2gFteg5Vbmtub3duIGNvbG9yIE7pCgAAAHIDAAAA6RYAAADpAgAAAOkEAAAA6RgAAADpNQAAAOk3AAAA6QMAAADpFwAAAOkFAAAA6RkAAADpBwAAAOkbAAAA6QkAAADpHQAAAHJqAAAAKQhyRAAAAHJHAAAA2gZhcHBlbmRypwAAANoIS2V5RXJyb3LaCVR5cGVFcnJvctoPX2Fuc2lfcmVzZXRfYWxsckUAAAApDXI8AAAAcqgAAAByqQAAAHKqAAAAcqsAAAByrAAAAHKtAAAAcq4AAAByrwAAAHKwAAAAcrEAAAByLQAAANoEYml0c3I5AAAAcjkAAAByOgAAANoFc3R5bGXRAQAAc0IAAAAAWgoBCAIEAgQBAgEaAQ4BFgIEAQIBHAEOARYCCAEaAQgBGgEKARoBCgEcAQoBHAEKARwBCgEcAQoBHAEKAQYBCgFyxwAAAHJVAAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAHMIAAAAdAB8AIMBUwApAWEOAQAAUmVtb3ZlcyBBTlNJIHN0eWxpbmcgaW5mb3JtYXRpb24gZnJvbSBhIHN0cmluZy4gIFVzdWFsbHkgaXQncyBub3QKICAgIG5lY2Vzc2FyeSB0byB1c2UgdGhpcyBmdW5jdGlvbiBhcyBDbGljaydzIGVjaG8gZnVuY3Rpb24gd2lsbAogICAgYXV0b21hdGljYWxseSByZW1vdmUgc3R5bGluZyBpZiBuZWNlc3NhcnkuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCgogICAgOnBhcmFtIHRleHQ6IHRoZSB0ZXh0IHRvIHJlbW92ZSBzdHlsZSBpbmZvcm1hdGlvbiBmcm9tLgogICAgcgUAAAApAXI8AAAAcjkAAAByOQAAAHI6AAAA2gd1bnN0eWxlUgIAAHMCAAAAAAlyyAAAACkH2gdtZXNzYWdlcpIAAAByWAAAAHJUAAAAcnAAAADaBnN0eWxlc3I3AAAAYwUAAAAAAAAAAAAAAAYAAAAHAAAASwAAAHM0AAAAfABkAWsJciJ0AHwAdAF0AmYCgwJzInQDfABmAXwFjgF9AHQEfAB8AXwCfAN8BGQCjQVTACkDYe0CAABUaGlzIGZ1bmN0aW9uIGNvbWJpbmVzIDpmdW5jOmBlY2hvYCBhbmQgOmZ1bmM6YHN0eWxlYCBpbnRvIG9uZQogICAgY2FsbC4gIEFzIHN1Y2ggdGhlIGZvbGxvd2luZyB0d28gY2FsbHMgYXJlIHRoZSBzYW1lOjoKCiAgICAgICAgY2xpY2suc2VjaG8oJ0hlbGxvIFdvcmxkIScsIGZnPSdncmVlbicpCiAgICAgICAgY2xpY2suZWNobyhjbGljay5zdHlsZSgnSGVsbG8gV29ybGQhJywgZmc9J2dyZWVuJykpCgogICAgQWxsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25zCiAgICBkZXBlbmRpbmcgb24gd2hpY2ggb25lIHRoZXkgZ28gd2l0aC4KCiAgICBOb24tc3RyaW5nIHR5cGVzIHdpbGwgYmUgY29udmVydGVkIHRvIDpjbGFzczpgc3RyYC4gSG93ZXZlciwKICAgIDpjbGFzczpgYnl0ZXNgIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gOm1ldGg6YGVjaG9gIHdpdGhvdXQgYXBwbHlpbmcKICAgIHN0eWxlLiBJZiB5b3Ugd2FudCB0byBzdHlsZSBieXRlcyB0aGF0IHJlcHJlc2VudCB0ZXh0LCBjYWxsCiAgICA6bWV0aDpgYnl0ZXMuZGVjb2RlYCBmaXJzdC4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIEEgbm9uLXN0cmluZyBgYG1lc3NhZ2VgYCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcuIEJ5dGVzIGFyZQogICAgICAgIHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQgc3R5bGUgYXBwbGllZC4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjAKICAgIE4pBHKSAAAAclgAAAByVAAAAHJwAAAAKQVyRAAAANoFYnl0ZXPaCWJ5dGVhcnJheXLHAAAAcg4AAAApBnLJAAAAcpIAAAByWAAAAHJUAAAAcnAAAAByygAAAHI5AAAAcjkAAAByOgAAANoFc2VjaG9eAgAAcwYAAAAAHBYBDAJyzQAAAPoELnR4dCkHcjwAAADaBmVkaXRvctoDZW522gxyZXF1aXJlX3NhdmXaCWV4dGVuc2lvbtoIZmlsZW5hbWVyNwAAAGMGAAAAAAAAAAAAAAAIAAAABgAAAEMAAABzPAAAAGQBZAJsAG0BfQYBAHwGfAF8AnwDfARkA40EfQd8BWQEawhyLnwHoAJ8AKEBUwB8B6ADfAWhAQEAZARTACkFYc8FAABFZGl0cyB0aGUgZ2l2ZW4gdGV4dCBpbiB0aGUgZGVmaW5lZCBlZGl0b3IuICBJZiBhbiBlZGl0b3IgaXMgZ2l2ZW4KICAgIChzaG91bGQgYmUgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSBidXQgdGhlIHJlZ3VsYXIgb3BlcmF0aW5nCiAgICBzeXN0ZW0gc2VhcmNoIHBhdGggaXMgdXNlZCBmb3IgZmluZGluZyB0aGUgZXhlY3V0YWJsZSkgaXQgb3ZlcnJpZGVzCiAgICB0aGUgZGV0ZWN0ZWQgZWRpdG9yLiAgT3B0aW9uYWxseSwgc29tZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGJlCiAgICB1c2VkLiAgSWYgdGhlIGVkaXRvciBpcyBjbG9zZWQgd2l0aG91dCBjaGFuZ2VzLCBgTm9uZWAgaXMgcmV0dXJuZWQuICBJbgogICAgY2FzZSBhIGZpbGUgaXMgZWRpdGVkIGRpcmVjdGx5IHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzIGBOb25lYCBhbmQKICAgIGByZXF1aXJlX3NhdmVgIGFuZCBgZXh0ZW5zaW9uYCBhcmUgaWdub3JlZC4KCiAgICBJZiB0aGUgZWRpdG9yIGNhbm5vdCBiZSBvcGVuZWQgYSA6ZXhjOmBVc2FnZUVycm9yYCBpcyByYWlzZWQuCgogICAgTm90ZSBmb3IgV2luZG93czogdG8gc2ltcGxpZnkgY3Jvc3MtcGxhdGZvcm0gdXNhZ2UsIHRoZSBuZXdsaW5lcyBhcmUKICAgIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGZyb20gUE9TSVggdG8gV2luZG93cyBhbmQgdmljZSB2ZXJzYS4gIEFzIHN1Y2gsCiAgICB0aGUgbWVzc2FnZSBoZXJlIHdpbGwgaGF2ZSBgYFxuYGAgYXMgbmV3bGluZSBtYXJrZXJzLgoKICAgIDpwYXJhbSB0ZXh0OiB0aGUgdGV4dCB0byBlZGl0LgogICAgOnBhcmFtIGVkaXRvcjogb3B0aW9uYWxseSB0aGUgZWRpdG9yIHRvIHVzZS4gIERlZmF1bHRzIHRvIGF1dG9tYXRpYwogICAgICAgICAgICAgICAgICAgZGV0ZWN0aW9uLgogICAgOnBhcmFtIGVudjogZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGZvcndhcmQgdG8gdGhlIGVkaXRvci4KICAgIDpwYXJhbSByZXF1aXJlX3NhdmU6IGlmIHRoaXMgaXMgdHJ1ZSwgdGhlbiBub3Qgc2F2aW5nIGluIHRoZSBlZGl0b3IKICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgbWFrZSB0aGUgcmV0dXJuIHZhbHVlIGJlY29tZSBgTm9uZWAuCiAgICA6cGFyYW0gZXh0ZW5zaW9uOiB0aGUgZXh0ZW5zaW9uIHRvIHRlbGwgdGhlIGVkaXRvciBhYm91dC4gIFRoaXMgZGVmYXVsdHMKICAgICAgICAgICAgICAgICAgICAgIHRvIGAudHh0YCBidXQgY2hhbmdpbmcgdGhpcyBtaWdodCBjaGFuZ2Ugc3ludGF4CiAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRpbmcuCiAgICA6cGFyYW0gZmlsZW5hbWU6IGlmIHByb3ZpZGVkIGl0IHdpbGwgZWRpdCB0aGlzIGZpbGUgaW5zdGVhZCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgdGV4dCBjb250ZW50cy4gIEl0IHdpbGwgbm90IHVzZSBhIHRlbXBvcmFyeQogICAgICAgICAgICAgICAgICAgICBmaWxlIGFzIGFuIGluZGlyZWN0aW9uIGluIHRoYXQgY2FzZS4KICAgIHIDAAAAKQHaBkVkaXRvcikEcs8AAABy0AAAAHLRAAAActIAAABOKQRyfQAAAHLUAAAA2gRlZGl0WgllZGl0X2ZpbGUpCHI8AAAAcs8AAABy0AAAAHLRAAAActIAAABy0wAAAHLUAAAAWgJlZHI5AAAAcjkAAAByOgAAAHLVAAAAgAIAAHMMAAAAACMMAhACCAEKAgoBctUAAAApBNoDdXJs2gR3YWl02gZsb2NhdGVyNwAAAGMDAAAAAAAAAAAAAAAEAAAABQAAAEMAAABzGgAAAGQBZAJsAG0BfQMBAHwDfAB8AXwCZAONA1MAKQRhAAQAAFRoaXMgZnVuY3Rpb24gbGF1bmNoZXMgdGhlIGdpdmVuIFVSTCAob3IgZmlsZW5hbWUpIGluIHRoZSBkZWZhdWx0CiAgICB2aWV3ZXIgYXBwbGljYXRpb24gZm9yIHRoaXMgZmlsZSB0eXBlLiAgSWYgdGhpcyBpcyBhbiBleGVjdXRhYmxlLCBpdAogICAgbWlnaHQgbGF1bmNoIHRoZSBleGVjdXRhYmxlIGluIGEgbmV3IHNlc3Npb24uICBUaGUgcmV0dXJuIHZhbHVlIGlzCiAgICB0aGUgZXhpdCBjb2RlIG9mIHRoZSBsYXVuY2hlZCBhcHBsaWNhdGlvbi4gIFVzdWFsbHksIGBgMGBgIGluZGljYXRlcwogICAgc3VjY2Vzcy4KCiAgICBFeGFtcGxlczo6CgogICAgICAgIGNsaWNrLmxhdW5jaCgnaHR0cHM6Ly9jbGljay5wYWxsZXRzcHJvamVjdHMuY29tLycpCiAgICAgICAgY2xpY2subGF1bmNoKCcvbXkvZG93bmxvYWRlZC9maWxlJywgbG9jYXRlPVRydWUpCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCgogICAgOnBhcmFtIHVybDogVVJMIG9yIGZpbGVuYW1lIG9mIHRoZSB0aGluZyB0byBsYXVuY2guCiAgICA6cGFyYW0gd2FpdDogV2FpdCBmb3IgdGhlIHByb2dyYW0gdG8gZXhpdCBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzCiAgICAgICAgb25seSB3b3JrcyBpZiB0aGUgbGF1bmNoZWQgcHJvZ3JhbSBibG9ja3MuIEluIHBhcnRpY3VsYXIsCiAgICAgICAgYGB4ZGctb3BlbmBgIG9uIExpbnV4IGRvZXMgbm90IGJsb2NrLgogICAgOnBhcmFtIGxvY2F0ZTogaWYgdGhpcyBpcyBzZXQgdG8gYFRydWVgIHRoZW4gaW5zdGVhZCBv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