https://kotlinlang.org logo
#getting-started
Title
# getting-started
k

kqr

04/03/2021, 12:26 PM
hello, please is there any way to "fix" this https://pl.kotl.in/oDHhNFTic ?
y

Youssef Shoaib [MOD]

04/03/2021, 12:33 PM
Best I could come up with (playground):
Copy code
fun main() {
    Command1Handler().execute(Command1())
    Command1Handler().execute(Command2())
    val commandA: Command = Command1()
    val commandB: Command = Command2()
    
    Command1Handler().execute(commandA)
    Command1Handler().execute(commandB)
}

interface Command
interface CommandHandler<T> where T : Command {
    fun execute(command: T)
}

class Command1 : Command
class Command2 : Command
class Command1Handler: CommandHandler<Command> {
    override fun execute(command: Command) {
        println("used supertype command")
        when(command) {
            is Command1 -> execute(command)
            is Command2 -> execute(command)
            else -> throw IllegalArgumentException()
        }
    }
    fun execute(command: Command1) = println("Executing ${command.javaClass.simpleName}")
    fun execute(command: Command2) = println("Executing ${command.javaClass.simpleName}")
}
🙇‍♂️ 1
k

kqr

04/03/2021, 1:10 PM
me too 😞
a

Alexis Manin

04/03/2021, 2:09 PM
Is that the [expression problem](https://en.m.wikipedia.org/wiki/Expression_problem) ? I do not think that Kotlin has direct solutions for this. Maybe in th future, an evolution on extension functions could reduce th pain. I think groovy uses "multiple dispatch" ro solve this, but that's not type safe if I understand correctly.
Maybe Sealed interfaces could help here (at the cost of extensibility) ? https://jorgecastillo.dev/sealed-interfaces-kotlin
t

Tomasz Krakowiak

04/03/2021, 2:34 PM
@kqr Your example is too generic and doesn't tell us what is the root of your problem. Why do you need to support 2 Command interfaces?
y

Youssef Shoaib [MOD]

04/03/2021, 2:37 PM
Okay okay so after thinking for a bit I realised that my previous reply wasn't the best that I can come up with, <https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS40LjEwIiwiY29kZSI6IkBmaWxlOlN1cHByZXNzKFwiSU5BUFBMSUNBQkxFX0pWTV9OQU1FXCIpXG5cbmZ1biBtYWluKCkge1xuICAgIHZhbCBoYW5kbGVyID0gTXlDb21tYW5kSGFuZGxlcigpXG4gICAgaGFuZGxlci5leGVjdXRlKENvbW1hbmQxKCkpXG4gICAgaGFuZGxlci5leGVjdXRlKENvbW1hbmQyKCkpXG4gICAgdmFsIGNvbW1hbmRBOiBDb21tYW5kMSA9IENvbW1hbmQxKClcbiAgICB2YWwgY29tbWFuZEI6IENvbW1hbmQgPSBDb21tYW5kMigpXG4gICAgaGFuZGxlci5leGVjdXRlKGNvbW1hbmRBKVxuICAgIC8vIGhhbmRsZXIuZXhlY3V0ZShjb21tYW5kQikgY29tcGlsZXIgZXJyb3IgYmVjYXVzZSBpdCBpc24ndCB0eXBlc2FmZVxuICAgIG5lZWRzQ29tbWFuZDJIYW5kbGVyKGhhbmRsZXI6OmV4ZWN1dGUpXG4gICAgQFN1cHByZXNzKFwiUmVtb3ZlRXhwbGljaXRUeXBlQXJndW1lbnRzXCIpIC8vIEZhbHNlIHBvc2l0aXZlXG4gICAgbmVlZHNEb3VibGVDb21tYW5kSGFuZGxlcihjb21tYW5kSGFuZGxlck9mPENvbW1hbmQyLCBDb21tYW5kMT4oaGFuZGxlcjo6ZXhlY3V0ZSwgaGFuZGxlcjo6ZXhlY3V0ZSkpXG59XG5cbmZ1biBuZWVkc0NvbW1hbmQySGFuZGxlcihoYW5kbGVyOiBDb21tYW5kSGFuZGxlcjxDb21tYW5kMj4pID0gaGFuZGxlci5leGVjdXRlKENvbW1hbmQyKCkpXG5mdW4gbmVlZHNEb3VibGVDb21tYW5kSGFuZGxlcihoYW5kbGVyOiBDb21tYW5kSGFuZGxlcjI8Q29tbWFuZDIsIENvbW1hbmQxPikge1xuICAgIGhhbmRsZXIuZXhlY3V0ZShDb21tYW5kMigpKVxuICAgIGhhbmRsZXIuZXhlY3V0ZShDb21tYW5kMSgpKVxufVxuXG5pbnRlcmZhY2UgQ29tbWFuZFxuXG5jbGFzcyBDb21tYW5kMSA6IENvbW1hbmRcbmNsYXNzIENvbW1hbmQyIDogQ29tbWFuZFxuY2xhc3MgTXlDb21tYW5kSGFuZGxlciA6IENvbW1hbmRIYW5kbGVyMjxDb21tYW5kMSwgQ29tbWFuZDI+IHtcbiAgICBvdmVycmlkZSBmdW4gZXhlY3V0ZShjb21tYW5kOiBOb3RoaW5nKSB7fVxuICAgIG92ZXJyaWRlIGZ1biBleGVjdXRlKGNvbW1hbmQ6IENvbW1hbmQxKSA9IHByaW50bG4oXCJFeGVjdXRpbmcgJHtjb21tYW5kLmphdmFDbGFzcy5zaW1wbGVOYW1lfVwiKVxuICAgIG92ZXJyaWRlIGZ1biBleGVjdXRlKGNvbW1hbmQ6IENvbW1hbmQyKSA9IHByaW50bG4oXCJFeGVjdXRpbmcgJHtjb21tYW5kLmphdmFDbGFzcy5zaW1wbGVOYW1lfVwiKVxufVxuXG5pbnRlcmZhY2UgQ29tbWFuZEhhbmRsZXIyNjxpbiBBLCBpbiBCLCBpbiBDLCBpbiBELCBpbiBFLCBpbiBGLCBpbiBHLCBpbiBILCBpbiBJLCBpbiBKLCBpbiBLLCBpbiBMLCBpbiBNLCBpbiBOLCBpbiBPLCBpbiBQLCBpbiBRLCBpbiBSLCBpbiBTLCBpbiBULCBpbiBVLCBpbiBWLCBpbiBXLCBpbiBYLCBpbiBZLCBpbiBaPiA6XG4gICAgQ29tbWFuZEhhbmRsZXI8QT5cbiAgICAgICAgd2hlcmUgQSA6IENvbW1hbmQsIEIgOiBDb21tYW5kLCBDIDogQ29tbWFuZCwgRCA6IENvbW1hbmQsIEUgOiBDb21tYW5kLCBGIDogQ29tbWFuZCwgRyA6IENvbW1hbmQsIEggOiBDb21tYW5kLCBJIDogQ29tbWFuZCwgSiA6IENvbW1hbmQsIEsgOiBDb21tYW5kLCBMIDogQ29tbWFuZCwgTSA6IENvbW1hbmQsIE4gOiBDb21tYW5kLCBPIDogQ29tbWFuZCwgUCA6IENvbW1hbmQsIFEgOiBDb21tYW5kLCBSIDogQ29tbWFuZCwgUyA6IENvbW1hbmQsIFQgOiBDb21tYW5kLCBVIDogQ29tbWFuZCwgViA6IENvbW1hbmQsIFcgOiBDb21tYW5kLCBYIDogQ29tbWFuZCwgWSA6IENvbW1hbmQsIFogOiBDb21tYW5kIHtcbiAgICBASnZtTmFtZShcImV4ZWN1dGVBXCIpXG4gICAgb3ZlcnJpZGUgZnVuIGV4ZWN1dGUoY29tbWFuZDogQSlcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZUJcIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBCKVxuXG4gICAgQEp2bU5hbWUoXCJleGVjdXRlQ1wiKVxuICAgIGZ1biBleGVjdXRlKGNvbW1hbmQ6IEMpXG5cbiAgICBASnZtTmFtZShcImV4ZWN1dGVEXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogRClcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZUVcIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBFKVxuXG4gICAgQEp2bU5hbWUoXCJleGVjdXRlRlwiKVxuICAgIGZ1biBleGVjdXRlKGNvbW1hbmQ6IEYpXG5cbiAgICBASnZtTmFtZShcImV4ZWN1dGVHXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogRylcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZUhcIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBIKVxuXG4gICAgQEp2bU5hbWUoXCJleGVjdXRlSVwiKVxuICAgIGZ1biBleGVjdXRlKGNvbW1hbmQ6IEkpXG5cbiAgICBASnZtTmFtZShcImV4ZWN1dGVKXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogSilcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZUtcIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBLKVxuXG4gICAgQEp2bU5hbWUoXCJleGVjdXRlTFwiKVxuICAgIGZ1biBleGVjdXRlKGNvbW1hbmQ6IEwpXG5cbiAgICBASnZtTmFtZShcImV4ZWN1dGVNXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogTSlcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZU5cIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBOKVxuXG4gICAgQEp2bU5hbWUoXCJleGVjdXRlT1wiKVxuICAgIGZ1biBleGVjdXRlKGNvbW1hbmQ6IE8pXG5cbiAgICBASnZtTmFtZShcImV4ZWN1dGVQXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogUClcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZVFcIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBRKVxuXG4gICAgQEp2bU5hbWUoXCJleGVjdXRlUlwiKVxuICAgIGZ1biBleGVjdXRlKGNvbW1hbmQ6IFIpXG5cbiAgICBASnZtTmFtZShcImV4ZWN1dGVTXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogUylcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZVRcIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBUKVxuXG4gICAgQEp2bU5hbWUoXCJleGVjdXRlVVwiKVxuICAgIGZ1biBleGVjdXRlKGNvbW1hbmQ6IFUpXG5cbiAgICBASnZtTmFtZShcImV4ZWN1dGVWXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogVilcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZVdcIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBXKVxuXG4gICAgQEp2bU5hbWUoXCJleGVjdXRlWFwiKVxuICAgIGZ1biBleGVjdXRlKGNvbW1hbmQ6IFgpXG5cbiAgICBASnZtTmFtZShcImV4ZWN1dGVZXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogWSlcblxuICAgIEBKdm1OYW1lKFwiZXhlY3V0ZVpcIilcbiAgICBmdW4gZXhlY3V0ZShjb21tYW5kOiBaKVxufVxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyMjU8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiwgTywgUCwgUSwgUiwgUywgVCwgVSwgViwgVywgWCwgWT4gPSBDb21tYW5kSGFuZGxlcjI2PEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4sIE8sIFAsIFEsIFIsIFMsIFQsIFUsIFYsIFcsIFgsIFksIE5vdGhpbmc+XG50eXBlYWxpYXMgQ29tbWFuZEhhbmRsZXIyNDxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBPLCBQLCBRLCBSLCBTLCBULCBVLCBWLCBXLCBYPiA9IENvbW1hbmRIYW5kbGVyMjU8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiwgTywgUCwgUSwgUiwgUywgVCwgVSwgViwgVywgWCwgTm90aGluZz5cbnR5cGVhbGlhcyBDb21tYW5kSGFuZGxlcjIzPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4sIE8sIFAsIFEsIFIsIFMsIFQsIFUsIFYsIFc+ID0gQ29tbWFuZEhhbmRsZXIyNDxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBPLCBQLCBRLCBSLCBTLCBULCBVLCBWLCBXLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyMjI8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiwgTywgUCwgUSwgUiwgUywgVCwgVSwgVj4gPSBDb21tYW5kSGFuZGxlcjIzPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4sIE8sIFAsIFEsIFIsIFMsIFQsIFUsIFYsIE5vdGhpbmc+XG50eXBlYWxpYXMgQ29tbWFuZEhhbmRsZXIyMTxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBPLCBQLCBRLCBSLCBTLCBULCBVPiA9IENvbW1hbmRIYW5kbGVyMjI8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiwgTywgUCwgUSwgUiwgUywgVCwgVSwgTm90aGluZz5cbnR5cGVhbGlhcyBDb21tYW5kSGFuZGxlcjIwPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4sIE8sIFAsIFEsIFIsIFMsIFQ+ID0gQ29tbWFuZEhhbmRsZXIyMTxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBPLCBQLCBRLCBSLCBTLCBULCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyMTk8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiwgTywgUCwgUSwgUiwgUz4gPSBDb21tYW5kSGFuZGxlcjIwPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4sIE8sIFAsIFEsIFIsIFMsIE5vdGhpbmc+XG50eXBlYWxpYXMgQ29tbWFuZEhhbmRsZXIxODxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBPLCBQLCBRLCBSPiA9IENvbW1hbmRIYW5kbGVyMTk8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiwgTywgUCwgUSwgUiwgTm90aGluZz5cbnR5cGVhbGlhcyBDb21tYW5kSGFuZGxlcjE3PEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4sIE8sIFAsIFE+ID0gQ29tbWFuZEhhbmRsZXIxODxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBPLCBQLCBRLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyMTY8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiwgTywgUD4gPSBDb21tYW5kSGFuZGxlcjE3PEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4sIE8sIFAsIE5vdGhpbmc+XG50eXBlYWxpYXMgQ29tbWFuZEhhbmRsZXIxNTxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBPPiA9IENvbW1hbmRIYW5kbGVyMTY8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTSwgTiwgTywgTm90aGluZz5cbnR5cGVhbGlhcyBDb21tYW5kSGFuZGxlcjE0PEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4+ID0gQ29tbWFuZEhhbmRsZXIxNTxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyMTM8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTT4gPSBDb21tYW5kSGFuZGxlcjE0PEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE5vdGhpbmc+XG50eXBlYWxpYXMgQ29tbWFuZEhhbmRsZXIxMjxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMPiA9IENvbW1hbmRIYW5kbGVyMTM8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSiwgSywgTCwgTm90aGluZz5cbnR5cGVhbGlhcyBDb21tYW5kSGFuZGxlcjExPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEs+ID0gQ29tbWFuZEhhbmRsZXIxMjxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyMTA8QSwgQiwgQywgRCwgRSwgRiwgRywgSCwgSSwgSj4gPSBDb21tYW5kSGFuZGxlcjExPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIE5vdGhpbmc+XG50eXBlYWxpYXMgQ29tbWFuZEhhbmRsZXI5PEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEk+ID0gQ29tbWFuZEhhbmRsZXIxMDxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyODxBLCBCLCBDLCBELCBFLCBGLCBHLCBIPiA9IENvbW1hbmRIYW5kbGVyOTxBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyNzxBLCBCLCBDLCBELCBFLCBGLCBHPiA9IENvbW1hbmRIYW5kbGVyODxBLCBCLCBDLCBELCBFLCBGLCBHLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyNjxBLCBCLCBDLCBELCBFLCBGPiA9IENvbW1hbmRIYW5kbGVyNzxBLCBCLCBDLCBELCBFLCBGLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyNTxBLCBCLCBDLCBELCBFPiA9IENvbW1hbmRIYW5kbGVyNjxBLCBCLCBDLCBELCBFLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyNDxBLCBCLCBDLCBEPiA9IENvbW1hbmRIYW5kbGVyNTxBLCBCLCBDLCBELCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyMzxBLCBCLCBDPiA9IENvbW1hbmRIYW5kbGVyNDxBLCBCLCBDLCBOb3RoaW5nPlxudHlwZWFsaWFzIENvbW1hbmRIYW5kbGVyMjxBLCBCPiA9IENvbW1hbmRIYW5kbGVyMzxBLCBCLCBOb3RoaW5nPlxuXG5mdW4gaW50ZXJmYWNlIENvbW1hbmRIYW5kbGVyPGluIEE+IHdoZXJlIEEgOiBDb21tYW5kIHtcbiAgICBASnZtTmFtZShcImV4ZWN1dGVBXCIpXG4gICAgZnVuIGV4ZWN1dGUoY29tbWFuZDogQSlcbn1cblxuZnVuIDxBIDogQ29tbWFuZD5cbiAgICAgICAgY29tbWFuZEhhbmRsZXJPZihcbiAgICBoYW5kbGVyQTogQ29tbWFuZEhhbmRsZXI8QT4/ID0gbnVsbFxuKSA9IGNvbW1hbmRIYW5kbGVyT2Y8QSwgTm90aGluZz4oaGFuZGxlckEpXG5cbmZ1biA8QSA6IENvbW1hbmQsIEIgOiBDb21tYW5kPlxuICAgICAgICBjb21tYW5kSGFuZGxlck9mKFxuICAgIGhhbmRsZXJBOiBDb21tYW5kSGFuZGxlcjxBPj8gPSBudWxsLFxuICAgIGhhbmRsZXJCOiBDb21tYW5kSGFuZGxlcjxCPj8gPSBudWxsXG4pID0gY29tbWFuZEhhbmRsZXJPZjxBLCBCLCBOb3RoaW5nPihoYW5kbGVyQSwgaGFuZGxlckIpXG5cbmZ1biA8QSA6IENvbW1hbmQsIEIgOiBDb21tYW5kLCBDIDogQ29tbWFuZD5cbiAgICAgICAgY29tbWFuZEhhbmRsZXJPZihcbiAgICBoYW5kbGVyQTogQ29tbWFuZEhhbmRsZXI8QT4/ID0gbnVsbCxcbiAgICBoYW5kbGVyQjogQ29tbWFuZEhhbmRsZXI8Qj4/ID0gbnVsbCxcbiAgICBoYW5kbGVyQzogQ29tbWFuZEhhbmRsZXI8Qz4/ID0gbnVsbCxcbikgPSBjb21tYW5kSGFuZGxlck9mPEEsIEIsIEMsIE5vdGhpbmc+KGhhbmRsZXJBLCBoYW5kbGVyQiwgaGFuZGxlckMpXG5cbmZ1biA8QSA6IENvbW1hbmQsIEIgOiBDb21tYW5kLCBDIDogQ29tbWFuZCwgRCA6IENvbW1hbmQ+XG4gICAgICAgIGNvbW1hbmRIYW5kbGVyT2YoXG4gICAgaGFuZGxlckE6IENvbW1hbmRIYW5kbGVyPEE+PyA9IG51bGwsXG4gICAgaGFuZGxlckI6IENvbW1hbmRIYW5kbGVyPEI+PyA9IG51bGwsXG4gICAgaGFuZGxlckM6IENvbW1hbmRIYW5kbGVyPEM+PyA9IG51bGwsXG4gICAgaGFuZGxlckQ6IENvbW1hbmRIYW5kbGVyPEQ+PyA9IG51bGxcbikgPSBjb21tYW5kSGFuZGxlck9mPEEsIEIsIEMsIEQsIE5vdGhpbmc+KGhhbmRsZXJBLCBoYW5kbGVyQiwgaGFuZGxlckMsIGhhbmRsZXJEKVxuXG5mdW4gPEEgOiBDb21tYW5kLCBCIDogQ29tbWFuZCwgQyA6IENvbW1hbmQsIEQgOiBDb21tYW5kLCBFIDogQ29tbWFuZD5cbiAgICAgICAgY29tbWFuZEhhbmRsZXJPZihcbiAgICBoYW5kbGVyQTogQ29tbWFuZEhhbmRsZXI8QT4/ID0gbnVsbCxcbiAgICBoYW5kbGVyQjogQ29tbWFuZEhhbmRsZXI8Qj4/ID0gbnVsbCxcbiAgICBoYW5kbGVyQzogQ29tbWFuZEhhbmRsZXI8Qz4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRDogQ29tbWFuZEhhbmRsZXI8RD4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRTogQ29tbWFuZEhhbmRsZXI8RT4/ID0gbnVsbFxuKSA9IGNvbW1hbmRIYW5kbGVyT2Y8QSwgQiwgQywgRCwgRSwgTm90aGluZz4oaGFuZGxlckEsIGhhbmRsZXJCLCBoYW5kbGVyQywgaGFuZGxlckQsIGhhbmRsZXJFKVxuXG5mdW4gPEEgOiBDb21tYW5kLCBCIDogQ29tbWFuZCwgQyA6IENvbW1hbmQsIEQgOiBDb21tYW5kLCBFIDogQ29tbWFuZCwgRiA6IENvbW1hbmQ+XG4gICAgICAgIGNvbW1hbmRIYW5kbGVyT2YoXG4gICAgaGFuZGxlckE6IENvbW1hbmRIYW5kbGVyPEE+PyA9IG51bGwsXG4gICAgaGFuZGxlckI6IENvbW1hbmRIYW5kbGVyPEI+PyA9IG51bGwsXG4gICAgaGFuZGxlckM6IENvbW1hbmRIYW5kbGVyPEM+PyA9IG51bGwsXG4gICAgaGFuZGxlckQ6IENvbW1hbmRIYW5kbGVyPEQ+PyA9IG51bGwsXG4gICAgaGFuZGxlckU6IENvbW1hbmRIYW5kbGVyPEU+PyA9IG51bGwsXG4gICAgaGFuZGxlckY6IENvbW1hbmRIYW5kbGVyPEY+PyA9IG51bGxcbikgPSBjb21tYW5kSGFuZGxlck9mPEEsIEIsIEMsIEQsIEUsIEYsIE5vdGhpbmc+KGhhbmRsZXJBLCBoYW5kbGVyQiwgaGFuZGxlckMsIGhhbmRsZXJELCBoYW5kbGVyRSwgaGFuZGxlckYpXG5cbmZ1biA8QSA6IENvbW1hbmQsIEIgOiBDb21tYW5kLCBDIDogQ29tbWFuZCwgRCA6IENvbW1hbmQsIEUgOiBDb21tYW5kLCBGIDogQ29tbWFuZCwgRyA6IENvbW1hbmQ+XG4gICAgICAgIGNvbW1hbmRIYW5kbGVyT2YoXG4gICAgaGFuZGxlckE6IENvbW1hbmRIYW5kbGVyPEE+PyA9IG51bGwsXG4gICAgaGFuZGxlckI6IENvbW1hbmRIYW5kbGVyPEI+PyA9IG51bGwsXG4gICAgaGFuZGxlckM6IENvbW1hbmRIYW5kbGVyPEM+PyA9IG51bGwsXG4gICAgaGFuZGxlckQ6IENvbW1hbmRIYW5kbGVyPEQ+PyA9IG51bGwsXG4gICAgaGFuZGxlckU6IENvbW1hbmRIYW5kbGVyPEU+PyA9IG51bGwsXG4gICAgaGFuZGxlckY6IENvbW1hbmRIYW5kbGVyPEY+PyA9IG51bGwsXG4gICAgaGFuZGxlckc6IENvbW1hbmRIYW5kbGVyPEc+PyA9IG51bGxcbikgPSBjb21tYW5kSGFuZGxlck9mPEEsIEIsIEMsIEQsIEUsIEYsIEcsIE5vdGhpbmc+KGhhbmRsZXJBLCBoYW5kbGVyQiwgaGFuZGxlckMsIGhhbmRsZXJELCBoYW5kbGVyRSwgaGFuZGxlckYsIGhhbmRsZXJHKVxuXG5mdW4gPEEgOiBDb21tYW5kLCBCIDogQ29tbWFuZCwgQyA6IENvbW1hbmQsIEQgOiBDb21tYW5kLCBFIDogQ29tbWFuZCwgRiA6IENvbW1hbmQsIEcgOiBDb21tYW5kLCBIIDogQ29tbWFuZD5cbiAgICAgICAgY29tbWFuZEhhbmRsZXJPZihcbiAgICBoYW5kbGVyQTogQ29tbWFuZEhhbmRsZXI8QT4/ID0gbnVsbCxcbiAgICBoYW5kbGVyQjogQ29tbWFuZEhhbmRsZXI8Qj4/ID0gbnVsbCxcbiAgICBoYW5kbGVyQzogQ29tbWFuZEhhbmRsZXI8Qz4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRDogQ29tbWFuZEhhbmRsZXI8RD4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRTogQ29tbWFuZEhhbmRsZXI8RT4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRjogQ29tbWFuZEhhbmRsZXI8Rj4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRzogQ29tbWFuZEhhbmRsZXI8Rz4/ID0gbnVsbCxcbiAgICBoYW5kbGVySDogQ29tbWFuZEhhbmRsZXI8SD4/ID0gbnVsbCxcbikgPSBjb21tYW5kSGFuZGxlck9mPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIE5vdGhpbmc+KFxuICAgIGhhbmRsZXJBLFxuICAgIGhhbmRsZXJCLFxuICAgIGhhbmRsZXJDLFxuICAgIGhhbmRsZXJELFxuICAgIGhhbmRsZXJFLFxuICAgIGhhbmRsZXJGLFxuICAgIGhhbmRsZXJHLFxuICAgIGhhbmRsZXJIXG4pXG5cbmZ1biA8QSA6IENvbW1hbmQsIEIgOiBDb21tYW5kLCBDIDogQ29tbWFuZCwgRCA6IENvbW1hbmQsIEUgOiBDb21tYW5kLCBGIDogQ29tbWFuZCwgRyA6IENvbW1hbmQsIEggOiBDb21tYW5kLCBJIDogQ29tbWFuZD5cbiAgICAgICAgY29tbWFuZEhhbmRsZXJPZihcbiAgICBoYW5kbGVyQTogQ29tbWFuZEhhbmRsZXI8QT4/ID0gbnVsbCxcbiAgICBoYW5kbGVyQjogQ29tbWFuZEhhbmRsZXI8Qj4/ID0gbnVsbCxcbiAgICBoYW5kbGVyQzogQ29tbWFuZEhhbmRsZXI8Qz4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRDogQ29tbWFuZEhhbmRsZXI8RD4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRTogQ29tbWFuZEhhbmRsZXI8RT4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRjogQ29tbWFuZEhhbmRsZXI8Rj4/ID0gbnVsbCxcbiAgICBoYW5kbGVyRzogQ29tbWFuZEhhbmRsZXI8Rz4/ID0gbnVsbCxcbiAgICBoYW5kbGVySDogQ29tbWFuZEhhbmRsZXI8SD4/ID0gbnVsbCxcbiAgICBoYW5kbGVySTogQ29tbWFuZEhhbmRsZXI8ST4/ID0gbnVsbCxcbikgPSBjb21tYW5kSGFuZGxlck9mPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIE5vdGhpbmc+KFxuICAgIGhhbmRsZXJBLFxuICAgIGhhbmRsZXJCLFxuICAgIGhhbmRsZXJDLFxuICAgIGhhbmRsZXJELFxuICAgIGhhbmRsZXJFLFxuICAgIGhhbmRsZXJGLFxuICAgIGhhbmRsZXJHLFxuICAgIGhhbmRsZXJILFxuICAgIGhhbmRsZXJJXG4pXG5cbmZ1biA8QSA6IENvbW1hbmQsIEIgOiBDb21tYW5kLCBDIDogQ29tbWFuZCwgRCA6IENvbW1hbmQsIEUgOiBDb21tYW5kLCBGIDogQ29tbWFuZCwgRyA6IENvbW1hbmQsIEggOiBDb21tYW5kLCBJIDogQ29tbWFuZCwgSiA6IENvbW1hbmQ+XG4gICAgICAgIGNvbW1hbmRIYW5kbGVyT2YoXG4gICAgaGFuZGxlckE6IENvbW1hbmRIYW5kbGVyPEE+PyA9IG51bGwsXG4gICAgaGFuZGxlckI6IENvbW1hbmRIYW5kbGVyPEI+PyA9IG51bGwsXG4gICAgaGFuZGxlckM6IENvbW1hbmRIYW5kbGVyPEM+PyA9IG51bGwsXG4gICAgaGFuZGxlckQ6IENvbW1hbmRIYW5kbGVyPEQ+PyA9IG51bGwsXG4gICAgaGFuZGxlckU6IENvbW1hbmRIYW5kbGVyPEU+PyA9IG51bGwsXG4gICAgaGFuZGxlckY6IENvbW1hbmRIYW5kbGVyPEY+PyA9IG51bGwsXG4gICAgaGFuZGxlckc6IENvbW1hbmRIYW5kbGVyPEc+PyA9IG51bGwsXG4gICAgaGFuZGxlckg6IENvbW1hbmRIYW5kbGVyPEg+PyA9IG51bGwsXG4gICAgaGFuZGxlckk6IENvbW1hbmRIYW5kbGVyPEk+PyA9IG51bGwsXG4gICAgaGFuZGxlcko6IENvbW1hbmRIYW5kbGVyPEo+PyA9IG51bGxcbikgPSBjb21tYW5kSGFuZGxlck9mPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIE5vdGhpbmc+KFxuICAgIGhhbmRsZXJBLFxuICAgIGhhbmRsZXJCLFxuICAgIGhhbmRsZXJDLFxuICAgIGhhbmRsZXJELFxuICAgIGhhbmRsZXJFLFxuICAgIGhhbmRsZXJGLFxuICAgIGhhbmRsZXJHLFxuICAgIGhhbmRsZXJILFxuICAgIGhhbmRsZXJJLFxuICAgIGhhbmRsZXJKXG4pXG5cbmZ1biA8QSA6IENvbW1hbmQsIEIgOiBDb21tYW5kLCBDIDogQ29tbWFuZCwgRCA6IENvbW1hbmQsIEUgOiBDb21tYW5kLCBGIDogQ29tbWFuZCwgRyA6IENvbW1hbmQsIEggOiBDb21tYW5kLCBJIDogQ29tbWFuZCwgSiA6IENvbW1hbmQsIEsgOiBDb21tYW5kPlxuICAgICAgICBjb21tYW5kSGFuZGxlck9mKFxuICAgIGhhbmRsZXJBOiBDb21tYW5kSGFuZGxlcjxBPj8gPSBudWxsLFxuICAgIGhhbmRsZXJCOiBDb21tYW5kSGFuZGxlcjxCPj8gPSBudWxsLFxuICAgIGhhbmRsZXJDOiBDb21tYW5kSGFuZGxlcjxDPj8gPSBudWxsLFxuICAgIGhhbmRsZXJEOiBDb21tYW5kSGFuZGxlcjxEPj8gPSBudWxsLFxuICAgIGhhbmRsZXJFOiBDb21tYW5kSGFuZGxlcjxFPj8gPSBudWxsLFxuICAgIGhhbmRsZXJGOiBDb21tYW5kSGFuZGxlcjxGPj8gPSBudWxsLFxuICAgIGhhbmRsZXJHOiBDb21tYW5kSGFuZGxlcjxHPj8gPSBudWxsLFxuICAgIGhhbmRsZXJIOiBDb21tYW5kSGFuZGxlcjxIPj8gPSBudWxsLFxuICAgIGhhbmRsZXJJOiBDb21tYW5kSGFuZGxlcjxJPj8gPSBudWxsLFxuICAgIGhhbmRsZXJKOiBDb21tYW5kSGFuZGxlcjxKPj8gPSBudWxsLFxuICAgIGhhbmRsZXJLOiBDb21tYW5kSGFuZGxlc
2 Views