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c2UKCiAgICBgVmVyc2lvblByZWRpY2F0ZWAgaXMgZmxleGlibGUgaW4gYWNjZXB0aW5nIGV4dHJhIHdoaXRlc3BhY2U6OgoKICAgID4+PiB2ID0gVmVyc2lvblByZWRpY2F0ZSgnIHBhdCggPT0gIDAuMSAgKSAgJykKICAgID4+PiB2Lm5hbWUKICAgICdwYXQnCiAgICA+Pj4gdi5zYXRpc2ZpZWRfYnkoJzAuMScpCiAgICBUcnVlCiAgICA+Pj4gdi5zYXRpc2ZpZWRfYnkoJzAuMicpCiAgICBGYWxzZQoKICAgIElmIGFueSB2ZXJzaW9uIG51bWJlcnMgcGFzc2VkIGluIGRvIG5vdCBjb25mb3JtIHRvIHRoZQogICAgcmVzdHJpY3Rpb25zIG9mIGBTdHJpY3RWZXJzaW9uYCwgYSBgVmFsdWVFcnJvcmAgaXMgcmFpc2VkOjoKCiAgICA+Pj4gdiA9IFZlcnNpb25QcmVkaWNhdGUoJ3AxLnAyLnAzLnA0KD49MS4wLCA8PTEuM2ExLCAhPTEuMnpiMyknKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAuLi4KICAgIFZhbHVlRXJyb3I6IGludmFsaWQgdmVyc2lvbiBudW1iZXIgJzEuMnpiMycKCiAgICBJdCB0aGUgbW9kdWxlIG9yIHBhY2thZ2UgbmFtZSBnaXZlbiBkb2VzIG5vdCBjb25mb3JtIHRvIHdoYXQncwogICAgYWxsb3dlZCBhcyBhIGxlZ2FsIG1vZHVsZSBvciBwYWNrYWdlIG5hbWUsIGBWYWx1ZUVycm9yYCBpcwogICAgcmFpc2VkOjoKCiAgICA+Pj4gdiA9IFZlcnNpb25QcmVkaWNhdGUoJ2Zvby1iYXInKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAuLi4KICAgIFZhbHVlRXJyb3I6IGV4cGVjdGVkIHBhcmVudGhlc2l6ZWQgbGlzdDogJy1iYXInCgogICAgPj4+IHYgPSBWZXJzaW9uUHJlZGljYXRlKCdmb28gYmFyICgxMi4yMSknKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAu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