[Typescript Playground Demo](https://www.typescriptlang.org/play/?strict=false&target=99#code/GYVwdgxgLglg9mABAWwIYGsCmARTE4BOqUhAPACqKYAeUmYAJgM6IBCANnBOgHQDKEIlAgALcgE8ADpgA0APgAUUKZgBcicgEp15TMkntimAKJgA5jDCYKcgNoAiGnhB17AXUQBvAFCI-iAkwoEAIkUEhYBAUAIxAYdgZMAgB5Aj4oAkszJhlEHnzUAmzNL19-csDg0MRw6HgwJUKzINz8MDpaEp9ynv9KkKQoJqCAbjLegF9xxCmp7zamKADMSUI6AkQAXhQMHDxCYkIFe0DVgnX7TTGFpfxkNEYtnaxcfCEj+zuHhkux+cMmCxjNRUPp2JhSuUAG6odggCHbAAsf3KAAFTmskgADACCDAYiAAJJ5PMppOp7GAQMhokl7LlEsBUCB2FB1ABmCYTRAkImeSnU2kEewTLHTJgwMGYABKK0xBAU1HUVJpSVy4mVgqSXWmFSCA0Q1EQAGpEOIxuU5miMeckgoFJZFqhILIiSVNnIibj8XzSSoKSqhfTEIzmaz1I6hi6eDC4ZguTy4HyBarhaLNNMbesAOowKAiADCsPY0VQ3EVmtT6srQp1vT8-WqRtN5umVv8qK+zoYWIAEph2Jxk4tMuYRWLyhKpQW4Pdu0oaGzECOsjq2945mBQZgmJIyxCAKqwdh58SQ-w0M5LMkQiTSBgAWSCIjgDFeBxIBFIuv85BEMByH8-BxIoWEXehmEQZ1xFsNwZCAxBZSqMB4PrRAADEkHAxgWAUfIeCaJh1BA4otk9JCBmmT1tkaIognUTDWgQDolwLAEmCffNX3fd4CBndpFwof8cgwsA5HdT1MJRC9qCvHkVEQTiXwYISANyEiwNoCCWGg2Dcgo0JqMQJRhJ0YTcnwwjiNAiTEP1UJpL8S81nk6QNFQMxmgYXQwSMCgNKoLScKgsAYLgjQDLEp4FBXcwiI0PQDCMdJR2yECiHECyClAnQNNs8hIrGTdt13fcMKIZBMAAd0IdBzyc2SXIgdjEGBOgwAlBAAEkOqjCAIU8GZpmc85XIhDguHQI94lPJ5BoYalkA1HkCHhIbisq0r+sQEjqXoJZuhkuSb0QAQhFEO8EUQFMg0QAAfa7YrMex7uu50zHBexHMC46FPIOBLooQL2sgs7iAulQjIQyhsMgm66Ve+x3s+xAAH5EEDJJEFUaHge0x6MiyF70ae7GEKsKEkm+kbrwUsHhELBBgBgMwgdhlh6Yhtztk5sRIaeSgHsGm8dAZTAmRZKBUZ0AGVBsGZqca0aTtlZA4Ep6b2DZoLIN0twjJhnWWFsfDLGALHpTx4K9dydCKuq2qeAm7hNdPDx0ctnRvoAegAKl93VfY0IgOuAQhkEQJLLDGphBBgSRabc3k8wAcg5wRwZEZZJECJh9uIepjKxXn+OZswsQzHpfe94alcTiE7dnQHyChtDDZBlhMY2dGS6ZlnSHh4VPRxturcg0me4zhnS-7+wnvsYfycwSmCB9-3A+D50mDDggI6aPb2hYOBgBQZ9X0QSxeVQRA3lz1ZGCyHkQAMCFj8QYup9EGfy5jngN43gAcskcgxgzIQjzm0AkJ09z23WMuF8LICRgDgEsWky5pAQBgMzTADA-5VxruUGmY1FKoEkP9Xm2sO4hTCrkHq6wtzsDHiwVW6tMCa3ltsFhGtjw2CModXotg6rRywOIN+dCkgMLcAxAgTc5biNCLCQR+t1wbR3Hubazs6r8J+i5E6vNLpPBOHKW0wpEZdkYF9bwtdfpuVlFeVA0RwRPC7q9J6isbG3jgJFZuTDTqfz5tIVu9Z274yMVeBGHtjFDEcRCB6AAFGRyAALWDsWsBx4Jh6IFxuza65ifho0QFCOAMACTxMSck0gRSSmZKXivdxuiFLfzmghEWfjzoBNkC0xc6gnqoXrFZHaRQD5QH4P47+sEVFWMvkkJk20fJJToKYCwVgKCaIMTkzRoz2mXU9Nov2Acq5ZPwbXZwdBvxoRuBoYSvi7bbhqgQXgbV6CdTAD1J0Lo+m9EuQFHJNsEKXMir4zZ-1vFy3IGsyGnzEByGmAoBCT14rzMMHQFKWQmDpVQJlPI2VsjWTMMMngD5SHkP8aQDSMLyjaEQK7ZQPBLqPjPm+fYvFVIiQ0vpeyKFqXHlPISxlrL1KgQ5chOQcg14HPKEHQOBCZKnOsAhcoly-wARufbe5jygovLeX1TpaFFUIEWIM7Ivi-l6v8ACzlQLODcDpV4zlzcIWBKheUCl-g4VoViPERIBB1AOl6s6fqZk1I8g8uoGl4g6UeS8kivyu1KrtEJcSuAFDyW5E2d-cSZE2DWt4N-aYVLw10pUAyriTK3iHC-MqtlQq7LIVyIWpSr4BVGpEpFUVRUgA)