templates.swift 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. *
  3. * Copyright 2017, Google Inc.
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions are
  8. * met:
  9. *
  10. * * Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. * * Redistributions in binary form must reproduce the above
  13. * copyright notice, this list of conditions and the following disclaimer
  14. * in the documentation and/or other materials provided with the
  15. * distribution.
  16. * * Neither the name of Google Inc. nor the names of its
  17. * contributors may be used to endorse or promote products derived from
  18. * this software without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. *
  32. */
  33. // GENERATED: DO NOT EDIT
  34. //
  35. // This file contains base64 encodings of templates used for Swift GRPC code generation.
  36. //
  37. func loadTemplates() -> [String:String] {
  38. var templates : [String:String] = [:]
  39. templates["client-call-bidistreaming.swift"] = "Ly8vIHt7IG1ldGhvZC5uYW1lIH19IChCaWRpcmVjdGlvbmFsIFN0cmVhbWluZykKcHVibGljIGNsYXNzIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICBwcml2YXRlIHZhciBjYWxsIDogQ2FsbAoKICAvLy8gQ3JlYXRlIGEgY2FsbC4KICBmaWxlcHJpdmF0ZSBpbml0KF8gY2hhbm5lbDogQ2hhbm5lbCkgewogICAgc2VsZi5jYWxsID0gY2hhbm5lbC5tYWtlQ2FsbCgie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iKQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBzdGFydCBhIGNhbGwuIE5vbmJsb2NraW5nLgogIGZpbGVwcml2YXRlIGZ1bmMgc3RhcnQobWV0YWRhdGE6TWV0YWRhdGEsIGNvbXBsZXRpb246QGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICB0cnkgc2VsZi5jYWxsLnN0YXJ0KC5iaWRpU3RyZWFtaW5nLCBtZXRhZGF0YTptZXRhZGF0YSwgY29tcGxldGlvbjpjb21wbGV0aW9uKQogICAgICByZXR1cm4gc2VsZgogIH0KCiAgLy8vIENhbGwgdGhpcyB0byB3YWl0IGZvciBhIHJlc3VsdC4gQmxvY2tpbmcuCiAgcHVibGljIGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19IHsKICAgIHZhciByZXR1cm5FcnJvciA6IHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PwogICAgdmFyIHJldHVybk1lc3NhZ2UgOiB7eyBtZXRob2R8b3V0cHV0IH19IQogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgZG8gewogICAgICB0cnkgcmVjZWl2ZSgpIHtyZXNwb25zZSwgZXJyb3IgaW4KICAgICAgICByZXR1cm5NZXNzYWdlID0gcmVzcG9uc2UKICAgICAgICByZXR1cm5FcnJvciA9IGVycm9yCiAgICAgICAgc2VtLnNpZ25hbCgpCiAgICAgIH0KICAgICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogICAgfQogICAgaWYgbGV0IHJldHVybkVycm9yID0gcmV0dXJuRXJyb3IgewogICAgICB0aHJvdyByZXR1cm5FcnJvcgogICAgfQogICAgcmV0dXJuIHJldHVybk1lc3NhZ2UKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gd2FpdCBmb3IgYSByZXN1bHQuIE5vbmJsb2NraW5nLgogIHB1YmxpYyBmdW5jIHJlY2VpdmUoY29tcGxldGlvbjpAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8pLT4oKSkgdGhyb3dzIHsKICAgIGRvIHsKICAgICAgdHJ5IGNhbGwucmVjZWl2ZU1lc3NhZ2UoKSB7KGRhdGEpIGluCiAgICAgICAgaWYgbGV0IGRhdGEgPSBkYXRhIHsKICAgICAgICAgIGlmIGxldCByZXR1cm5NZXNzYWdlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOmRhdGEpIHsKICAgICAgICAgICAgY29tcGxldGlvbihyZXR1cm5NZXNzYWdlLCBuaWwpCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uaW52YWxpZE1lc3NhZ2VSZWNlaXZlZCkKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGlvbihuaWwsIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19LmVuZE9mU3RyZWFtKQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBzZW5kIGVhY2ggbWVzc2FnZSBpbiB0aGUgcmVxdWVzdCBzdHJlYW0uCiAgcHVibGljIGZ1bmMgc2VuZChfIG1lc3NhZ2U6e3sgbWV0aG9kfGlucHV0IH19LCBlcnJvckhhbmRsZXI6QGVzY2FwaW5nIChFcnJvciktPigpKSB0aHJvd3MgewogICAgbGV0IG1lc3NhZ2VEYXRhID0gdHJ5IG1lc3NhZ2Uuc2VyaWFsaXplZERhdGEoKQogICAgdHJ5IGNhbGwuc2VuZE1lc3NhZ2UoZGF0YTptZXNzYWdlRGF0YSwgZXJyb3JIYW5kbGVyOmVycm9ySGFuZGxlcikKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gY2xvc2UgdGhlIHNlbmRpbmcgY29ubmVjdGlvbi4gQmxvY2tpbmcuCiAgcHVibGljIGZ1bmMgY2xvc2VTZW5kKCkgdGhyb3dzIHsKICAgIGxldCBzZW0gPSBEaXNwYXRjaFNlbWFwaG9yZSh2YWx1ZTogMCkKICAgIHRyeSBjbG9zZVNlbmQoKSB7CiAgICAgIHNlbS5zaWduYWwoKQogICAgfQogICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBjbG9zZSB0aGUgc2VuZGluZyBjb25uZWN0aW9uLiBOb25ibG9ja2luZy4KICBwdWJsaWMgZnVuYyBjbG9zZVNlbmQoY29tcGxldGlvbjpAZXNjYXBpbmcgKCktPigpKSB0aHJvd3MgewogICAgdHJ5IGNhbGwuY2xvc2UoKSB7CiAgICAgIGNvbXBsZXRpb24oKQogICAgfQogIH0KfQo="
  40. templates["client-call-clientstreaming.swift"] = "Ly8vIHt7IG1ldGhvZC5uYW1lIH19IChDbGllbnQgU3RyZWFtaW5nKQpwdWJsaWMgY2xhc3Mge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHByaXZhdGUgdmFyIGNhbGwgOiBDYWxsCgogIC8vLyBDcmVhdGUgYSBjYWxsLgogIGZpbGVwcml2YXRlIGluaXQoXyBjaGFubmVsOiBDaGFubmVsKSB7CiAgICBzZWxmLmNhbGwgPSBjaGFubmVsLm1ha2VDYWxsKCJ7eyAufHBhdGg6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSIpCiAgfQoKICAvLy8gQ2FsbCB0aGlzIHRvIHN0YXJ0IGEgY2FsbC4gTm9uYmxvY2tpbmcuCiAgZmlsZXByaXZhdGUgZnVuYyBzdGFydChtZXRhZGF0YTpNZXRhZGF0YSwgY29tcGxldGlvbjpAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIHRyeSBzZWxmLmNhbGwuc3RhcnQoLmNsaWVudFN0cmVhbWluZywgbWV0YWRhdGE6bWV0YWRhdGEsIGNvbXBsZXRpb246Y29tcGxldGlvbikKICAgICAgcmV0dXJuIHNlbGYKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gc2VuZCBlYWNoIG1lc3NhZ2UgaW4gdGhlIHJlcXVlc3Qgc3RyZWFtLiBOb25ibG9ja2luZy4KICBwdWJsaWMgZnVuYyBzZW5kKF8gbWVzc2FnZTp7eyBtZXRob2R8aW5wdXQgfX0sIGVycm9ySGFuZGxlcjpAZXNjYXBpbmcgKEVycm9yKS0+KCkpIHRocm93cyB7CiAgICBsZXQgbWVzc2FnZURhdGEgPSB0cnkgbWVzc2FnZS5zZXJpYWxpemVkRGF0YSgpCiAgICB0cnkgY2FsbC5zZW5kTWVzc2FnZShkYXRhOm1lc3NhZ2VEYXRhLCBlcnJvckhhbmRsZXI6ZXJyb3JIYW5kbGVyKQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgd2FpdCBmb3IgYSByZXNwb25zZS4gQmxvY2tpbmcuCiAgcHVibGljIGZ1bmMgY2xvc2VBbmRSZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0gewogICAgdmFyIHJldHVybkVycm9yIDoge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0/CiAgICB2YXIgcmV0dXJuUmVzcG9uc2UgOiB7eyBtZXRob2R8b3V0cHV0IH19IQogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgZG8gewogICAgICB0cnkgY2xvc2VBbmRSZWNlaXZlKCkge3Jlc3BvbnNlLCBlcnJvciBpbgogICAgICAgIHJldHVyblJlc3BvbnNlID0gcmVzcG9uc2UKICAgICAgICByZXR1cm5FcnJvciA9IGVycm9yCiAgICAgICAgc2VtLnNpZ25hbCgpCiAgICAgIH0KICAgICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgIHRocm93IGVycm9yCiAgICB9CiAgICBpZiBsZXQgcmV0dXJuRXJyb3IgPSByZXR1cm5FcnJvciB7CiAgICAgIHRocm93IHJldHVybkVycm9yCiAgICB9CiAgICByZXR1cm4gcmV0dXJuUmVzcG9uc2UKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UuIE5vbmJsb2NraW5nLgogIHB1YmxpYyBmdW5jIGNsb3NlQW5kUmVjZWl2ZShjb21wbGV0aW9uOkBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PyktPigpKQogICAgdGhyb3dzIHsKICAgICAgZG8gewogICAgICAgIHRyeSBjYWxsLnJlY2VpdmVNZXNzYWdlKCkgeyhyZXNwb25zZURhdGEpIGluCiAgICAgICAgICBpZiBsZXQgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLAogICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSB0cnk/IHt7IG1ldGhvZHxvdXRwdXQgfX0oc2VyaWFsaXplZERhdGE6cmVzcG9uc2VEYXRhKSB7CiAgICAgICAgICAgIGNvbXBsZXRpb24ocmVzcG9uc2UsIG5pbCkKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbXBsZXRpb24obmlsLCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fS5pbnZhbGlkTWVzc2FnZVJlY2VpdmVkKQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0cnkgY2FsbC5jbG9zZShjb21wbGV0aW9uOnt9KQogICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICB0aHJvdyBlcnJvcgogICAgICB9CiAgfQp9Cg=="
  41. templates["client-call-serverstreaming.swift"] = "Ly8vIHt7IG1ldGhvZC5uYW1lIH19IChTZXJ2ZXIgU3RyZWFtaW5nKQpwdWJsaWMgY2xhc3Mge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHByaXZhdGUgdmFyIGNhbGwgOiBDYWxsCgogIC8vLyBDcmVhdGUgYSBjYWxsLgogIGZpbGVwcml2YXRlIGluaXQoXyBjaGFubmVsOiBDaGFubmVsKSB7CiAgICBzZWxmLmNhbGwgPSBjaGFubmVsLm1ha2VDYWxsKCJ7eyAufHBhdGg6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSIpCiAgfQoKICAvLy8gQ2FsbCB0aGlzIG9uY2Ugd2l0aCB0aGUgbWVzc2FnZSB0byBzZW5kLiBOb25ibG9ja2luZy4KICBmaWxlcHJpdmF0ZSBmdW5jIHN0YXJ0KHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246IEBlc2NhcGluZyAoQ2FsbFJlc3VsdCkgLT4gKCkpCiAgICB0aHJvd3MgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICBsZXQgcmVxdWVzdERhdGEgPSB0cnkgcmVxdWVzdC5zZXJpYWxpemVkRGF0YSgpCiAgICAgIHRyeSBjYWxsLnN0YXJ0KC5zZXJ2ZXJTdHJlYW1pbmcsCiAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOm1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOnJlcXVlc3REYXRhLAogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgICAgIHJldHVybiBzZWxmCiAgfQoKICAvLy8gQ2FsbCB0aGlzIHRvIHdhaXQgZm9yIGEgcmVzdWx0LiBCbG9ja2luZy4KICBwdWJsaWMgZnVuYyByZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0gewogICAgdmFyIHJldHVybkVycm9yIDoge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0/CiAgICB2YXIgcmV0dXJuUmVzcG9uc2UgOiB7eyBtZXRob2R8b3V0cHV0IH19IQogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgZG8gewogICAgICB0cnkgcmVjZWl2ZSgpIHtyZXNwb25zZSwgZXJyb3IgaW4KICAgICAgICByZXR1cm5SZXNwb25zZSA9IHJlc3BvbnNlCiAgICAgICAgcmV0dXJuRXJyb3IgPSBlcnJvcgogICAgICAgIHNlbS5zaWduYWwoKQogICAgICB9CiAgICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIH0KICAgIGlmIGxldCByZXR1cm5FcnJvciA9IHJldHVybkVycm9yIHsKICAgICAgdGhyb3cgcmV0dXJuRXJyb3IKICAgIH0KICAgIHJldHVybiByZXR1cm5SZXNwb25zZQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byB3YWl0IGZvciBhIHJlc3VsdC4gTm9uYmxvY2tpbmcuCiAgcHVibGljIGZ1bmMgcmVjZWl2ZShjb21wbGV0aW9uOkBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PyktPigpKSB0aHJvd3MgewogICAgZG8gewogICAgICB0cnkgY2FsbC5yZWNlaXZlTWVzc2FnZSgpIHsocmVzcG9uc2VEYXRhKSBpbgogICAgICAgIGlmIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEgewogICAgICAgICAgaWYgbGV0IHJlc3BvbnNlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlc3BvbnNlRGF0YSkgewogICAgICAgICAgICBjb21wbGV0aW9uKHJlc3BvbnNlLCBuaWwpCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uaW52YWxpZE1lc3NhZ2VSZWNlaXZlZCkKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGlvbihuaWwsIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19LmVuZE9mU3RyZWFtKQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQo="
  42. templates["client-call-unary.swift"] = "Ly8vIHt7IG1ldGhvZC5uYW1lIH19IChVbmFyeSkKcHVibGljIGNsYXNzIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICBwcml2YXRlIHZhciBjYWxsIDogQ2FsbAoKICAvLy8gQ3JlYXRlIGEgY2FsbC4KICBmaWxlcHJpdmF0ZSBpbml0KF8gY2hhbm5lbDogQ2hhbm5lbCkgewogICAgc2VsZi5jYWxsID0gY2hhbm5lbC5tYWtlQ2FsbCgie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iKQogIH0KCiAgLy8vIFJ1biB0aGUgY2FsbC4gQmxvY2tzIHVudGlsIHRoZSByZXBseSBpcyByZWNlaXZlZC4KICBmaWxlcHJpdmF0ZSBmdW5jIHJ1bihyZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0sCiAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IE1ldGFkYXRhKSB0aHJvd3MgLT4ge3sgbWV0aG9kfG91dHB1dCB9fSB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB2YXIgcmV0dXJuQ2FsbFJlc3VsdCA6IENhbGxSZXN1bHQhCiAgICB2YXIgcmV0dXJuUmVzcG9uc2UgOiB7eyBtZXRob2R8b3V0cHV0IH19PwogICAgXyA9IHRyeSBzdGFydChyZXF1ZXN0OnJlcXVlc3QsIG1ldGFkYXRhOm1ldGFkYXRhKSB7cmVzcG9uc2UsIGNhbGxSZXN1bHQgaW4KICAgICAgcmV0dXJuUmVzcG9uc2UgPSByZXNwb25zZQogICAgICByZXR1cm5DYWxsUmVzdWx0ID0gY2FsbFJlc3VsdAogICAgICBzZW0uc2lnbmFsKCkKICAgIH0KICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIGlmIGxldCByZXR1cm5SZXNwb25zZSA9IHJldHVyblJlc3BvbnNlIHsKICAgICAgcmV0dXJuIHJldHVyblJlc3BvbnNlCiAgICB9IGVsc2UgewogICAgICB0aHJvdyB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fS5lcnJvcihjOiByZXR1cm5DYWxsUmVzdWx0KQogICAgfQogIH0KCiAgLy8vIFN0YXJ0IHRoZSBjYWxsLiBOb25ibG9ja2luZy4KICBmaWxlcHJpdmF0ZSBmdW5jIHN0YXJ0KHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246IEBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CgogICAgICBsZXQgcmVxdWVzdERhdGEgPSB0cnkgcmVxdWVzdC5zZXJpYWxpemVkRGF0YSgpCiAgICAgIHRyeSBjYWxsLnN0YXJ0KC51bmFyeSwKICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6bWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6cmVxdWVzdERhdGEpCiAgICAgIHsoY2FsbFJlc3VsdCkgaW4KICAgICAgICBpZiBsZXQgcmVzcG9uc2VEYXRhID0gY2FsbFJlc3VsdC5yZXN1bHREYXRhLAogICAgICAgICAgbGV0IHJlc3BvbnNlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlc3BvbnNlRGF0YSkgewogICAgICAgICAgY29tcGxldGlvbihyZXNwb25zZSwgY2FsbFJlc3VsdCkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGlvbihuaWwsIGNhbGxSZXN1bHQpCiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzZWxmCiAgfQp9Cg=="
  43. templates["client.pb.swift"] = "LyoKICogRE8gTk9UIEVESVQuCiAqCiAqIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLgogKiBTb3VyY2U6IHt7IGZpbGUubmFtZSB9fQogKgogKi8KCi8qCiAqCiAqIENvcHlyaWdodCAyMDE3LCBHb29nbGUgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBtZXQ6CiAqCiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogZGlzdHJpYnV0aW9uLgogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICovCgppbXBvcnQgRm91bmRhdGlvbgppbXBvcnQgRGlzcGF0Y2gKaW1wb3J0IGdSUEMKLy8teyUgZm9yIHNlcnZpY2UgaW4gZmlsZS5zZXJ2aWNlICV9CgovLy8gVHlwZSBmb3IgZXJyb3JzIHRocm93biBmcm9tIGdlbmVyYXRlZCBjbGllbnQgY29kZS4KcHVibGljIGVudW0ge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0gOiBFcnJvciB7CiAgY2FzZSBlbmRPZlN0cmVhbQogIGNhc2UgaW52YWxpZE1lc3NhZ2VSZWNlaXZlZAogIGNhc2UgZXJyb3IoYzogQ2FsbFJlc3VsdCkKfQoKLy8teyUgZm9yIG1ldGhvZCBpbiBzZXJ2aWNlLm1ldGhvZCAlfQovLy17JSBpZiBub3QgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbm90IG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAiY2xpZW50LWNhbGwtdW5hcnkuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGlmIG5vdCBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgImNsaWVudC1jYWxsLXNlcnZlcnN0cmVhbWluZy5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgaWYgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbm90IG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAiY2xpZW50LWNhbGwtY2xpZW50c3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgImNsaWVudC1jYWxsLWJpZGlzdHJlYW1pbmcuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGVuZGZvciAlfQovLy8gQ2FsbCBtZXRob2RzIG9mIHRoaXMgY2xhc3MgdG8gbWFrZSBBUEkgY2FsbHMuCnB1YmxpYyBjbGFzcyB7eyAufHNlcnZpY2VjbGFzczpmaWxlLHNlcnZpY2UgfX0gewogIHByaXZhdGUgdmFyIGNoYW5uZWw6IENoYW5uZWwKCiAgLy8vIFRoaXMgbWV0YWRhdGEgd2lsbCBiZSBzZW50IHdpdGggYWxsIHJlcXVlc3RzLgogIHB1YmxpYyB2YXIgbWV0YWRhdGEgOiBNZXRhZGF0YQoKICAvLy8gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgdGhlIHNlcnZpY2UgaG9zdCBuYW1lIHRvIGJlIG92ZXJyaWRkZW4uCiAgLy8vIEZvciBleGFtcGxlLCBpdCBjYW4gYmUgdXNlZCB0byBtYWtlIGNhbGxzIHRvICJsb2NhbGhvc3Q6ODA4MCIKICAvLy8gYXBwZWFyIHRvIGJlIHRvICJleGFtcGxlLmNvbSIuCiAgcHVibGljIHZhciBob3N0IDogU3RyaW5nIHsKICAgIGdldCB7CiAgICAgIHJldHVybiBzZWxmLmNoYW5uZWwuaG9zdAogICAgfQogICAgc2V0IHsKICAgICAgc2VsZi5jaGFubmVsLmhvc3QgPSBuZXdWYWx1ZQogICAgfQogIH0KCiAgLy8vIENyZWF0ZSBhIGNsaWVudCB0aGF0IG1ha2VzIGluc2VjdXJlIGNvbm5lY3Rpb25zLgogIHB1YmxpYyBpbml0KGFkZHJlc3M6IFN0cmluZykgewogICAgZ1JQQy5pbml0aWFsaXplKCkKICAgIGNoYW5uZWwgPSBDaGFubmVsKGFkZHJlc3M6YWRkcmVzcykKICAgIG1ldGFkYXRhID0gTWV0YWRhdGEoKQogIH0KCiAgLy8vIENyZWF0ZSBhIGNsaWVudCB0aGF0IG1ha2VzIHNlY3VyZSBjb25uZWN0aW9ucy4KICBwdWJsaWMgaW5pdChhZGRyZXNzOiBTdHJpbmcsIGNlcnRpZmljYXRlczogU3RyaW5nPywgaG9zdDogU3RyaW5nPykgewogICAgZ1JQQy5pbml0aWFsaXplKCkKICAgIGNoYW5uZWwgPSBDaGFubmVsKGFkZHJlc3M6YWRkcmVzcywgY2VydGlmaWNhdGVzOmNlcnRpZmljYXRlcywgaG9zdDpob3N0KQogICAgbWV0YWRhdGEgPSBNZXRhZGF0YSgpCiAgfQoKICAvLy17JSBmb3IgbWV0aG9kIGluIHNlcnZpY2UubWV0aG9kICV9CiAgLy8teyUgaWYgbm90IG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG5vdCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9CiAgLy8vIFN5bmNocm9ub3VzLiBVbmFyeS4KICBwdWJsaWMgZnVuYyB7eyBtZXRob2QubmFtZXxsb3dlcmNhc2UgfX0oXyByZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0pCiAgICB0aHJvd3MKICAgIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0gewogICAgICByZXR1cm4gdHJ5IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KGNoYW5uZWwpLnJ1bihyZXF1ZXN0OnJlcXVlc3QsIG1ldGFkYXRhOm1ldGFkYXRhKQogIH0KICAvLy8gQXN5bmNocm9ub3VzLiBVbmFyeS4KICBwdWJsaWMgZnVuYyB7eyBtZXRob2QubmFtZXxsb3dlcmNhc2UgfX0oXyByZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0sCiAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246IEBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cwogICAgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICByZXR1cm4gdHJ5IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KGNoYW5uZWwpLnN0YXJ0KHJlcXVlc3Q6cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOm1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbjpjb21wbGV0aW9uKQogIH0KICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG5vdCBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9CiAgLy8vIEFzeW5jaHJvbm91cy4gU2VydmVyLXN0cmVhbWluZy4KICAvLy8gU2VuZCB0aGUgaW5pdGlhbCBtZXNzYWdlLgogIC8vLyBVc2UgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIGdldCBzdHJlYW1lZCByZXNwb25zZXMuCiAgcHVibGljIGZ1bmMge3sgbWV0aG9kLm5hbWV8bG93ZXJjYXNlIH19KF8gcmVxdWVzdDoge3sgbWV0aG9kfGlucHV0IH19LCBjb21wbGV0aW9uOiBAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cwogICAgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICByZXR1cm4gdHJ5IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KGNoYW5uZWwpLnN0YXJ0KHJlcXVlc3Q6cmVxdWVzdCwgbWV0YWRhdGE6bWV0YWRhdGEsIGNvbXBsZXRpb246Y29tcGxldGlvbikKICB9CiAgLy8teyUgZW5kaWYgJX0KICAvLy17JSBpZiBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBub3QgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQogIC8vLyBBc3luY2hyb25vdXMuIENsaWVudC1zdHJlYW1pbmcuCiAgLy8vIFVzZSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBvYmplY3QgdG8gc3RyZWFtIG1lc3NhZ2VzIGFuZAogIC8vLyB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgd2FpdCBmb3IgYSBmaW5hbCByZXNwb25zZS4KICBwdWJsaWMgZnVuYyB7eyBtZXRob2QubmFtZXxsb3dlcmNhc2UgfX0oY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MKICAgIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgcmV0dXJuIHRyeSB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fShjaGFubmVsKS5zdGFydChtZXRhZGF0YTptZXRhZGF0YSwgY29tcGxldGlvbjpjb21wbGV0aW9uKQogIH0KICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KICAvLy8gQXN5bmNocm9ub3VzLiBCaWRpcmVjdGlvbmFsLXN0cmVhbWluZy4KICAvLy8gVXNlIG1ldGhvZHMgb24gdGhlIHJldHVybmVkIG9iamVjdCB0byBzdHJlYW0gbWVzc2FnZXMsCiAgLy8vIHRvIHdhaXQgZm9yIHJlcGxpZXMsIGFuZCB0byBjbG9zZSB0aGUgY29ubmVjdGlvbi4KICBwdWJsaWMgZnVuYyB7eyBtZXRob2QubmFtZXxsb3dlcmNhc2UgfX0oY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MKICAgIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgcmV0dXJuIHRyeSB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fShjaGFubmVsKS5zdGFydChtZXRhZGF0YTptZXRhZGF0YSwgY29tcGxldGlvbjpjb21wbGV0aW9uKQogIH0KICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGVuZGZvciAlfQp9Ci8vLXslIGVuZGZvciAlfQo="
  44. templates["server-session-bidistreaming.swift"] = "Ly8ge3sgbWV0aG9kLm5hbWUgfX0gKEJpZGlyZWN0aW9uYWwgU3RyZWFtaW5nKQpwdWJsaWMgY2xhc3Mge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXIgOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fQoKICAvLy8gQ3JlYXRlIGEgc2Vzc2lvbi4KICBmaWxlcHJpdmF0ZSBpbml0KGhhbmRsZXI6Z1JQQy5IYW5kbGVyLCBwcm92aWRlcjoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc3VwZXIuaW5pdChoYW5kbGVyOmhhbmRsZXIpCiAgfQoKICAvLy8gUmVjZWl2ZSBhIG1lc3NhZ2UuIEJsb2NrcyB1bnRpbCBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgb3IgdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCiAgcHVibGljIGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8aW5wdXQgfX0gewogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgdmFyIHJlcXVlc3RNZXNzYWdlIDoge3sgbWV0aG9kfGlucHV0IH19PwogICAgdHJ5IHNlbGYuaGFuZGxlci5yZWNlaXZlTWVzc2FnZSgpIHsocmVxdWVzdERhdGEpIGluCiAgICAgIGlmIGxldCByZXF1ZXN0RGF0YSA9IHJlcXVlc3REYXRhIHsKICAgICAgICBkbyB7CiAgICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IHRyeSB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgICBwcmludCgiZXJyb3IgXChlcnJvcikiKQogICAgICAgIH0KICAgICAgfQogICAgICBzZW0uc2lnbmFsKCkKICAgIH0KICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIGlmIGxldCByZXF1ZXN0TWVzc2FnZSA9IHJlcXVlc3RNZXNzYWdlIHsKICAgICAgcmV0dXJuIHJlcXVlc3RNZXNzYWdlCiAgICB9IGVsc2UgewogICAgICB0aHJvdyB7eyAufHNlcnZlcmVycm9yOmZpbGUsc2VydmljZSB9fS5lbmRPZlN0cmVhbQogICAgfQogIH0KCiAgLy8vIFNlbmQgYSBtZXNzYWdlLiBOb25ibG9ja2luZy4KICBwdWJsaWMgZnVuYyBzZW5kKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0pIHRocm93cyB7CiAgICB0cnkgaGFuZGxlci5zZW5kUmVzcG9uc2UobWVzc2FnZTpyZXNwb25zZS5zZXJpYWxpemVkRGF0YSgpKSB7fQogIH0KCiAgLy8vIENsb3NlIGEgY29ubmVjdGlvbi4gQmxvY2tzIHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KICBwdWJsaWMgZnVuYyBjbG9zZSgpIHRocm93cyB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB0cnkgc2VsZi5oYW5kbGVyLnNlbmRTdGF0dXMoc3RhdHVzQ29kZTpzZWxmLnN0YXR1c0NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpzZWxmLnRyYWlsaW5nTWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbS5zaWduYWwoKQogICAgfQogICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogIH0KCiAgLy8vIFJ1biB0aGUgc2Vzc2lvbi4gSW50ZXJuYWwuCiAgZmlsZXByaXZhdGUgZnVuYyBydW4ocXVldWU6RGlzcGF0Y2hRdWV1ZSkgdGhyb3dzIHsKICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZE1ldGFkYXRhKGluaXRpYWxNZXRhZGF0YTppbml0aWFsTWV0YWRhdGEpIHsKICAgICAgcXVldWUuYXN5bmMgewogICAgICAgIGRvIHsKICAgICAgICAgIHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShzZXNzaW9uOnNlbGYpCiAgICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgICBwcmludCgiZXJyb3IgXChlcnJvcikiKQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQo="
  45. templates["server-session-clientstreaming.swift"] = "Ly8ge3sgbWV0aG9kLm5hbWUgfX0gKENsaWVudCBTdHJlYW1pbmcpCnB1YmxpYyBjbGFzcyB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSA6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uIHsKICBwcml2YXRlIHZhciBwcm92aWRlciA6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19CgogIC8vLyBDcmVhdGUgYSBzZXNzaW9uLgogIGZpbGVwcml2YXRlIGluaXQoaGFuZGxlcjpnUlBDLkhhbmRsZXIsIHByb3ZpZGVyOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSkgewogICAgc2VsZi5wcm92aWRlciA9IHByb3ZpZGVyCiAgICBzdXBlci5pbml0KGhhbmRsZXI6aGFuZGxlcikKICB9CgogIC8vLyBSZWNlaXZlIGEgbWVzc2FnZS4gQmxvY2tzIHVudGlsIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBvciB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KICBwdWJsaWMgZnVuYyByZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxpbnB1dCB9fSB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB2YXIgcmVxdWVzdE1lc3NhZ2UgOiB7eyBtZXRob2R8aW5wdXQgfX0/CiAgICB0cnkgc2VsZi5oYW5kbGVyLnJlY2VpdmVNZXNzYWdlKCkgeyhyZXF1ZXN0RGF0YSkgaW4KICAgICAgaWYgbGV0IHJlcXVlc3REYXRhID0gcmVxdWVzdERhdGEgewogICAgICAgIHJlcXVlc3RNZXNzYWdlID0gdHJ5PyB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgIH0KICAgICAgc2VtLnNpZ25hbCgpCiAgICB9CiAgICBfID0gc2VtLndhaXQodGltZW91dDogRGlzcGF0Y2hUaW1lLmRpc3RhbnRGdXR1cmUpCiAgICBpZiByZXF1ZXN0TWVzc2FnZSA9PSBuaWwgewogICAgICB0aHJvdyB7eyAufHNlcnZlcmVycm9yOmZpbGUsc2VydmljZSB9fS5lbmRPZlN0cmVhbQogICAgfQogICAgcmV0dXJuIHJlcXVlc3RNZXNzYWdlIQogIH0KCiAgLy8vIFNlbmQgYSByZXNwb25zZSBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCiAgcHVibGljIGZ1bmMgc2VuZEFuZENsb3NlKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0pIHRocm93cyB7CiAgICB0cnkgc2VsZi5oYW5kbGVyLnNlbmRSZXNwb25zZShtZXNzYWdlOnJlc3BvbnNlLnNlcmlhbGl6ZWREYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOnNlbGYuc3RhdHVzQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2U6c2VsZi5zdGF0dXNNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpzZWxmLnRyYWlsaW5nTWV0YWRhdGEpCiAgfQoKICAvLy8gUnVuIHRoZSBzZXNzaW9uLiBJbnRlcm5hbC4KICBmaWxlcHJpdmF0ZSBmdW5jIHJ1bihxdWV1ZTpEaXNwYXRjaFF1ZXVlKSB0aHJvd3MgewogICAgdHJ5IHNlbGYuaGFuZGxlci5zZW5kTWV0YWRhdGEoaW5pdGlhbE1ldGFkYXRhOmluaXRpYWxNZXRhZGF0YSkgewogICAgICBxdWV1ZS5hc3luYyB7CiAgICAgICAgZG8gewogICAgICAgICAgdHJ5IHNlbGYucHJvdmlkZXIue3sgbWV0aG9kLm5hbWV8bG93ZXJjYXNlIH19KHNlc3Npb246c2VsZikKICAgICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICAgIHByaW50KCJlcnJvciBcKGVycm9yKSIpCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9Cg=="
  46. templates["server-session-serverstreaming.swift"] = "Ly8ge3sgbWV0aG9kLm5hbWUgfX0gKFNlcnZlciBTdHJlYW1pbmcpCnB1YmxpYyBjbGFzcyB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSA6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uIHsKICBwcml2YXRlIHZhciBwcm92aWRlciA6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19CgogIC8vLyBDcmVhdGUgYSBzZXNzaW9uLgogIGZpbGVwcml2YXRlIGluaXQoaGFuZGxlcjpnUlBDLkhhbmRsZXIsIHByb3ZpZGVyOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSkgewogICAgc2VsZi5wcm92aWRlciA9IHByb3ZpZGVyCiAgICBzdXBlci5pbml0KGhhbmRsZXI6aGFuZGxlcikKICB9CgogIC8vLyBTZW5kIGEgbWVzc2FnZS4gTm9uYmxvY2tpbmcuCiAgcHVibGljIGZ1bmMgc2VuZChfIHJlc3BvbnNlOiB7eyBtZXRob2R8b3V0cHV0IH19KSB0aHJvd3MgewogICAgdHJ5IGhhbmRsZXIuc2VuZFJlc3BvbnNlKG1lc3NhZ2U6cmVzcG9uc2Uuc2VyaWFsaXplZERhdGEoKSkge30KICB9CgogIC8vLyBSdW4gdGhlIHNlc3Npb24uIEludGVybmFsLgogIGZpbGVwcml2YXRlIGZ1bmMgcnVuKHF1ZXVlOkRpc3BhdGNoUXVldWUpIHRocm93cyB7CiAgICB0cnkgc2VsZi5oYW5kbGVyLnJlY2VpdmVNZXNzYWdlKGluaXRpYWxNZXRhZGF0YTppbml0aWFsTWV0YWRhdGEpIHsocmVxdWVzdERhdGEpIGluCiAgICAgIGlmIGxldCByZXF1ZXN0RGF0YSA9IHJlcXVlc3REYXRhIHsKICAgICAgICBkbyB7CiAgICAgICAgICBsZXQgcmVxdWVzdE1lc3NhZ2UgPSB0cnkge3sgbWV0aG9kfGlucHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlcXVlc3REYXRhKQogICAgICAgICAgLy8gdG8ga2VlcCBwcm92aWRlcnMgZnJvbSBibG9ja2luZyB0aGUgc2VydmVyIHRocmVhZCwKICAgICAgICAgIC8vIHdlIGRpc3BhdGNoIHRoZW0gdG8gYW5vdGhlciBxdWV1ZS4KICAgICAgICAgIHF1ZXVlLmFzeW5jIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShyZXF1ZXN0OnJlcXVlc3RNZXNzYWdlLCBzZXNzaW9uOiBzZWxmKQogICAgICAgICAgICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZFN0YXR1cyhzdGF0dXNDb2RlOnNlbGYuc3RhdHVzQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nTWV0YWRhdGE6c2VsZi50cmFpbGluZ01ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOnt9KQogICAgICAgICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICAgICAgICBwcmludCgiZXJyb3I6IFwoZXJyb3IpIikKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgICAgcHJpbnQoImVycm9yOiBcKGVycm9yKSIpCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9Cg=="
  47. templates["server-session-unary.swift"] = "Ly8ge3sgbWV0aG9kLm5hbWUgfX0gKFVuYXJ5KQpwdWJsaWMgY2xhc3Mge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXIgOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fQoKICAvLy8gQ3JlYXRlIGEgc2Vzc2lvbi4KICBmaWxlcHJpdmF0ZSBpbml0KGhhbmRsZXI6Z1JQQy5IYW5kbGVyLCBwcm92aWRlcjoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc3VwZXIuaW5pdChoYW5kbGVyOmhhbmRsZXIpCiAgfQoKICAvLy8gUnVuIHRoZSBzZXNzaW9uLiBJbnRlcm5hbC4KICBmaWxlcHJpdmF0ZSBmdW5jIHJ1bihxdWV1ZTpEaXNwYXRjaFF1ZXVlKSB0aHJvd3MgewogICAgdHJ5IGhhbmRsZXIucmVjZWl2ZU1lc3NhZ2UoaW5pdGlhbE1ldGFkYXRhOmluaXRpYWxNZXRhZGF0YSkgeyhyZXF1ZXN0RGF0YSkgaW4KICAgICAgaWYgbGV0IHJlcXVlc3REYXRhID0gcmVxdWVzdERhdGEgewogICAgICAgIGxldCByZXF1ZXN0TWVzc2FnZSA9IHRyeSB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgICAgbGV0IHJlcGx5TWVzc2FnZSA9IHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShyZXF1ZXN0OnJlcXVlc3RNZXNzYWdlLCBzZXNzaW9uOiBzZWxmKQogICAgICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZFJlc3BvbnNlKG1lc3NhZ2U6cmVwbHlNZXNzYWdlLnNlcmlhbGl6ZWREYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTpzZWxmLnN0YXR1c0NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpzZWxmLnRyYWlsaW5nTWV0YWRhdGEpCiAgICAgIH0KICAgIH0KICB9Cn0K"
  48. templates["server.pb.swift"] = "LyoKICogRE8gTk9UIEVESVQuCiAqCiAqIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLgogKiBTb3VyY2U6IHt7IGZpbGUubmFtZSB9fQogKgogKi8KCi8qCiAqCiAqIENvcHlyaWdodCAyMDE3LCBHb29nbGUgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBtZXQ6CiAqCiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogZGlzdHJpYnV0aW9uLgogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICovCgppbXBvcnQgRm91bmRhdGlvbgppbXBvcnQgRGlzcGF0Y2gKaW1wb3J0IGdSUEMKLy8teyUgZm9yIHNlcnZpY2UgaW4gZmlsZS5zZXJ2aWNlICV9CgovLy8gVHlwZSBmb3IgZXJyb3JzIHRocm93biBmcm9tIGdlbmVyYXRlZCBzZXJ2ZXIgY29kZS4KcHVibGljIGVudW0ge3sgLnxzZXJ2ZXJlcnJvcjpmaWxlLHNlcnZpY2UgfX0gOiBFcnJvciB7CiAgY2FzZSBlbmRPZlN0cmVhbQp9CgovLy8gVG8gYnVpbGQgYSBzZXJ2ZXIsIGltcGxlbWVudCBhIGNsYXNzIHRoYXQgY29uZm9ybXMgdG8gdGhpcyBwcm90b2NvbC4KcHVibGljIHByb3RvY29sIHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19IHsKICAvLy17JSBmb3IgbWV0aG9kIGluIHNlcnZpY2UubWV0aG9kICV9CiAgLy8teyUgaWYgbm90IG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG5vdCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9CiAgZnVuYyB7eyBtZXRob2QubmFtZXxsb3dlcmNhc2UgfX0ocmVxdWVzdCA6IHt7IG1ldGhvZHxpbnB1dCB9fSwgc2Vzc2lvbiA6IHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KSB0aHJvd3MgLT4ge3sgbWV0aG9kfG91dHB1dCB9fQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbm90IG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KICBmdW5jIHt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShyZXF1ZXN0IDoge3sgbWV0aG9kfGlucHV0IH19LCBzZXNzaW9uIDoge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0pIHRocm93cwogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbm90IG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KICBmdW5jIHt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShzZXNzaW9uIDoge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0pIHRocm93cwogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQogIGZ1bmMge3sgbWV0aG9kLm5hbWV8bG93ZXJjYXNlIH19KHNlc3Npb24gOiB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSkgdGhyb3dzCiAgLy8teyUgZW5kaWYgJX0KICAvLy17JSBlbmRmb3IgJX0KfQoKLy8vIENvbW1vbiBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBpbiBlYWNoIHNlcnZpY2Ugc2Vzc2lvbi4KcHVibGljIGNsYXNzIHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uIHsKICBmaWxlcHJpdmF0ZSB2YXIgaGFuZGxlciA6IGdSUEMuSGFuZGxlcgogIHB1YmxpYyB2YXIgcmVxdWVzdE1ldGFkYXRhIDogTWV0YWRhdGEgeyByZXR1cm4gaGFuZGxlci5yZXF1ZXN0TWV0YWRhdGEgfQoKICBwdWJsaWMgdmFyIHN0YXR1c0NvZGUgOiBJbnQgPSAwCiAgcHVibGljIHZhciBzdGF0dXNNZXNzYWdlIDogU3RyaW5nID0gIk9LIgogIHB1YmxpYyB2YXIgaW5pdGlhbE1ldGFkYXRhIDogTWV0YWRhdGEgPSBNZXRhZGF0YSgpCiAgcHVibGljIHZhciB0cmFpbGluZ01ldGFkYXRhIDogTWV0YWRhdGEgPSBNZXRhZGF0YSgpCgogIGZpbGVwcml2YXRlIGluaXQoaGFuZGxlcjpnUlBDLkhhbmRsZXIpIHsKICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKICB9Cn0KCi8vLXslIGZvciBtZXRob2QgaW4gc2VydmljZS5tZXRob2QgJX0KLy8teyUgaWYgbm90IG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG5vdCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgInNlcnZlci1zZXNzaW9uLXVuYXJ5LnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBub3QgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQovLy17JSBpbmNsdWRlICJzZXJ2ZXItc2Vzc2lvbi1zZXJ2ZXJzdHJlYW1pbmcuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGlmIG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG5vdCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgInNlcnZlci1zZXNzaW9uLWNsaWVudHN0cmVhbWluZy5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgaWYgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQovLy17JSBpbmNsdWRlICJzZXJ2ZXItc2Vzc2lvbi1iaWRpc3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBlbmRmb3IgJX0KCi8vLyBNYWluIHNlcnZlciBmb3IgZ2VuZXJhdGVkIHNlcnZpY2UKcHVibGljIGNsYXNzIHt7IC58c2VydmVyOmZpbGUsc2VydmljZSB9fSB7CiAgcHJpdmF0ZSB2YXIgYWRkcmVzczogU3RyaW5nCiAgcHJpdmF0ZSB2YXIgc2VydmVyOiBnUlBDLlNlcnZlcgogIHByaXZhdGUgdmFyIHByb3ZpZGVyOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fT8KCiAgLy8vIENyZWF0ZSBhIHNlcnZlciB0aGF0IGFjY2VwdHMgaW5zZWN1cmUgY29ubmVjdGlvbnMuCiAgcHVibGljIGluaXQoYWRkcmVzczpTdHJpbmcsCiAgICAgICAgICAgICAgcHJvdmlkZXI6e3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIGdSUEMuaW5pdGlhbGl6ZSgpCiAgICBzZWxmLmFkZHJlc3MgPSBhZGRyZXNzCiAgICBzZWxmLnByb3ZpZGVyID0gcHJvdmlkZXIKICAgIHNlbGYuc2VydmVyID0gZ1JQQy5TZXJ2ZXIoYWRkcmVzczphZGRyZXNzKQogIH0KCiAgLy8vIENyZWF0ZSBhIHNlcnZlciB0aGF0IGFjY2VwdHMgc2VjdXJlIGNvbm5lY3Rpb25zLgogIHB1YmxpYyBpbml0PyhhZGRyZXNzOlN0cmluZywKICAgICAgICAgICAgICAgY2VydGlmaWNhdGVVUkw6VVJMLAogICAgICAgICAgICAgICBrZXlVUkw6VVJMLAogICAgICAgICAgICAgICBwcm92aWRlcjp7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSkgewogICAgZ1JQQy5pbml0aWFsaXplKCkKICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgZ3VhcmQKICAgICAgbGV0IGNlcnRpZmljYXRlID0gdHJ5PyBTdHJpbmcoY29udGVudHNPZjogY2VydGlmaWNhdGVVUkwsIGVuY29kaW5nOiAudXRmOCksCiAgICAgIGxldCBrZXkgPSB0cnk/IFN0cmluZyhjb250ZW50c09mOiBrZXlVUkwsIGVuY29kaW5nOiAudXRmOCkKICAgICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIG5pbAogICAgfQogICAgc2VsZi5zZXJ2ZXIgPSBnUlBDLlNlcnZlcihhZGRyZXNzOmFkZHJlc3MsIGtleTprZXksIGNlcnRzOmNlcnRpZmljYXRlKQogIH0KCiAgLy8vIFN0YXJ0IHRoZSBzZXJ2ZXIuCiAgcHVibGljIGZ1bmMgc3RhcnQocXVldWU6RGlzcGF0Y2hRdWV1ZSA9IERpc3BhdGNoUXVldWUuZ2xvYmFsKCkpIHsKICAgIGd1YXJkIGxldCBwcm92aWRlciA9IHNlbGYucHJvdmlkZXIgZWxzZSB7CiAgICAgIGFzc2VydChmYWxzZSkgLy8gdGhlIHNlcnZlciByZXF1aXJlcyBhIHByb3ZpZGVyCiAgICB9CiAgICBzZXJ2ZXIucnVuIHsoaGFuZGxlcikgaW4KICAgICAgcHJpbnQoIlNlcnZlciByZWNlaXZlZCByZXF1ZXN0IHRvICIgKyBoYW5kbGVyLmhvc3QKICAgICAgICArICIgY2FsbGluZyAiICsgaGFuZGxlci5tZXRob2QKICAgICAgICArICIgZnJvbSAiICsgaGFuZGxlci5jYWxsZXIKICAgICAgICArICIgd2l0aCAiICsgU3RyaW5nKGRlc2NyaWJpbmc6aGFuZGxlci5yZXF1ZXN0TWV0YWRhdGEpICkKCiAgICAgIGRvIHsKICAgICAgICBzd2l0Y2ggaGFuZGxlci5tZXRob2QgewogICAgICAgIC8vLXslIGZvciBtZXRob2QgaW4gc2VydmljZS5tZXRob2QgJX0KICAgICAgICBjYXNlICJ7eyAufHBhdGg6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSI6CiAgICAgICAgICB0cnkge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0oaGFuZGxlcjpoYW5kbGVyLCBwcm92aWRlcjpwcm92aWRlcikucnVuKHF1ZXVlOnF1ZXVlKQogICAgICAgIC8vLXslIGVuZGZvciAlfQogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhayAvLyBoYW5kbGUgdW5rbm93biByZXF1ZXN0cwogICAgICAgIH0KICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgcHJpbnQoIlNlcnZlciBlcnJvcjogXChlcnJvcikiKQogICAgICB9CiAgICB9CiAgfQp9Ci8vLXslIGVuZGZvciAlfQo="
  49. return templates
  50. }