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dG8gdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHdpdGgKICAgIHVuZGVyc2NvcmVzIHJlcGxhY2VkIGJ5IGRhc2hlcy4gIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGF0LCB5b3UgY2FuCiAgICBwYXNzIHRoZSBpbnRlbmRlZCBuYW1lIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KCiAgICBBbGwga2V5d29yZCBhcmd1bWVudHMgYXJlIGZvcndhcmRlZCB0byB0aGUgdW5kZXJseWluZyBjb21tYW5kIGNsYXNzLgogICAgRm9yIHRoZSBgYHBhcmFtc2BgIGFyZ3VtZW50LCBhbnkgZGVjb3JhdGVkIHBhcmFtcyBhcmUgYXBwZW5kZWQgdG8KICAgIHRoZSBlbmQgb2YgdGhlIGxpc3QuCgogICAgT25jZSBkZWNvcmF0ZWQgdGhlIGZ1bmN0aW9uIHR1cm5zIGludG8gYSA6Y2xhc3M6YENvbW1hbmRgIGluc3RhbmNlCiAgICB0aGF0IGNhbiBiZSBpbnZva2VkIGFzIGEgY29tbWFuZCBsaW5lIHV0aWxpdHkgb3IgYmUgYXR0YWNoZWQgdG8gYQogICAgY29tbWFuZCA6Y2xhc3M6YEdyb3VwYC4KCiAgICA6cGFyYW0gbmFtZTogdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuICBUaGlzIGRlZmF1bHRzIHRvIHRoZSBmdW5jdGlvbgogICAgICAgICAgICAgICAgIG5hbWUgd2l0aCB1bmRlcnNjb3JlcyByZXBsYWNlZCBieSBkYXNoZXMuCiAgICA6cGFyYW0gY2xzOiB0aGUgY29tbWFuZCBjbGFzcyB0byBpbnN0YW50aWF0ZS4gIFRoaXMgZGVmYXVsdHMgdG8KICAgICAgICAgICAgICAgIDpjbGFzczpgQ29tbWFuZGAuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjEKICAgICAgICBUaGlzIGRlY29yYXRvciBjYW4gYmUgYXBwbGllZCB3aXRob3V0IHBhcmVudGhlc2VzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4xCiAgICAgICAgVGhlIGBgcGFyYW1zYGAgYXJndW1lbnQgY2FuIGJlIHVzZWQuIERlY29yYXRl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ZCwgQ2xpY2sgd2lsbCB0cnkgdG8gZGV0ZWN0IGl0IGJ5CiAgICBpbnNwZWN0aW5nIHRoZSBzdGFjayBmcmFtZXMuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUKICAgIHZlcnNpb24sIHNvIGl0IG11c3QgbWF0Y2ggdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxlZCBwYWNrYWdlLgoKICAgIDpwYXJhbSB2ZXJzaW9uOiBUaGUgdmVyc2lvbiBudW1iZXIgdG8gc2hvdy4gSWYgbm90IHByb3ZpZGVkLCBDbGljawogICAgICAgIHdpbGwgdHJ5IHRvIGRldGVjdCBpdC4KICAgIDpwYXJhbSBwYXJhbV9kZWNsczogT25lIG9yIG1vcmUgb3B0aW9uIG5hbWVzLiBEZWZhdWx0cyB0byB0aGUgc2luZ2xlCiAgICAgICAgdmFsdWUgYGAiLS12ZXJzaW9uImBgLgogICAgOnBhcmFtIHBhY2thZ2VfbmFtZTogVGhlIHBhY2thZ2UgbmFtZSB0byBkZXRlY3QgdGhlIHZlcnNpb24gZnJvbS4gSWYKICAgICAgICBub3QgcHJvdmlkZWQsIENsaWNrIHdpbGwgdHJ5IHRvIGRldGVjdCBpdC4KICAgIDpwYXJhbSBwcm9nX25hbWU6IFRoZSBuYW1lIG9mIHRoZSBDTEkgdG8gc2hvdyBpbiB0aGUgbWVzc2FnZS4gSWYgbm90CiAgICAgICAgcHJvdmlkZWQsIGl0IHdpbGwgYmUgZGV0ZWN0ZWQgZnJvbSB0aGUgY29tbWFuZC4KICAgIDpwYXJhbSBtZXNzYWdlOiBUaGUgbWVzc2FnZSB0byBzaG93LiBUaGUgdmFsdWVzIGBgJShwcm9nKXNgYCwKICAgICAgICBgYCUocGFja2FnZSlzYGAsIGFuZCBgYCUodmVyc2lvbilzYGAgYXJlIGF2YWlsYWJsZS4gRGVmYXVsdHMgdG8KICAgICAgICBgYCIlKHByb2cpcywgdmVyc2lvbiAlKHZlcnNpb24pcyJgYC4KICAgIDpwYXJhbSBrd2FyZ3M6IEV4dHJhIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIDpmdW5jOmBvcHRpb25gLgogICAgOnJhaXNlIFJ1bnRpbWVFcnJvcjogYGB2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